Scala Camel - 选择后的常用代码

时间:2013-10-23 17:06:56

标签: scala apache-camel

我有一个场景,其中一些代码需要选择,否则一些代码,并且在两种情况下都需要执行一些常见的清理代码。我尝试了以下一段代码,但无法达到我想要的效果。基本上它会考虑所有代码,否则作为其他部分。在以下情形中,仅在其他情况下才打印“在所有情况下应该到达此处”。有人可以告诉我哪里出错了吗?

  .choice(){ 
    when(exchange => exchange.getIn.getBody(classOf[String]) != null){ 
      process(new ResponseProcessor) 
      .log(LoggingLevel.INFO,"File with content: ${body}") 
      .log("Completed Job") 
    } otherwise{ 
      log(LoggingLevel.INFO,"Empty Body") 
    } 
  } 
  .log("Should Reach Here in all scenarios") 

1 个答案:

答案 0 :(得分:1)

在Scala DSL中,您可以使用简单的风格(流畅的API)来实现更小,更简单的路径。因为它直接构建在普通的Java流畅API之上,所以它确实遇到了一些相同的问题(比如需要显式的end()API调用来划分某些块)。

对于更高级的路由,您可以使用另一种Scala DSL样式,它使用正确的Scala代码块。主要的区别是避免使用。在您的示例中调用不同的方法之前:

  "direct:start" ==> {
    choice(){
      when(exchange => exchange.getIn.getBody(classOf[String]) != null) {
        process(new ResponseProcessor)
        log(LoggingLevel.INFO,"File with content: ${body}")
        log("Completed Job")
      } otherwise {
        log(LoggingLevel.INFO,"Empty Body")
      }
    }
    log("Should Reach Here in all scenarios")
  }

使用Camel 2.12.1和Scala 2.10.3,这确实为我提供了日志中的预期输出:

780 [main] INFO route1 - Empty Body
783 [main] INFO route1 - Should Reach Here in all scenarios
784 [main] INFO route1 - File with content: What a beautiful day!!
784 [main] INFO route1 - Completed Job
784 [main] INFO route1 - Should Reach Here in all scenarios