3

在使用以下属性进行 https 连接时,我有一个客户 SecureSocketFactory 设置供 Axis 使用:

AxisProperties.setProperty("axis.socketSecureFactory",
    "com.metavante.csp.model.manager.mobilepayments.MonitiseSSLSocketFactory");

当 Axis 实例化此类时,会调用带有 Hashtable(属性)的构造函数。我看到这个表中设置了超时属性。无论如何要在其中设置更多值吗?我希望能够通过使用静态或系统属性在每个实例场景而不是全局配置套接字工厂。

编辑:我发现这些属性实际上是 HttpSender (BasicHandler) 选项。我仍然无法动态设置这些。

4

2 回答 2

2

我想出了解决问题的方法。在我想设置我使用的属性的代码中: serviceLocator.getEngine().setOption(USE_CERT_PROPERTY, new Boolean(true));

其中 getEngine 返回正在使用的 AxisEngine。然后在套接字工厂我可以:

Boolean useSMS = (Boolean) MessageContext.getCurrentContext().getProperty(OtherClass.USE_CERT_PROPERTY);

我可以将对象设置为任何值,也许我会使用我需要的证书名称。希望这可以帮助某人。

于 2009-03-16T21:41:32.767 回答
1

如果您对修改 SocketFactory 行为感兴趣,可以检索 SocketFactory 实例,然后更改或添加属性。但是如果你这样做,你还应该注入 HashTable 属性(带有超时)。我认为没有一个最终的和漂亮的解决方案。

AxisProperties.setProperty("org.apache.axis.components.net.SecureSocketFactory", MyAxisSocketFactory.class.getName());
MyAxisSocketFactory factory = (MyAxisSocketFactory) SocketFactoryFactory.getFactory("https", myHashTableParams);
factory.setMyStuff();

在这段代码之后,将创建和配置 SocketFactory 的实例,并准备好在 Web 服务中使用,或者任何 ^_^

于 2014-12-04T13:07:09.123 回答