Camel - json body 在使用 jsonpath 后消耗

Camel - json body is consumed after have used jsonpath

我在休息上下文中使用骆驼,我必须操纵从请求中获得的 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'.

经过一些测试,我发现我的 body 在第一次使用 jsonpath 后是空的。

使用 xpath 应用于 XML 的相同过程没有给出任何错误,我想知道是否可以对 jsonpath 执行相同的操作而不是创建映射器 object 在 java 中。提前谢谢你

如果处理后的Camel消息是InputStream类型,显然这个流只能读一次

解决这个问题:

  • 要么启用 Camel 流缓存 (http://camel.apache.org/stream-caching.html)
  • 或者在你的路由中插入一个步骤(在 jsonpath 查询之前)将消息正文转换为字符串(以便它可以被多次读取: (例如 <convertBodyTo type="java.lang.String" charset="ISO-8859-1">))