【发布时间】:2014-02-07 16:40:47
【问题描述】:
我有一个调用远程 HTTP 服务器的 HTTP 生产者。我需要读取来自 HTTP 服务器的响应并将其转换为 json 并进行进一步处理。我在处理大型消息体时遇到了一些挑战。我不太确定大小阈值是多少。我的代码看起来
<from uri="restlet:/foo"/>
<setHeader headerName="Exchange.HTTP_URI">
<simple>{{ConfigurableURL}}}</simple>
</setHeader>
<to uri="http://dymmyhost"/>
<transform>
<simple>${bodyAs('java.lang.String')}</simple>
</transform>
<transform>
<groovy>org.json.simple.JSONValue.parse(request.body.trim())</groovy>
</transform>
当尺寸足够小时,这没有问题。当它很大时,身体会在最后一次转换中被截断。如果我从最后一次转换中删除 org.json.simple.JSONValue.parse,我最终会收到一条错误消息,例如: org.apache.http.ConnectionClosedException:内容长度分隔的消息正文过早结束(预期:2263;收到:2233
我的挖掘表明存在缓冲问题。因此,我在 URL 中添加了参数 disableStreamCache=true。它没有帮助。
我还用适当的 Camel unmarshaller 替换了 JSON 解析行:
<unmarshal ref="json"/>
仍然没有帮助。我得到了异常:Content-Length delimited message body 过早结束。
有什么线索吗?
【问题讨论】:
标签: java spring apache-camel