2015-07-10 55 views
2

我需要在服務器端禁用cxf webservice中的分塊,因爲有些客戶端需要「Content-Length」標頭作爲響應。現在,我可以看到服務器響應中的「傳輸編碼」被「分塊」,並且沒有發送「Content-Length」標頭。如何在服務器端禁用cxf webservice中的分塊?

我發現chunkins可以在Spring上下文被禁止這樣的:

<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"); 

我該怎麼辦呢?

+0

我通過'WebClient.getConfig(client).getHttpConduit()'通過CXF客戶端的API來做這件事,但是我用空閒的EndPoint或Service CXF實現類來完成。 +1的問題。 –

+0

不幸的是,我能夠找到客戶端的鏈接,但不能找到服務器端的鏈接 – 4ntoine

回答

0

其實,你不能輕易指定不允許從服務器端進行chuncking。 的確,這是一個客戶端!我的理解是,你有一個你的ws的客戶,他不能修改他的代碼來取消分塊?

您必須這樣做:編寫一個CXF攔截器,它將在消息中用輸出鏈開頭的某種緩衝區(ByteArrayOutputStream或CachedOutputStream)替換消息中的Servlet OutputStream,然後在鏈的末尾,使用它在響應上設置Content-Length標題並將該數據複製到實際輸出流中。實際上,內容長度會迫使框架不使用分塊。

我之前做過一次。我會盡力在明天發佈一個這樣的攔截器的代碼。

相關問題