com.sun.httpserver.HttpServerおよびjavax.xml.ws.Endpointを使用して、既存のWSDL上でwsimportを実行し、genereatedサービスインターフェイスを実装することによって生成されたJAX-WS Webサービスを公開しています。これらはすべてJDK 1.6(JAX-WS RI 2.1.6)の一部です。追加のWebコンテナなしでJavaプログラムとして実行している私のWebサービスは、Apache Axisを使用して実装されたTomcatで実行されている既存のSOAPサービスをシミュレートすることになっています。既存のクライアントもApache Axisを使用して実装されています。JAX-WS Webサービスでは、各Soapコールが返された後にソケットを強制的に閉じる方法を教えてください。
私が抱えている問題は、クライアントからJAX-WSサービスへのSoap操作の呼び出しがしばらくの間ハングしてから、クライアントの側でソケットタイムアウトで終了することです。これは、JAX-WSサービスがすぐにSOAP応答を返すにもかかわらず発生します。
tcpdumpとwiresharkでパケットを調べると、既存のAxis Webサービスでは、SOAP応答がサーバーからクライアントに送信された後、サーバーはクライアントが応答する「FIN ACK」パケットを送信することに気付きました「FIN ACK」を含む。これにより、SOAP操作に関連するすべてのパケットが終了します。一方、JAX-WSサービスを使用して実行している場合、SOAP応答がクライアントに送信された後、サーバーは「FIN ACK」を送信しません。クライアントはソケット入力ストリームを読み続けるようです。
これは、SOAP呼び出しに対する応答が送信された後でも、JAX-WS Webサービススタックがソケットを開いたままにしていると考えています。そして、クライアントがSOAP操作の終わりにソケットを閉じることを期待しているようです。残念ながら、クライアントの動作を変更することはできません。
JAX-WSサービスを公開して各SOAP操作後に常にソケットを閉じるために使用するエンドポイントまたはHttpServerインスタンスを設定する方法はありますか?
システムプロパティhttp.keepAliveをfalseに設定しようとしましたが、これは何の違いもありませんでした。
ご協力いただきありがとうございます。
'http.keepAlive'は' JAX-WS'がクライアント側のフードで使用する 'httpurlconnection'の設定のため動作しません – Cratylus