【发布时间】:2015-05-18 10:10:22
【问题描述】:
当我尝试检查标头的值时,我的 Camel Route 出现问题。 所以发生的事情是我去一个处理器,做我的事情,然后我创建了两个不同的信息,我把它们放在身体里。 之后我回到我的路线,我拆分了我的身体,以便我可以路由 2 个不同的消息,然后我在标头 CamelFileName 上使用 .choice().when() 来检查它是否包含一些值。 它没有找到值,然后没有进入 .when()
为了更清楚,这里是源代码:
// My route
from("myQuartz")
.routeId("myId")
.bean(myProcessor.class)
.split(body())
.to("log:test?showAll=true&multiline=true")
.log('[${header.CamelFileName}]')
.choice()
.when(header('CamelFileName').contains('myString1'))
// do my stuff
.endChoice()
.when(header('CamelFileName').contains('myString2'))
// do my other stuff
.endChoice()
.otherwise()
.log("It did not go inside the when")
.to("log:test?showAll=true&multiline=true")
.endChoice()
.end()
所以在这里我只是试图检查 CamelFileName 标头是否包含一个字符串(它不是一个变量),但它会继续在其他情况下进行。 拆分后的日志显示 CamelFileName 标头是正确的,并且包含我要查找的字符串。
我尝试了不同的方法来检查 when() 中的值,例如使用 simple(),但它不起作用。 我的文件是一个 groovy 文件。
感谢您的帮助。
编辑: 因此,为了解释我的身体内部是什么,我将向您展示处理器源代码。 我创建了两个 DefaultMessage, 我为它们设置了一个正文和一个 CamelFileName 标头, 我将它们放入一个列表中,然后将该列表放入我的交换体中。 之后,我回到路由并拆分正文,以便将两条消息分开并路由它们。 这是我的处理器中发生的事情:
// Message 1
DefaultMessage message1 = new DefaultMessage()
message1.setBody(bodyContent)
def fileName1 = "myString1_blablabla.txt"
message1.setHeader("CamelFileName",fileName1)
listMessages.add(message1)
// Message 2
DefaultMessage message2 = new DefaultMessage()
message2.setBody(bodyContent)
def fileName2 = "myString2_blablabla.txt"
message2.setHeader("CamelFileName",fileName2)
listMessages.add(message2)
exchange.in.setBody(listMessages)
【问题讨论】:
标签: apache groovy split header apache-camel