我有一个客户SecureSocketFactory设置为在使用以下属性进行https连接时由Axis使用:
AxisProperties.setProperty("axis.socketSecureFactory",
"com.metavante.csp.model.manager.mobilepayments.MonitiseSSLSocketFactory");
当此类由Axis实例化时,将调用具有Hashtable(属性)的构造函数。我看到在此表中设置了超时属性。反正有没有设置更多的值? 我希望能够通过使用静态或系统属性在每个实例场景上配置Socket Factory,而不是全局。
编辑:我发现这些属性实际上是HttpSender(BasicHandler)选项。我仍然无法动态设置它们。
答案 0 :(得分:2)
我想出了解决这个问题的方法。在我想要设置我使用的属性的代码中:
serviceLocator.getEngine().setOption(USE_CERT_PROPERTY, new Boolean(true));
其中getEngine返回正在使用的AxisEngine。然后在插座工厂我可以:
Boolean useSMS = (Boolean) MessageContext.getCurrentContext().getProperty(OtherClass.USE_CERT_PROPERTY);
我可以将对象设置为任何东西,也许我会使用我需要的证书名称。希望这有助于某人。
答案 1 :(得分: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服务中使用,或者其他任何内容^ _ ^