java - 使用 SSL 代理 Http [Java] 调用 SOAP 网络服务

标签 java ssl soap two-way

我调用 SOAP 网络服务进行双向 SSL 身份验证,通过代理。调用 soap-webservice 时出现以下错误。

com.sun.xml.ws.client.ClientTransportException: HTTP transport error: java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 403 Forbidden"
at com.sun.xml.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:131)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:212)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:136)
at com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:110)

我正在为 BindingProvider 设置以下属性

bp.getRequestContext().put("com.sun.xml.ws.developer.JAXWSProperties.SSL_SOCKET_FACTORY", socketFactory);
bp.getRequestContext().put("com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory", socketFactory);
 bp.getRequestContext().put("com.sun.xml.ws.transport.https.client.SSLSocketFactory", socketFactory);
bp.getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY, socketFactory);  

bp.getRequestContext().put("proxySet","true");
bp.getRequestContext().put("http.proxyHost","host.com");
bp.getRequestContext().put("http.proxyPort","8080");
bp.getRequestContext().put("http.proxyUser","****");
bp.getRequestContext().put("http.proxyPassword","****");
bp.getRequestContext().put("https.proxyHost","host.com");
bp.getRequestContext().put("https.proxyPort","8080");
bp.getRequestContext().put("https.proxyUser","****");    
bp.getRequestContext().put("https.proxyPassword","****");

谢谢!

最佳答案

首先尝试验证SSL证书是否安装正确。 然后尝试添加此 VM Args:

-Djavax.net.ssl.trustStore=locationOfYourTrustedStore.jks
-Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true
-Dcom.sun.xml.ws.transport.http.HttpAdapter.dump=true
-Dcom.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump=true
-Dcom.sun.xml.internal.ws.transport.http.HttpAdapter.dump=true

同时在您的实现代码中添加这一行:

 System.setProperty("java.net.useSystemProxies", "true");

强制 Java 在调用 Web 服务时使用系统代理。

关于java - 使用 SSL 代理 Http [Java] 调用 SOAP 网络服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52965317/

相关文章:

java - Kafka主题以及本地数据库的Kafka偏移量管理

java - Unresolved 类 '@string/appbar_scrolling_view_behavior'

java - 使用 grails 的 Apache CXF 客户端插件进行双向(相互)SSL 身份验证

linux - 带有 Linux CURL 的 SOAP MTOM 附件

php - SOAP 错误 : Parsing WSDL: Couldn't load from 'xxx/?wsdl' : Premature end of data in tag html line 1

java - android-onOptionsItemSelected 方法调用了两次

java - Vaadin Spring Boot 应用程序中的 Node.js 错误

node.js - 如何在 Nodejs 中创建 SSL SOAP 客户端

java - 我需要知道如何实现 TSL (https)?

c# - SOAP 扩展实现