我正在尝试基于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