SOAP Web服务需要在java中使用https协议发送请求

时间:2016-03-14 10:00:44

标签: java web-services soap https

我需要使用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)

2 个答案:

答案 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密钥库中添加信任密钥。以下网站显示了这样做的方法。

http://java.globinch.com/enterprise-java/security/pkix-path-building-failed-validation-sun-security-validatorexception/

答案 1 :(得分:0)

我知道这是一个相当古老的问题,但也许答案永远不会糟糕。

通常,当JVM cacerts文件不包含签署了服务器SSL证书的根CA证书时,就会发生这种情况。但是要小心运行哪个JVM,以便编辑cacerts文件。您可以在$JAVA_HOME/jre/lib/security/

下找到cacerts文件

如果您使用的是glassfish 3,则应编辑特定域配置目录下的cacerts.jks文件,而不要编辑公共JVM运行时文件夹中的文件。

您可能已在SOAP UI中关闭了SSL证书检查。