CBR верблюда с выражением фильтра JSONPath, получая исключение InvalidPathException
Я пытаюсь реализовать Camel CBR на основе выражений фильтра JSONPath.
Тело (структура 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")))
Я хотел бы знать, как использовать выражения фильтра путей JSON в Camel CBR. Благодарю.
PS верблюд / верблюд-jsonpath версии 2.17.0