我遇到了必须使用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
知道我为什么会收到这个错误吗?
答案 0 :(得分:2)
我发现我必须添加client.properties
和mn_keystore.ks
wss4j-1.5.8.jar
。我不知道它是否符合设计要求。我的偏好是将这两个文件都放在这个.jar
库中。
编辑:在其他环境中我尝试使用单独的client.properties
并且它有效!现在wss4j-1.5.8.jar
是原始的,没有配置和密钥库。我不知道为什么这项工作,这在以前没有用过:(
EDIT2 :当Eclipse运行应用程序时,它可能不会将项目目录添加到claaspath。我辞职了将.properies文件添加到某个.jar中,现在我使用:从菜单中选择Run-&gt; Debug Configurations,找到你的Java应用程序及其classpath选项卡。然后选择“用户条目”并从右侧面板中单击“高级”按钮,并选择“添加外部文件夹”。现在添加包含.properties
个文件的目录。