Fiddler检查传出SOAP请求的Java设置?

时间:2015-03-09 23:14:35

标签: java web-services tomcat soap fiddler

我正在尝试调试转发到第三方Web服务的SOAP请求。我的客户端代码(在我的本地机器上运行的代码)是使用wsimport生成的。我正在尝试配置Fiddler拦截我的传出SOAP请求,但没有运气。以下是我到目前为止所做的事情:

  1. WinINET LAN设置指向localhost(127.0.0.1:8888),Fiddler正在运行并捕获流量。由于我的Web服务使用HTTPS,因此Fiddler会对HTTPS请求进行解密。此时,我对第三方网址的请求根本没有出现。我收到一个堆栈跟踪错误,告诉我由于内部错误导致Web服务无法处理请求(这就是我调试请求的原因 - 因为它是第三方我无法访问Web服务日志)。

  2. 然后我将以下代码添加到调用Web服务的方法中:

    System.setProperty("http.proxyHost", "127.0.0.1");
    System.setProperty("https.proxyHost", "127.0.0.1");
    System.setProperty("http.proxyPort", "8888");
    System.setProperty("https.proxyPort", "8888");
    
  3. 当我执行包含此代码的代码时,我收到以下错误:

    org.apache.jasper.JasperException: javax.xml.ws.WebServiceException: Failed to access the WSDL at: <wsdl_url>. It failed with: 
    Got sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target while opening stream from <wsdl_url>.
    

    但是在Fiddler我得到了一个似乎没有完成的请求条目(对不起 - Fiddler的新手)。主持人被列为&#34;隧道到&#34;它是灰色的。在Fiddler日志中我收到此错误:

    !SecureClientPipeDirect failed: System.Security.Authentication.AuthenticationException A call to SSPI failed, see inner exception. < An unknown error occurred while processing the certificate on pipe to (CN=<wsdl_base_url>, O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.com).
    

    对我而言,似乎我的Fiddler和我的代理配置正确,但我在Java中遗漏了一些东西。我无能为力,但觉得我在这里错过了一个关键的一步,所以任何建议都会非常感激。谢谢!

    编辑:我是否需要使用wsimport生成新的Java代码并设置-httpproxy选项?

1 个答案:

答案 0 :(得分:1)

您需要将Fiddler的根证书添加到Java密钥库。 Java不使用系统的证书存储,因此Fiddler将自己放在那里的事实并没有为你解决问题。

点击工具&gt;中的Export Root Certificate获取Fiddler证书提琴手选项&gt; HTTPS。然后导入证书:http://azure.microsoft.com/en-us/documentation/articles/java-add-certificate-ca-store/#to-add-a-certificate-to-the-cacerts-store