0

サーバーの応答が gzip されることを期待するサービス呼び出しを行う JAX-WS (Sun 製) クライアントを作成しました。

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

Fiddler によると、応答は HTTP 200 (Ok) で、soap 応答は gzip されています。それでも、次のエラーが発生します。

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)

JAX-WS はそのままで gzip 圧縮された Web サービス応答をサポートする必要があると読みましたが、そうではないようです。応答に Content-Type: application/x-gzip ヘッダーが含まれているにもかかわらず、application/soap+xml 用のデフォルト コーデックを使用しようとします。

gzip 用に別のコーデックを使用する方法はありますか? そのようなコーデックはありますか?

4

1 に答える 1

0

あなたが参照したリンクは、応答がで送信されたときにgzipをサポートしていることを示しています

Content-encoding: gzip

標準のコンテンツタイプヘッダーに加えて、ヘッダー。サーバーが。で応答する場合Content-Type: application/x-gzip、それは別のヘッダーであり、gzip自体がサポートされていても、サポートされていないようです。私はあなたがこれを設定するべきではないと思います:

theHeaders.put("Accept", Collections.singletonList("application/x-gzip"));

代わりに、gzipを含むaccept-encodingを設定するだけです。

theHeaders.put("Accept", Collections.singletonList("application/soap+xml"));
theHeaders.put("Content-Type", Collections.singletonList("application/soap+xml"));
theHeaders.put("Accept-Encoding", Collections.singletonList("gzip"));
theHeaders.put("Content-Encoding", Collections.singletonList("gzip"));
于 2013-01-18T16:13:23.423 に答える