0

带有选择和 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”方法。

4

0 回答 0