使用Camel HTTP截断响应

时间:2014-02-07 06:23:47

标签: java spring apache-camel

我有一个调用远程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分隔邮件正文的过早结束。

有任何线索吗?

1 个答案:

答案 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