SOAP通过Java中的SOCKS代理进行调用

时间:2014-10-20 16:28:34

标签: java soap proxy socks

我的情况是我通过REST服务与供应商沟通。在我们的组织内,有很多防火墙,做这种事情需要使用特定的SOCKS代理配置。 请注意,它必须是此SOCKS代理; HTTP代理不适用于我们的环境 完成代理配置后,使用以下代码可以相对轻松地处理通过代理的连接:

URL url = new URL("https://url.for.the.web.service.com");
Proxy proxy = new Proxy(Proxy.Type.SOCKS,new InetSocketAddress("our.socks.proxy.server.com",1080));
HttpsURLConnection con = (HttpsURLConnection)url.openConnection(proxy);

我已收到额外要求,要求为供应商附加一些其他网络服务。不幸的是,这些是供应商的旧处理,并以SOAP服务完成 虽然我老了,头发花白了,但这是我第一次在客户端SOAP跑步。使用我从你的网站获得的帮助(感谢网站btw;我一直用它来参考,包括通过REST实现和去年春天的第一轮SOCKS),我能够得到我的通过Eclipse生成的SOAP代理类。但是当我尝试运行生成的代码来访问服务时,我直接进入防火墙,因为它没有在生成的代码中指定。

我一直在浏览它,我认为我已经确定了我需要更改的生成类,即从Axis客户端类Service扩展的WSDLName_Locator类。虽然我可以在生成的代码中找到WSDL位置的URL对象,但是没有相应的连接可以连接到我的SOCKS代理。处理进入Axis处理的内部,我不知道是什么。也可以是BasicHttpBinding_IWSDLNameStub

我一直在谷歌搜索并查看Javadoc中生成的代码中使用的每个类,查找对代理的任何引用,我现在空了。但是这很复杂,因为在SOAP术语中生成的代码本身被称为代理,所以我在我尝试的任何搜索中得到大量的误报,并且还因为所有最近的在线信息似乎都是与Android应用程序开发有关,我没有这样做。 AxisEngine和AxisEngineConfiguration类看起来很有希望,但我还没有找到一种方法来连接代理。

我的需要就是这样:在生成的SOAP代码中我可以在哪里以及如何对代理执行等效的附件,以便将这种链接带入Axis处理?我希望以前有人这样做过。

我没有包含任何生成的代码,因为我需要将其混淆,无论如何都要运行,因为它涵盖了许多服务,所以它很庞大,我的假设是生成的输出类似于一个WSDL一代又一代。但我会提供所需的任何其他细节。

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

我再次尝试谷歌搜索,看看我的问题是否会出现在结果中......是的,就在顶部。但也返回了这个问题的链接:

Call SOAP web-service using Windows proxy settings in Java

在该答案中,显示了将代理值设置为系统属性的技术,但问题与使用另一个类,ProxySelector有关,我怀疑这是为什么我的搜索结果为空。我没有尝试过这种技术,因为去年春天我在做REST部分时没有设置SOCKS代理。

所以简单地指定:

    System.setProperty("socksProxyHost","our.socks.proxy.server.com");
    System.setProperty("socksProxyPort","1080");
在调用Web服务调用之前,只需要

所以我回答了自己的问题......我得到了积分,对吗?