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