JAXWS-RI 2.1を使用して、WSDLに基づいてWebサービスのインターフェースを作成しました。Webサービスと問題なく対話できますが、Webサービスにリクエストを送信するためのタイムアウトを指定できませんでした。何らかの理由でクライアントが応答しない場合、クライアントは永久に回転しているように見えます。
周りを探して、私はおそらく次のようなことをしようとする必要があることを明らかにしました:
((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.ws.request.timeout", 10000);
((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.ws.connect.timeout", 10000);
また、使用しているJAXWS-RIのバージョンによっては、代わりにこれらのプロパティを設定する必要がある場合があることも発見しました。
((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.internal.ws.request.timeout", 10000);
((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", 10000);
私が抱えている問題は、上記のどちらが正しいかに関係なく、どこでこれを実行できるのかわからないということです。私が持っているのは、Service
Webサービスへの自動生成されたインターフェイスを実装するサブクラスだけです。これがインスタンス化されている時点で、WSDLが応答しない場合、すでにプロパティを設定するには遅すぎます。
MyWebServiceSoap soap;
MyWebService service = new MyWebService("http://www.google.com");
soap = service.getMyWebServiceSoap();
soap.sendRequestToMyWebService();
誰かが私を正しい方向に向けることができますか?