Могу ли я использовать Camel Simple Expression внутри языка JsonPath?

Привет, я хотел бы использовать значение заголовка из моего обмена верблюдами в качестве условия фильтра в моем выражении JsonPath.

Что-то вроде этого:

.setBody().jsonpath("$.person[?(@.role=='${headers.role}')]")

Простое выражение не будет разрешено таким образом.

Как я могу сделать это с помощью Apache Camel?


person JBernhardt    schedule 27.07.2016    source источник


Ответы (2)


Я обнаружил один способ сделать это с помощью компонента процессора и некоторого Java-кода:

String jsonpathFilter = SimpleLanguage.simple(
  "$.person[?(@.role=='${headers.role}')]").evaluate(exchange, String.class);
String result = new JsonPathExpression(jsonpathFilter).evaluate(exchange, String.class);
exchange.getIn().setBody(result);

Но я не очень доволен этим решением. Так что, если вы знаете лучший способ, пожалуйста, дайте мне знать.

person JBernhardt    schedule 27.07.2016
comment
Попался - ваше собственное решение в этом случае предпочтительнее, пока CAMEL-10189 не будет разрешен (что более или менее делает то же самое, что и вы). Я удалил свой ответ. - person raphaëλ; 27.07.2016

Нет, это невозможно прямо в синтаксисе, но это хорошая идея. Итак, я зарегистрировал тикет: https://issues.apache.org/jira/browse/CAMEL-10189

Если у нас есть это из коробки, то оно работает для любого DSL, такого как Java и XML DSL.

person Claus Ibsen    schedule 27.07.2016
comment
Спасибо, в будущем будет проще. - person JBernhardt; 27.07.2016