3

次のプロパティを使用して https 接続を確立するときに、Axis が使用するように顧客の SecureSocketFactory を設定しています。

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 に答える