CBR верблюда с выражением фильтра JSONPath, получая исключение InvalidPathException - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь реализовать 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 в CBR Camel,Спасибо.

PS верблюд / верблюд-jsonpath версии 2.17.0

...