使用javax.xml.soap.SOAPConnection设置套接字读取超时

Sam*_*ard 14 java saaj

我正在使用javax.xml.soapAPI(javax.xml.soap.SOAPConnectionFactory,javax.xml.soap.SOAPConnection和朋友)对远程服务器进行Web服务调用,大部分都取得了巨大的成功.

但是,有时会出现问题,程序会永远陷入困境.

为了解决这个问题,我想添加一个读取超时.

我找到了几种可能实现这一目标的方法,但它们看起来都非常糟糕.

所以我对社区的问题是:在使用javax.xml.soap API进行调用时,实现读取超时行为的最佳方法是什么?

Yve*_*tin 33

您必须创建自己的URLStreamHandler,以便可以设置URLConnection参数,如连接超时和读取超时.

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);
Run Code Online (Sandbox Code Playgroud)

为清楚起见,我删除了一些try/catch.

  • 我很确定这不再起作用了。两个超时都被调用方法中的“HttpSOAPConnection”(版本 1.5.2)覆盖。 (2认同)