【发布时间】:2016-01-02 03:40:52
【问题描述】:
我正在使用 CXF 库编写一个 SOAP 客户端,这里我的要求是将 SOAP 请求转移到另一个充当我代理的 Web 服务。我使用以下代码在我的 SOAP 客户端中设置代理
WebService ss = new WebService();
WebServiceSoap port=ss.WebServiceSoap();
Client client = ClientProxy.getClient(port);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setProxyServer(System.getProperty("http.proxyHost","proxyserver.com"));
httpClientPolicy.setProxyServerPort(Integer.valueOf(System.getProperty("http.proxyPort","8080")).intValue());
httpClientPolicy.setConnectionTimeout(36000);
http.setClient(httpClientPolicy);
byte[] fileContent={'b','b'};
String res=port.submiFile(fileContent");
但是这段代码抛出了错误
"java.io.IOException: 无法通过代理隧道。代理返回 “不允许使用 HTTP/1.1 405 方法”。
根据我的调查,出现此错误是因为 CXF 库使用“CONNECT”
http 方法来隧道 SOAP 请求但是这个 CONNECT 方法
代理服务器(proxyserver.com)无法实现。现在代理
服务器团队说我们只能提供“GET”和“POST”HTTP 方法。
这意味着我必须手动创建 SOAP 请求并使用 POST 或 GET 方法发送。但这是我们希望避免手动创建 SOAP 请求的方式。
所以我的问题是有什么办法可以摆脱这个或者我可以覆盖
“连接”方法?任何答案链接都会有所帮助。有关更多详细信息,请参阅附件。
【问题讨论】:
标签: java soap cxf soap-client x-http-method-override