带有选择和 jsonpath 的 Camel 端点在尝试作为独立端点时可以正常工作,但是当我在路由配置中引入 rest 端点时,选择会停止过滤从邮递员发送的基于内容的消息路由。我在这里缺少什么吗?
我尝试将 json 消息直接发送到端点并且它正确路由。但是当添加 restConfiguration 并尝试启动路由时,它会停止路由或发送到正确的方法。
主班——
static String jsonMsg = "{\n" +
" \"Header\": {\n" +
" \"MessageType\": \"Request1\",\n" +
" \"MessageID\": \"12345\",\n" +
" }\n" +
"}";
public static void main(String[] args) throws Exception {
CamelContext context = new DefaultCamelContext();
context.addRoutes(new HelloRoute());
context.start();
//ProducerTemplate producer = context.createProducerTemplate();
//producer.sendBody("direct:helloRoute", jsonMsg);
}
HelloRoute 类-
@Override
public void configure() throws Exception {
restConfiguration()
.component("jetty")
.host("0.0.0.0")
.port("9281")
.scheme("http")
.componentProperty("minThreads", "1")
.componentProperty("maxThreads", "16");rest("/helloCamel/").consumes("application/json").produces("application/json").post().to("direct:helloRoute");
from("direct:helloRoute")
.choice()
.when().jsonpath("$.Header[?(@.MessageType == 'Request1')]",true)
.bean(HelloRoute.class, "Route1")
.when().jsonpath("$.Header[?(@.MessageType == 'Request2')]",true)
.bean(HelloRoute.class, "Route2")
.otherwise()
.bean(HelloRoute.class,"otherwiseRoute")
.endChoice();
}
目前,如果上面的 JSON 更改为“MessageType”:“Request2”,那么它会跳转到 else 子句,而不是转到“Route2”方法。