带有JSONPath过滤器表达式的Camel CBR,获取InvalidPathException

时间:2018-10-16 17:21:16

标签: apache-camel jsonpath json-path-expression

我正在尝试基于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路径过滤器表达式。谢谢。

P.S。 camel / camel-jsonpath版本为2.17.0

0 个答案:

没有答案