我有一个调用远程HTTP Server的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:Content-Length分隔邮件正文的过早结束(预期:2263;收到:2233
我的挖掘表明存在缓冲问题。所以,我在URL中添加了参数disableStreamCache = true。它没有帮助。
我还用适当的Camel unmarshaller替换了JSON解析行:
<unmarshal ref="json"/>
仍然没有帮助。我得到了例外:Content-Length分隔邮件正文的过早结束。
有任何线索吗?
答案 0 :(得分:0)
在解析文件之前将远程HTTP服务器的响应写入文件,例如
<camel:to uri="file:data?fileName=download.htm" />
有关更多选项,请参阅http://camel.apache.org/file2.html。作为一个很好的副作用,这可以保护您的服务器ram资源。解析文件时,请使用Reader
而不是将整个内容转移到String
。除此之外,Camel还提供强大的JSON支持,请参阅http://camel.apache.org/json.html。