我需要使用https协议向我的网络服务发送请求。 使用SOAP UI,它工作正常,并为https请求提供响应,但是如果我发送https请求,它提供以下异常 javax.xml.ws.WebServiceException:无法在https://abc:8443/xyz/FileTransferService?wsdl访问WSDL。失败了:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.
at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(RuntimeWSDLParser.java:184)
at ##com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:166)
at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:131)
at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:267)
at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:230)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1497)
答案 0 :(得分:0)
如果你想使用https,你只需先下载wsdl,然后让你生成的客户端类中的wsdlLocation和url指向该文件。
或像这样生成您的客户
URL url = new URL("https://......?wsdl");
QName qname = new QName("NameSpace of the Service", "ServiceName");
Service service = Service.create(url, qname);
ServiceClass port= service.getPort(ServiceClass.class);
然后你可以开始使用该端口。
您可以在网站上找到后一个例子。
http://www.mkyong.com/webservices/jax-ws/deploy-jax-ws-web-services-on-tomcat-ssl-connection/
哦,我忘了一件事。您必须在Java密钥库中添加信任密钥。以下网站显示了这样做的方法。
答案 1 :(得分:0)
我知道这是一个相当古老的问题,但也许答案永远不会糟糕。
通常,当JVM cacerts文件不包含签署了服务器SSL证书的根CA证书时,就会发生这种情况。但是要小心运行哪个JVM,以便编辑cacerts文件。您可以在$JAVA_HOME/jre/lib/security/
如果您使用的是glassfish 3,则应编辑特定域配置目录下的cacerts.jks
文件,而不要编辑公共JVM运行时文件夹中的文件。
您可能已在SOAP UI中关闭了SSL证书检查。