如何在服务器端的cxf webservice中禁用分块?

时间:2015-07-10 10:28:40

标签: web-services cxf

我需要在服务器端禁用cxf webservice中的分块,因为有些客户端需要“Content-Length”标头作为响应。现在我可以在服务器响应中看到'Transfer-Encoding'被'chunked'并且没有'Content-Length'标题被发送。

我发现可以在spring的上下文中禁用chunkins,如下所示:

<http-conf:conduit name="*.http-conduit">
    <http-conf:client ReceiveTimeout=“300000“ AllowChunking="false"/>
</http-conf:conduit>

因为我以编程方式创建服务:

// media service
Object mediaService = new MediaService();
System.out.println("Starting media service #1 ...");
EndpointImpl mediaEP = (EndpointImpl)Endpoint.create(mediaService);
mediaEP.publish("http://localhost:8081/onvif/media_service");

我该怎么做?

1 个答案:

答案 0 :(得分:1)

实际上,您不能轻易指定不允许从服务器端进行chuncking。 的确,这是客户pb!我的理解是你有一个你的ws的客户谁不能修改他的代码来停用分块?

你必须这样做:编写一个CXF拦截器,它将在输出链的开头用一些缓冲区(ByteArrayOutputStream或CachedOutputStream)替换消息中的servlet OutputStream,然后在链的末尾,使用在响应上设置Content-Length标头并将该数据复制到实际输出流。 实际上,内容长度将迫使框架不使用分块。

我曾经做过一次。我会试着明天发布一个这样的拦截器代码。