0
我寫的JAX-WS(來自太陽)客戶端,其使期望服務器的響應需要用gzip壓縮服務電話:JAX-WS客戶端:UnsupportedMediaException爲gzip壓縮的響應
Map<String, List<String>> theHeaders = new HashMap<String, List<String>>();
theHeaders.put("Content-Encoding", Collections.singletonList("gzip"));
theHeaders.put("Accept", Collections.singletonList("application/x-gzip"));
theHeaders.put("Accept-Encoding", Collections.singletonList("gzip, deflate"));
theHeaders.put("Content-Type", Collections.singletonList("application/x-gzip"));
((BindingProvider) client).getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS, theHeaders);
按照提琴手,響應HTTP 200 (好)和肥皂響應是gzipped。 不過,我發現了以下錯誤:
com.sun.xml.ws.server.UnsupportedMediaException: Unsupported Content-Type: application/x-gzip Supported ones are: [application/soap+xml]
at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:322)
at com.sun.xml.ws.encoding.StreamSOAP12Codec.decode(StreamSOAP12Codec.java:107)
at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:156)
at com.sun.xml.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:312)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.createResponsePacket(HttpTransportPipe.java:295)
我read是JAX-WS應當支持開箱即用gzip壓縮web服務的反應,但看起來事實並非如此。儘管事實響應包含Content-Type:application/x-gzip頭,它會嘗試使用適用於application/soap + xml的默認編解碼器。
有沒有一種方法,使其使用其他的編解碼器,gzip的?有沒有這樣的編解碼器?
所以,公正,以確保我沒有得到一個錯誤:服務器方應該使用gzip內容編碼頭來響應_exactly_,而不是application/x-gzip使其在客戶端被視爲gzip? –
@MikhailBerastau application/gzip是一個內容類型的頭部值,gzip是應用程序編碼的頭部值。因此,對於所有的實現,服務器應該使用內容編碼gzip來響應這個工作。對於某些Web服務客戶端庫,可以使用* also * application/gzip內容類型 - 對於一些不是。我根據錯誤消息猜測,在這種情況下,它不是。 – eis
檢查JAXWS-RT的來源,它使比較是這樣的: 如果(!contentEncoding = NULL && contentEncoding.contains( 「gzip的」)){ 在新= GZIPInputStream(IN); } 所以任何提及內容編碼中的gzip都是可以接受的;內容類型 - 我認爲你是對的,它應該是應用程序/ soap + xml。 –