1

我正在尝试基于 JSONPath 过滤器表达式实现 Camel CBR。

正文(JSON结构)如下:

{
    "orderId": "315973",
    "status": "Complete",
    "entity": {
        ...
    }
 }

我的路线如下:

// Unimportant part
from("direct:in")
      .streamCaching()
      .setHeader(Exchange.HTTP_METHOD, constant("POST"))
      .setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
      .setHeader("Authorization", simple(AUTH_TOKEN))
          .to(SOME_HTTP_ENDPOINT_1).bean(ResultIDExtractorBean.class)
          .to(SOME_HTTP_ENDPOINT_2).bean(OrderIDExtractorBean.class)
          .to(SOME_HTTP_ENDPOINT_3)
             .choice()
// Important part
                  .when().jsonpath("$[?(@.status == 'Complete')]" , false)
                      .to("mock:complete")
                  .when().jsonpath("$[?(@.status == 'In Progress')]" , false)
                       .to("mock:in_progress")
                  .otherwise()
                        .to("mock:error").stop()
                 .end();

我面临的两个问题:

1)如果我得到异常:org.apache.camel.ExpressionEvaluationException: com.jayway.jsonpath.InvalidPathException: Filter: [?] can not be applied to primitives.我可以抑制这个异常,但第二个(更关键的)问题没有解决。

2) 消息不是基于“状态”路由的。

但是,此谓词表达式有效:

 .when(PredicateBuilder.isEqualTo(
      ExpressionBuilder.languageExpression("jsonpath", "$.status"), 
      ExpressionBuilder.constantExpression("In Progress")))

我想知道如何在 Camel CBR 中利用 JSON 路径过滤器表达式。谢谢。

PS camel/camel-jsonpath 版本是 2.17.0

4

0 回答 0