【发布时间】:2014-02-26 17:46:27
【问题描述】:
我们有一个 Java 客户端(不是 Web 应用程序,只是一个用 Java 编写的简单批处理) 它必须通过 https 连接到 Web 服务。 Web 服务位于 Apache Tomcat 服务器 (7.0) 但我没有直接链接到它,因为有一个 IIS 反向代理 它通过 https 公开服务,因此证书位于 IIS 层 不在Tomcat中。 我注意到 WSDL 中有一些奇怪的地方,即服务部分仍然有这样的地址
<soap:address location="http://myApp.it:80/Questionario/CallQuestionario"/>
因为它也是类型部分:
<xsd:schema>
<xsd:import namespace="http://www.test.it" schemaLocation="http://myApp:80/Questionario/CallQuestionario?xsd=1"/>
</xsd:schema>
我仍然看到指向 http 而不是 https 的位置和 schemaLocation! 事实上,我在尝试连接到 Web 服务时遇到错误: com.sun.xml.internal.ws.client.ClientTransportException:HTTP 传输错误:java.net.ConnectException:连接被拒绝:连接
您认为在 IIS 层中需要做一些工作来解决这个问题吗? 即使我尝试使用 Soap-UI 进行连接,我也会遇到此错误: java.lang.Exception: 加载 url 失败; https://myApp.it:80/Questionario/CallQuestionario?wsdl, 0 - 看起来对 Web Service 的分析失败了。
PS: 相反,如果我使用 keytool 实用程序为 Tomcat 创建证书并配置 Tomcat 编辑 server.xml 文件,我会注意到, 在不更改服务代码的情况下,该部分会在服务和类型部分中使用 https 中的 url 值自动更新。 在这种情况下(在 https 中部署在 Tomcat 上的 Web 服务),在使用以下代码行在客户端中导入证书后
System.setProperty("javax.net.ssl.trustStore", "[PATH_TO_THE_CERTIFICATE]");
System.setProperty("javax.net.ssl.trustStorePassword", "[PWD]");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
一切都按预期进行。
【问题讨论】:
标签: java web-services tomcat soap wsdl