当我尝试检查标头的值时,我的Camel Route出现问题。 所以发生的事情是我去处理器,做我的东西,然后我创建了2个不同的消息,我放在体内。 在那之后我回到我的路线上,我分裂了我的身体,所以我可以路由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, 我为它们设置了一个body和一个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)
答案 0 :(得分:1)
我为您的路线设置了更简单的测试。它将数据路由到正确的when
子句。当您split()
时,会为每次交换复制标题,因此我不确定您为什么会(根据您的路线)为什么列表元素会有不同的标题值。
public class SampleTest extends CamelTestSupport{
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start")
.setHeader("CamelFileName", simple("myString1"))
.split(body())
.choice()
.when(header("CamelFileName").contains("myString1"))
.to("mock:myString1")
.endChoice()
.when(header("CamelFileName").contains("myString2"))
.to("mock:myString2")
.endChoice()
.otherwise()
.to("mock:otherwise")
.endChoice()
.end();
}
};
}
@Test
public void test() throws Exception {
//Setup mock body
java.util.List<String> myList = new java.util.ArrayList<String>();
myList.add("1");
myList.add("2");
MockEndpoint mock1 = getMockEndpoint("mock:myString1");
MockEndpoint mock2 = getMockEndpoint("mock:myString2");
MockEndpoint mockOtherwise = getMockEndpoint("mock:otherwise");
mock1.expectedMessageCount(myList.size());
mock2.expectedMessageCount(0);
mockOtherwise.expectedMessageCount(0);
template.sendBody("direct:start", myList);
assertMockEndpointsSatisfied();
}
}