WSDLException ...尝试解析架构时发生错误...连接超时:连接

WSDLException ... An error occurred trying to resolve schema ... Connection timed out: connect

首先,我的错误与这个问题中报告的几乎相同:WSDLException : An error occurred trying to resolve schema referenced at

这是我的堆栈转储的片段:

javax.wsdl.WSDLException: WSDLException (at /definitions/types/xs:schema/xs:schema): faultCode=OTHER_ERROR: An error occurred trying to resolve schema referenced at 'http://www.w3.org/2005/05/xmlmime', relative to 'http://server.subdom.domain.com:13080/SM/7/Common.xsd'.: java.net.ConnectException: Connection timed out: connect] MDC{}
2015-05-24 14:36:33,751 ERROR (c.d.g.w.c.ContexteApplicatif.contextInitialized) [main] catching MDC{}
javax.xml.rpc.ServiceException: Error processing WSDL document: 
javax.wsdl.WSDLException: WSDLException (at /definitions/types/xs:schema/xs:schema): faultCode=OTHER_ERROR: An error occurred trying to resolve schema referenced at 'http://www.w3.org/2005/05/xmlmime', relative to 'http://server.subdom.domain.com:13080/SM/7/Common.xsd'.: java.net.ConnectException: Connection timed out: connect
      at org.apache.axis.client.Service.initService(Service.java:250) ~[axis-1.4.jar:?]

这发生在我的嵌入式 Tomcat 服务器 运行 中,来自 Eclipse。它在 Windows 机器上 运行 并且在系统级别有一个 httpProxy。但是,URL 是不需要代理的内部地址。无论如何,我在引用 WSDL 文件之前使用以下代码以编程方式实现了代理:

System.setProperty("http.proxySet", "true");
System.setProperty("http.proxyHost", "proxyhost.subdom.domain.com");
System.setProperty("http.proxyPort", "8080");
System.setProperty("https.proxyHost", "proxyhost.subdom.domain.com");
System.setProperty("https.proxyPort", "8080");

现在我收到 HTTP 502 错误,表示网关错误。所以,我认为这个解决方案是错误的,因为我首先不需要代理。如果我启用或禁用代理设置,我可以从浏览器中访问该页面,但模糊不清。此外,还有一个配置代理的脚本,如果我使用上面显示的代理主机并在我的浏览器中对其进行硬编码而不是 "system proxy" 或 "automatic setting",我将无法访问该页面。

总而言之,它的行为就像需要代理设置一样,但实际上不需要。问题出在其他地方,我不知道如何才能在调试这个问题上取得重大进展。

有什么提示吗?有 Tomcat 的东西? Eclipse 有问题吗?

我还没有在独立 Tomcat 服务器上尝试过,因为我的代码还没有准备好部署。

注意: 顺便说一句,我尝试了引用的 post 中的命令,但我也遇到了同样的错误。在没有为代理定义系统属性的情况下连接超时,否则会出现 502 代码。同时,如果我从 Eclipse 启动 Web 服务资源管理器,我完全能够访问 Web 服务并调用操作。

进一步调查:我决定使用 WireShark 查看请求的情况,似乎两个 HTTP 请求(wsdl 和通用类型定义)都已完成,但没有一个小故障,根本没有连接超时,没有一个错误。我可以在 WireShark 中看到 XML,并且 HTTP 状态为 200 OK,在此级别一切正常。

那么,这是怎么回事?我在 Linux 服务器上遇到了同样的问题,但消息有点不同。 wsdl2java 正在做什么以相信存在问题并中止?

在使用 Axis2 和 CXF 进行进一步调查和测试后,我终于找到了问题所在,这要归功于提供了更多详细信息的 wsdl2java 脚本的 CXF 版本。

首先,最初提出的解决方案几乎是正确的。我实际上需要添加所有代理信息,但是我还需要指定非代理主机,否则我会收到 502 错误。来自 Axis 脚本的消息关于违规请求不是很详细,而 CXF 的版本非常清楚,使我最终能够解决我的问题。

所以,另外,如果你修改了wsdl2java脚本,除了其他选项之外,添加-Dhttp.nonProxyHosts=...。如果您需要以编程方式指定代理,则同样如此。