我创建了一个带有wsimport
和给定wsdl的soap客户端。我还使用SoapUI来测试服务。使用SoapUI我没有问题但是在使用我的Java客户端时我得到了
java.net.ConnectException: Connection timed out: connect
requestContext
中的默认值如下
com.sun.xml.internal.ws.connect.timeout=100000
javax.xml.ws.service.endpoint.address=[fully qualified domain name endpoint]
com.sun.xml.internal.ws.request.timeout=100000
javax.xml.ws.soap.http.soapaction.use=null
com.sun.xml.internal.ws.client.ContentNegotiation=none
javax.xml.ws.soap.http.soapaction.uri=null
我已尝试增加超时但仍无法连接。
还有其他人有过类似的问题吗?
答案 0 :(得分:0)
问题是我是代理人的幕后黑手。我做了不同的测试,发现使用Web浏览器(或SoapUI)我能够访问资源,但是从命令行无法访问。
经过多次搜索,这是一个简单的修复:要么将属性作为jvm参数传递,要么使用System.setProperty("java.net.useSystemProxies", "true")
在代码中手动设置它。 JVM本身没有使用代理。
修改
当我使用wsimport
时,我有一个jax-ws客户端。在实例化之前配置代理设置非常重要。
另一个编辑
如果您遇到问题并且您正在使用应用程序服务器通过代理发出soap请求,则可能必须在服务器的配置中指定java.net.useSystemProxies=true
(或类似) / strong> - 例如catalina.properties如果使用tomcat。
答案 1 :(得分:0)
正如您所提到的,问题是代理问题,已在以下链接中得到解答。
How to use an HTTP proxy in java
Proxy settings in a java program
如果您使用代理进行身份验证,那么您已将身份验证器与代理一起设置。这在这里得到解答。
Authenticated HTTP proxy with Java
修改强>
正如William Burnham正确提到的那样,您已经设置了在调用它们之前设置属性。 更重要的是,我建议你在使用System.clearProperty(key)获取响应后立即清除属性,因为为jvm的完整实例设置了属性,直到它重新启动,因此可能导致其他传出连接出现问题。