当使用java的Web服务方法时,sun.security.validator.ValidatorException

时间:2016-05-26 16:10:30

标签: java web-services ssl soap wsdl

我想通过java使用这个wsdl的soap web服务:

  

https://sadad.shaparak.ir/services/MerchantUtility.asmx?wsdl

但是当我运行一些方法时会发生这个错误:

  

无法在https://sadad.shaparak.ir/services/MerchantUtility.asmx?wsdl访问WSDL。它失败了:sun.security.validator.ValidatorException:   PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径。

我使用以下代码执行此操作:

MerchantUtilitySoap port;
MerchantUtility service = new MerchantUtility();
port = service.getMerchantUtilitySoap();

例如,从此Web服务使用此方法:

long timeStamp = Long.parseLong(port.calcTimeStamp());

谁能解决这个问题?我应该怎么做才能为我的网站修复它?

我也阅读了这些解决方案,但他们无法帮助我解决这个问题:

javax.xml.ws.WebServiceException: Failed to access the WSDL

Resolving javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed Error?

"PKIX path building failed" and "unable to find valid certification path to requested target"

http://www.java-samples.com/showtutorial.php?tutorialid=210

1 个答案:

答案 0 :(得分:0)

这是我修复ValidatorException所做的。 首先从浏览器获取网站的证书(.cer文件)(因为它使用的是HTTPS)。 现在,如果你在Windows上,打开CMD并转到jre / bin文件夹并运行以下命令:

keytool -importcert -file path/to/certificate.cer -keystore keystore.jks -alias "Alias"

-file:从浏览器

获取的.cer文件的路径

-alias:此证书的名称

此命令将证书导入keystore.jks文件 运行后,它会要求输入密码。为keystore.jks设置密码。 现在,在你的java代码中添加这些行

System.setProperty("javax.net.ssl.trustStore","path/to/keystore.jks");
System.setProperty("javax.net.ssl.trustStorePassword","keystore_pass");

您也可以将keystore.jks从jre / bin文件夹复制到项目文件夹并从那里使用它 我认为有更好的方法,但这是我从其他stackoverflow主题中学到的并解决了我的问题。