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