0

WS-Securityを使用する必要があるWebServiceクライアントに問題があります。私のクライアントはで書かれていaxis2ます。暗号化を有効にしない場合(もちろんサーバーエミュレーターを使用)に機能します。以下に追加して暗号化を有効にしましたaxis.xml

<!--Signature and Encryption : Using the request's certificate-->
<module ref="rampart" />

<parameter name="OutflowSecurity">
  <action>
    <items>Signature</items>
    <user>mn</user>
      <passwordCallbackClass>PWCallback</passwordCallbackClass>
      <signaturePropFile>client.properties</signaturePropFile>
    <signatureKeyIdentifier>SKIKeyIdentifier</signatureKeyIdentifier>
    <signatureParts>{Element}{http://schemas.xmlsoap.org/soap/envelope/}Body</signatureParts>
  </action>
</parameter> 

さて、引数を使ってEclipseからクライアントを呼び出すと:

-Daxis2.xml=axis-repo/conf/axis2.xml -Daxis2.repo=axis-repo

私が得た:

org.apache.axis2.AxisFault: CryptoFactory: Cannot load properties: client.properties
at org.apache.rampart.handler.WSDoAllSender.processMessage(WSDoAllSender.java:67)
at org.apache.rampart.handler.WSDoAllHandler.invoke(WSDoAllHandler.java:72)
at org.apache.axis2.engine.Phase.invoke(Phase.java:318)
at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:251)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:416)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
...
Caused by: java.lang.RuntimeException: CryptoFactory: Cannot load properties: client.properties
at org.apache.ws.security.components.crypto.CryptoFactory.getProperties(CryptoFactory.java:258)
at org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:171)
at org.apache.ws.security.handler.WSHandler.loadSignatureCrypto(WSHandler.java:431)
at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:137)
at org.apache.rampart.handler.WSDoAllSender.processBasic(WSDoAllSender.java:201)
at org.apache.rampart.handler.WSDoAllSender.processMessage(WSDoAllSender.java:64)
... 9 more
Caused by: java.lang.NullPointerException
at org.apache.ws.security.components.crypto.CryptoFactory.getProperties(CryptoFactory.java:253)
... 14 more

client.propertiesオブジェクトとして開くことができFileます。このファイルをさまざまなディレクトリに配置するか、フルパスを使用するように名前を変更しようとしました(Windowsでの作業中は、スラッシュとバックスラッシュの両方を使用)が、何も役に立ちません。

client.propertiesファイルは次のようになります。

org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=mn
org.apache.ws.security.crypto.merlin.file=mn_keystore.ks

なぜこのエラーが発生したのか考えてみてください。

4

1 に答える 1

2

client.propertiesmn_keystore.ksを 追加する必要があることがわかりましたwss4j-1.5.8.jar。仕様によるものかどうかはわかりません。.jar私の好みは、このライブラリから両方のファイルを除外することです。

編集:他の環境で私は別々に試しましたclient.properties、そしてそれはうまくいきました!wss4j-1.5.8.jarこれで、構成やキーストアがなく、元の状態になります。なぜこれが機能するのかわかりませんが、これは以前は機能しませんでした:(

EDIT2:Eclipseがアプリケーションを実行するとき、おそらくプロジェクトディレクトリをclaaspathに追加しません。.properiesファイルをいくつかの.jarに追加することを辞任し、現在は次を使用しています。メニューから[実行]-> [デバッグ構成]を選択し、Javaアプリケーションとそのクラスパスタブを見つけます。次に、「ユーザーエントリ」を選択し、右側のパネルから「詳細」ボタンをクリックして、「外部フォルダの追加」を選択します。次に、ファイルを含むディレクトリを追加し.propertiesます。

于 2010-07-21T09:29:28.430 に答える