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