1

私は CXF を使用して WebService を消費していますが、応答が非常に大きいため、gzip の「Accept-Encoding」で要求し、GZIPInInterceptor を使用して gzip された応答を処理しています。また、私の WSDL は非常に大きく (360kb)、WSDL を読み取って解析する必要があるため、スタブの作成に長い時間 (+10 秒) かかります。そのため、スタブを一度作成して再利用しています。

問題は、2 つの異なるメソッドを使用しようとするたびに、2 番目のリクエストで前のリクエストが必要であるというエラーが表示されることです。

私の問題を説明するために、このパブリック WebService を使用して簡単な例を作成しました。

http://www.webservicex.net/BibleWebservice.asmx?WSDL

GZip 圧縮がなければ正常に動作します。

BibleWebserviceSoap bibleService = new BibleWebservice().getBibleWebserviceSoap();

String title = bibleService.getBookTitles();
response.getWriter().write(title);
String johnResponse = bibleService.getBibleWordsbyKeyWord("John");
response.getWriter().write(johnResponse);

両方の応答を受け取ることができます。Gzip 圧縮を有効にします。

BibleWebserviceSoap bibleService = new BibleWebservice().getBibleWebserviceSoap();

//GZIP compression on bibleService
Client client = ClientProxy.getClient(bibleService);

client.getInInterceptors().add(new GZIPInInterceptor());
client.getInFaultInterceptors().add(new GZIPInInterceptor());

// Creating HTTP headers
Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("Accept-Encoding", Arrays.asList("gzip"));

// Add HTTP headers to the web service request
client.getRequestContext().put(Message.PROTOCOL_HEADERS, headers);

String title = bibleService.getBookTitles();
response.getWriter().write(title);

String johnResponse = bibleService.getBibleWordsbyKeyWord("John");
response.getWriter().write(johnResponse);

2 番目の応答を受信しようとすると、次の例外が発生します。 org.apache.cxf.interceptor.Fault: Unexpected wrapper element {http://www.webserviceX.NET}GetBookTitlesResponse found. Expected {http://www.webserviceX.NET}GetBibleWordsbyKeyWordResponse.

私の実際のアプリケーションでは、リクエストで例外が発生します。 org.apache.cxf.binding.soap.SoapFault: OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name 'GetAvailabilityRequest' and namespace 'http://schemas.navitaire.com/WebServices/ServiceContracts/BookingService'. Found node type 'Element' with name 'ns4:PriceItineraryRequest' and namespace 'http://schemas.navitaire.com/WebServices/ServiceContracts/BookingService'

私のサンプル プロジェクトはここからダウンロードできます: http://www.sendspace.com/file/plt0m4

ありがとうございました

4

1 に答える 1