我在初始化 Web 服务 stub 时设置超时,我什至在调用之前使用 getTimeout() 记录它以确保它已设置,但无论设置的超时值如何,调用都会完成。这可能是一个错误还是我在这里遗漏了什么?
下面是我的代码:
proxy = new DCPControllerWSPortTypeProxy();
proxy.setEndpoint(endpoint);
((Stub)proxy.getDCPControllerWSPortType()).setTimeout(120000);
最佳答案
要解决此问题,您必须在项目中的任意位置添加以下类。当我遇到类似的问题时,我在实例化我的 stub 的同一个类中将其声明为私有(private)类。 (我目前正在使用 Axis 2)
private class CustomNetworkClient extends sun.net.NetworkClient
{
public CustomNetworkClient(int readTimeout)
{
defaultSoTimeout = readTimeout;
}
}
完成后,您可以在代码中添加以下行,这将设置超时。
CustomNetworkClient client = new CustomNetworkClient(SOAP_READ_TIMEOUT);
或者您可以简单地执行以下操作,因为您并不真正需要正在创建的对象:
new CustomNetworkClient(SOAP_READ_TIMEOUT)
这之前已被报告为错误,其中在使用 HTTPS 连接时未设置连接超时和读取超时:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4700777
以下链接帮助我找到了解决方法: http://www.noizeramp.com/article.php?article=se-networking_specifics_under_Java_Web_Start
我希望这能以某种方式帮助你 =)
关于java - 使用 axis1.4 不考虑超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7715339/