17

javax.xml.soapAPI ( javax.xml.soap.SOAPConnectionFactory、 、および友人) を使用javax.xml.soap.SOAPConnectionして、リモート サーバーへの Web サービス呼び出しを行っていますが、ほとんどの場合、成功しています。

ただし、問題が発生して、プログラムが永久に読み込めなくなることがあります。

これに対処するために、読み取りタイムアウトを追加したいと思います。

これを達成する可能性のあるいくつかの方法を見つけましたが、それらはすべてかなり悪いようでした.

コミュニティへの私の質問は次のとおりです: javax.xml.soap API を使用して呼び出しを行うときに、読み取りタイムアウト動作を実装する最良の方法は何ですか?

4

3 に答える 3

37

接続タイムアウトや読み取りタイムアウトなどのURLConnectionパラメータを設定できるように、独自のURLStreamHandlerを作成する必要があります。

SOAPConnection connection = SOAPConnectionFactory.newInstance().createConnection();
URL endpoint =
  new URL(new URL("http://yourserver.yourdomain.com/"),
          "/path/to/webservice",
          new URLStreamHandler() {
            @Override
            protected URLConnection openConnection(URL url) throws IOException {
              URL target = new URL(url.toString());
              URLConnection connection = target.openConnection();
              // Connection settings
              connection.setConnectTimeout(10000); // 10 sec
              connection.setReadTimeout(60000); // 1 min
              return(connection);
            }
          });

SOAPMessage result = connection.call(soapMessage, endpoint);

わかりやすくするために、いくつかのtry/catchを削除しました。

于 2012-03-13T16:22:42.683 に答える
3
import com.sun.xml.internal.ws.client.BindingProviderProperties

public someResponse callWebService() {

    MyPort port = new Service().getPort();

    Map<String, Object> requestContext = ((BindingProvider) port).getRequestContext();

    requestContext.put(BindingProviderProperties.CONNECT_TIMEOUT, 10 * 1000); //10 secs

    requestContext.put(BindingProviderProperties.REQUEST_TIMEOUT, 1 * 60 * 1000); //1 min

    return port.someWebMethod();

}
于 2012-03-02T16:34:33.550 に答える