我是 Web 服务的新手,我需要编写简单的 spring-ws 客户端,它将通过 SSL 与服务器通信。情况是:
- 我的客户端在我的 Glassfish 上的 localhost ws 服务器上与 http 配合良好(问题是远程服务器和 https)
- 远程服务器正常工作。我将只使用它发送给我的数据
- 我有服务器的 https 地址
- 我有来自服务器提供商的客户端证书
我认为为此类任务找到一个简单的教程会很容易,但我很难找到类似的东西。这真的很不寻常还是我有问题?你知道一些很好的教程/书来创建这个吗?这可能是一些简单的快速步骤,我真的只需要连接到该服务器并从中获取数据。
我在用:
- STS 3.0.0.M3
- JDK 1.7
- 客户端作为 Java 应用程序(以后可能作为动态 Web 应用程序)
- 从服务器的 wsdl (JAXB) 生成的类
- 我按照本教程创建我的客户端http://justcompiled.blogspot.sk/2010/11/web-service-client-with-spring-ws.html
编辑:有关该主题的更多详细信息
我将客户端从我提到的教程更改为使用我在本地主机上创建的 Web 服务(无 SSL)。它运作良好,请求和响应是正确的。然后我将其更改为与远程服务器一起使用。我生成了新类并在 ApplicationContext 中设置了服务器的新地址。第一个错误是缺少公共日志库。我添加了它。然后出现了新错误(该错误的简短版本):
org.springframework.ws.client.WebServiceIOException: I/O error: java.security.cert.CertificateException: No name matching certificatename found; nested exception is javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching certificatename found
我使用 keytool 将我的证书添加到我的 jdk 中的 cacerts 中。它没有帮助。我发现了有关该错误的一些信息,并尝试在此处添加上一篇文章中的代码:
http://www.coderanch.com/t/557677/sockets/java/CertificateException-No-name-matching-hostname
它不应该很安全,但我试过了。新的错误是:
Exception in thread "main" org.springframework.ws.client.WebServiceTransportException: Internal Server Error [500]
at org.springframework.ws.client.core.WebServiceTemplate.handleError(WebServiceTemplate.java:663)
at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:587)
at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:537)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:384)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:378)
...