我使用
wsimport
和给定的 wsdl 创建了一个肥皂客户端。我还使用 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
我已尝试增加超时时间,但仍然无法连接。
还有人遇到类似问题吗?
问题是我在代理后面。我做了不同的测试,发现使用网络浏览器(或 SoapUI)我能够访问资源,但从命令行它不起作用。
经过大量搜索,这是一个简单的修复:要么将属性作为 jvm 参数传递,要么使用
System.setProperty("java.net.useSystemProxies", "true")
在代码中手动设置它。 JVM 本身没有使用代理。
编辑
正如我使用的
wsimport
我有一个 jax-ws 客户端。在实例化之前配置代理设置非常重要。
另一个编辑
如果您碰巧遇到问题,并且您正在使用应用程序服务器通过代理发出肥皂请求,则可能需要在
服务器的配置中指定
java.net.useSystemProxies=true
(或类似内容)——例如 catalina。如果使用 tomcat,则属性。
正如您提到的问题是代理问题,已在以下链接中得到解答。
如果您使用带有身份验证的代理,那么您已将身份验证器与代理一起设置。答案就在这里。
编辑:
您已设置在调用之前设置属性。 此外,我建议在获得响应后立即使用
System.clearProperty(key)
清除该属性,因为该属性已设置,直到 jvm 重新启动,因此可能会导致其他传出连接出现问题。