Верблюд - тело json потребляется после использования jsonpath - PullRequest
0 голосов
/ 26 октября 2018

Я использую верблюда в контексте отдыха, и мне нужно манипулировать json, полученным из запроса. Это что-то вроде:

{
 'field1':'abc',
 'field2':'def'
}

Все, что мне нужно сделать, это извлечь field1 и field2 и поместить их в 2 свойства, поэтому я попробовал что-то подобное

<setProperty propertyName="Field1">
  <jsonpath>$.field1</jsonpath>
</setProperty>
<setProperty propertyName="Field2">
  <jsonpath>$.field2</jsonpath>
</setProperty>

но я получаю эту ошибку: org.apache.camel.ExpressionEvaluationException: com.jayway.jsonpath.PathNotFoundException: Expected to find an object with property ['field2'] in path $ but found 'java.lang.String'. This is not a json object according to the JsonProvider: 'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider'.

и после некоторых испытаний я обнаружил, что мое тело было пустым после первого использования jsonpath.

Тот же процесс, примененный к XML с использованием xpath, не дает никакой ошибки, и мне интересно, можно ли сделать то же самое с jsonpath вместо того, чтобы создать объект mapper в java. заранее спасибо

1 Ответ

0 голосов
/ 27 октября 2018

Если обработанное сообщение Camel имеет тип InputStream, этот поток может быть прочитан только один раз.

Чтобы решить эту проблему:

  • либо включить кэширование потока Camel (http://camel.apache.org/stream-caching.html)
  • или вставьте шаг (до запросов jsonpath) в свой маршрут, чтобы преобразовать тело сообщения в строку (чтобы его можно было прочитать несколько раз: (например, <convertBodyTo type="java.lang.String" charset="ISO-8859-1">))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...