1

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

  .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") 
4

1 回答 1

1

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

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

  “直接:开始” ==> {
    选择(){
      当(交换 => 交换.getIn.getBody(classOf[String])!= null){
        进程(新的响应处理器)
        log(LoggingLevel.INFO,"文件内容:${body}")
        日志(“完成的工作”)
      } 否则 {
        日志(LoggingLevel.INFO,“空体”)
      }
    }
    log("在所有情况下都应该到达这里")
  }

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

780 [main] INFO route1 - 空体
783 [main] INFO route1 - 在所有情况下都应到达此处
784 [main] INFO route1 - 包含内容的文件:多么美好的一天!
784 [main] INFO route1 - 已完成作业
784 [main] INFO route1 - 在所有情况下都应到达此处
于 2013-10-24T07:41:25.180 回答