2011-08-17 164 views
3

我需要通过HTTPS使用javax.xml.soap为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和存根上进口org.apache.axis.client.Stub;

有可能是我在那里失踪的东西。

回答

0

假设您已经在后台线程中执行.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()的行为。

+0

我怎样才能得到答案?像以前一样,我在做SOAPMessage response = connection.call(sm,server);我需要检查错误的响应 – user393381

+0

使用connection.getInputStream()。这应该给你答复的主体。要获取标题,有几个方法:getHeaderField(),getHeaderFieldKey()。检查HttpURLConnection文档以获取更多详细信息。 – George