Axis 1.4传递自定义SecureSocketFactory

时间:2015-01-20 19:20:17

标签: java ssl axis keystore sslsocketfactory

我有一个应用程序,出于某些环境相关的原因,我需要传递自己的securesocketfactory。我经历了Axis 1.4 documentation。基于此,我尝试以多种方式设置我的价值。全部列在下面。

System.setProperty("org.apache.axis.components.net.SocketFactory", CustomSocketFactory.class.toString());
System.setProperty("org.apache.axis.components.net.SecureSocketFactory",CustomSocketFactory.class.toString());
System.setProperty("axis.socketFactory",CustomSocketFactory.class.toString());
System.setProperty("axis.socketSecureFactory",CustomSocketFactory.class.toString());
AxisProperties.setProperty("axis.socketSecureFactory", CustomSocketFactory.class.toString());
AxisProperties.setProperty("axis.socketFactory", CustomSocketFactory.class.toString());
AxisProperties.setProperty("org.apache.axis.components.net.SecureSocketFactory", CustomSocketFactory.class.toString());
AxisProperties.setProperty("org.apache.axis.components.net.SocketFactory", CustomSocketFactory.class.toString());

我在实例化Locator类之前就这样做了。但是在没有发生轴连接的情况下,它使用了我的套接字工厂。

有没有办法传递我的自定义SocketFactory?即使我可以通过我的自定义KeytoreManager,它也可以完成这项工作。

我的智慧结束了!我试过像socketFactory这样的选项可能会显示出来。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

我发现了自己的错误。我不得不简单地通过

System.setProperty("org.apache.axis.components.net.SocketFactory", "com.package.myclass");
System.setProperty("org.apache.axis.components.net.SecureSocketFactory","com.package.myclass");

我传递了错误的值。

由于

答案 1 :(得分:1)

当您拥有ServiceClient实例时,您可以获取选项并设置要使用的协议处理程序的属性:

serviceClient.getOptions().setProperty(HTTPConstants.CUSTOM_PROTOCOL_HANDLER, sslProtocol);

对此有点棘手的一点是,你不能只使用SSLSocketFactory,你必须提供一个org.apache.commons.httpclient.protocol.ProtocolSocketFactory,它定义了更多的方法。

您还可以选择创建自己的HTTPClient实例并填充:

serviceClient.getOptions().setProperty(HTTPConstants.REUSE_HTTP_CLIENT, Boolean.TRUE);
serviceClient.getOptions().setProperty(HTTPConstants.CACHED_HTTP_CLIENT, httpClient);