سؤال

لدي مشكلة مع عميل 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

أي فكرة لماذا حصلت على هذا الخطأ؟

هل كانت مفيدة؟

المحلول

لقد وجدت أنه لا بد لي من إضافة client.properties و mn_keystore.ks لwss4j-1.5.8.jar.لا أعرف إذا كان ذلك حسب التصميم.أفضلي هو إخراج كلا الملفين من هذا .jar مكتبة.

يحرر:في بيئة أخرى حاولت مع منفصلة client.properties وقد نجحت!الآن wss4j-1.5.8.jar كما هو الأصلي، دون التكوين ومخزن المفاتيح.لا أعرف لماذا هذا العمل، وهذا لم يعمل في وقت سابق :(

تحرير2:عند تشغيل تطبيق Eclipse، فمن المحتمل ألا يضيف دليل المشروع إلى claaspath.لقد استقلت من إضافة ملف .properies إلى بعض ملفات .jar والآن أستخدم:من القائمة، حدد Run->Debug Configurations، وحدد موقع تطبيق Java الخاص بك وعلامة التبويب classpath الخاصة به.ثم حدد "إدخالات المستخدم" وانقر فوق الزر "خيارات متقدمة" من اللوحة اليمنى، ثم حدد "إضافة مجلد خارجي".الآن أضف الدليل مع ملفك .properties ملفات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top