Проблема с криптографией Axis2 / rampart с signaturePropFile - PullRequest
0 голосов
/ 19 июля 2010

У меня проблема с клиентом WebService, который должен использовать WS-Security.Мой клиент написан с 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

Есть идеи, почему я получил эту ошибку?

1 Ответ

2 голосов
/ 21 июля 2010

Я обнаружил, что должен добавить client.properties и mn_keystore.ks к wss4j-1.5.8.jar. Я не знаю, если это по замыслу. Я предпочитаю иметь оба файла из этой .jar библиотеки.

РЕДАКТИРОВАТЬ : в другой среде я пробовал с отдельным client.properties, и это сработало! Теперь wss4j-1.5.8.jar как оригинал, без конфигурации и хранилища ключей. Я не знаю, почему это работает, а раньше это не работало: (

EDIT2 : когда Eclipse запускает приложение, оно, вероятно, не добавляет каталог проекта в claaspath. Я отказался от добавления файла .properies в какой-то файл .jar, и теперь я использую: в меню выберите Run-> Debug Configurations, найдите ваше Java-приложение и его вкладку classpath. Затем выберите «Записи пользователя», нажмите кнопку «Дополнительно» на правой панели и выберите «Добавить внешнюю папку». Теперь добавьте каталог с вашими .properties файлами.

...