メトロ2.0とJ2SE5を使用しています。私が書いたアプリケーションは、コンパイル時に外部WebServiceについて知りませんでした。ビジネスロジックXMLファイルに基づいて実行時にそれらを見つけます。したがって、私はWSDL要求を実行します。JAXWS - WSDLリクエストのタイムアウトを設定するのに必要なヘルプ
次のように私が書かれているサンプルコードは次のとおりです。
String wsdlServiceName = ...; String wsdlURL = ...; Document payload = ...;
final String nsURI = ...;
final QName serviceName = new QName(nsURI, wsdlServiceName + "Service");
final QName servicePort = new QName(nsURI, wsdlServiceName + "Port");
// Create service and the dispatcher for the SOAP message
Service service = Service.create(new URL(wsdlURL), serviceName);
dispatch = service.createDispatch(servicePort, SOAPMessage.class, Service.Mode.MESSAGE);
// Set timeouts
dispatch.getRequestContext().put("com.sun.xml.internal.ws.request.timeout", 3000);
dispatch.getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", 3000);
// Create the outgoing SOAP request
SOAPBinding soapBinding = (SOAPBinding) dispatch.getBinding();
request = soapBinding.getMessageFactory().createMessage();
SOAPBody requestBody = request.getSOAPBody();
requestBody.addDocument(payload);
// Invoke web service operation
SOAPMessage response = dispatch.invoke(request);
Webサービスは、(dispatcher.invoke(リクエスト))が呼び出されたときにタイムアウトが正しく動作
WSDLがあるもつともタイムアウトが設定される前に要求され、Webサービスが応答しない場合は、接続がタイムアウトするまでに90秒かかります。
WSDLが要求される前にタイムアウトを設定することはできますか?タイムアウトを設定するにはディスパッチャが必要ですが、WSDLを要求するサービスが作成された後に完了しますか? (すなわち。Service.create())
こんにちは。あなたのコメントをありがとう、私はそれを試してみましょう。 WSDLが要求される前にws-timeoutsを設定するために自分のプログラムを変更できるかどうか分かりませんか?私はこれが可能であるべきだと思ったでしょうか? – Alex
@Alex:WSDLは 'Service.create(new URL(wsdlURL)、serviceName);'でアクセスされていると思います。タイムアウトの設定はディスパッチャ上にあるので、以前はどのように設定できるかわかりません。しかし、jax-wsはサーバーとの通信のためのカバーの下でHttpUrlConnectionを使用するので、システムのプロパティは役立ちます。 IMHOあなたはリモートフェッチを避けるためにキャッシュされたwsdlを保つべきですが、これらの種類の問題も避けてください。 – Cratylus
@Alex:これを確認してくださいhttp://mail-archives.apache.org/mod_mbox/cxf-users/200902.mbox/%[email protected]%3E – Cratylus