我需要在HTTPS上使用javax.xml.soap为SOAP调用设置超时然而,我不知道如何做到这一点,一定有一个技巧做到这一点,但我找不到它。
SOAPMessage sm = null;
SOAPMessage response = null;
SOAPConnectionFactory sfc = SOAPConnectionFactory.newInstance();
SOAPConnection connection = sfc.createConnection();
MessageFactory mf = MessageFactory.newInstance();
sm = mf.createMessage();
...
...
URL url = new URL("https://server:XXXX/blablabla);
response = connection.call(sm, url);
我看见有人在做:
if (xxxSoapService instanceof Stub)
((Stub) xxxSoapService).setTimeout(10000);
xxxSoapService扩展java.rmi.Remote和Stub是来自import org.apache.axis.client.Stub;
假设您已经在后台线程中执行了。call()。你可以在另一个线程上触发计时器,并杀死正在加载的线程。
或者,因为SOAPMessage有你所有的数据,你可以只使用HttpUrlConnection来发送消息。
HttpUrlConnection connection = // initialize me!
connection.setReadTimeout(TIMEOUT_VALUE);
SOAPMessage sm = // initialize me!
// more stuff for your message
connection.connect();
sm.writeTo(connection.getOutputStream());
这应该可以工作,除非我对writeTo()的行为有误解。