2013-04-26 7 views
6

से जावाकेस्टोर को तुरंत चालू करने में समस्या का उपयोग करके का उपयोग करने का प्रयास कर रहा हूं, विशेष रूप से CryptoFactory.getInstance(properties) विधि।फ़ाइल

यह consistantly

java.lang.RuntimeException: org.apache.ws.security.components.crypto.Merlin cannot create instance

जो evantually

java.security.UnrecoverableKeyException: Password verification failed

कुंजीस्टोर फाइल पर पासवर्ड के कारण होता है कमांड लाइन पर Keytool के साथ की जाँच कर दिया गया है फेंक और सही है जाएगा ।

कुंजीस्टोर निम्नलिखित प्रक्रिया के माध्यम से उत्पन्न होता है:

CMD Window detailing keytool -genkey -keystore testkeystore.jks

कौन सा ग्रहण porject की रूट निर्देशिका में है।

public class App { 
    public static void main(String[] args) throws CredentialException, 
      IOException { 
     System.out.println("Starting"); 
     Properties p = new Properties(); 
     p.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", 
       "password"); 
     p.setProperty("org.apache.ws.security.crypto.provider", 
       "org.apache.ws.security.components.crypto.Merlin"); 
     p.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", 
       "jks"); 
     p.setProperty("org.apache.ws.security.crypto.merlin.file", "./testkeystore.jks"); 

     Crypto crypto = CryptoFactory.getInstance(p); 
     System.out.println(" Complete "); 

    } 
} 

और निम्न अपवाद उत्पन्न होता है:

परीक्षण applciation इस प्रकार है

Exception in thread "main" java.lang.RuntimeException: org.apache.ws.security.components.crypto.Merlin cannot create instance 
    at org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:225) 
    at org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:180) 
    at org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:73) 
    at com.restart.test.cryptotest2.App.main(App.java:22) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:211) 
    ... 3 more 
Caused by: org.apache.ws.security.components.crypto.CredentialException: Failed to load credentials. 
    at org.apache.ws.security.components.crypto.AbstractCrypto.load(AbstractCrypto.java:174) 
    at org.apache.ws.security.components.crypto.AbstractCrypto.<init>(AbstractCrypto.java:135) 
    at org.apache.ws.security.components.crypto.Merlin.<init>(Merlin.java:71) 
    ... 8 more 
Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect 
    at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:772) 
    at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55) 
    at java.security.KeyStore.load(KeyStore.java:1214) 
    at org.apache.ws.security.components.crypto.AbstractCrypto.load(AbstractCrypto.java:168) 
    ... 10 more 
Caused by: java.security.UnrecoverableKeyException: Password verification failed 
    at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:770) 
    ... 13 more 

पासवर्ड cmd विंडो में संकेत के रूप में करने के लिए "पासवर्ड" सेट कर दिया जाता है, लेकिन सभी के द्वारा खाते में यह एप्लिकेशन अस्वीकार कर रहा है, मैं बिना किसी समस्या के keytool -storepasswd का उपयोग कर पासवर्ड बदल सकता हूं, इसलिए मुझे पता है कि मैं जो पासवर्ड प्रदान कर रहा हूं वह सही है; क्या कोई सुझाव दे सकता है कि यहां क्या गलत हो रहा है? मैं इस दिन पूरी तरह से असफल तरीके से डीबग करने की कोशिश कर रहा हूं।

यदि कोई अतिरिक्त जानकारी है जो मैं प्रदान कर सकता हूं तो कृपया मुझे बताएं।

संपादित करें -

folloing Maven निर्भरता इस परीक्षण का निर्माण करने की जरूरत है:

<dependency> 
     <groupId>org.apache.ws.security</groupId> 
     <artifactId>wss4j</artifactId> 
     <version>1.5.8</version> 
     <scope>provided</scope> 
    </dependency> 
+2

ओरेकल जेडीके 1.6 के साथ बस अपने कदम दोहराएं और यह बिना किसी त्रुटि के काम करता है। हो सकता है कि आपका पासवर्ड गलत है या आप अलग-अलग कीस्टोर खोलने की कोशिश कर रहे हैं? इसे फिर से बनाने और कीस्टोर के लिए पूर्ण पथ सेट करने का प्रयास करें। – user1516873

+0

हाय उपयोगकर्ता, आपकी टिप्पणियों को पढ़ने के बाद मैंने इसे जेडीके/जेआरई के एक अलग संस्करण के खिलाफ बनाया और यह आरटी.जावा के स्रोतों को डाउनलोड करने के बाद काम किया और मुझे पता चला कि क्रिप्टोबेस क्लास दो जावाकिटोस्टर्स को तत्काल कर रहा था, पहला (होने वाला मेरी .jks फ़ाइल) जो ठीक से ठीक हो गई, लेकिन दूसरा 'jac \ lib \ security> में' cacerts' keystore था 'जिसमें' चेंजिट 'का डिफ़ॉल्ट पासवर्ड नहीं था जो असफलता का कारण बन रहा था; मैंने अब जेरे कीस्टोर पर पासवर्ड बदल दिया है और मैं अपने मूल जेआर/जेडीके में ठीक काम कर रहा हूं। तो यह पुष्टि करने के लिए धन्यवाद कि यह एक विन्यास था .. – Waltzy

+0

... मुद्दा और मेरे लिए कोडिंग समस्या नहीं। हालांकि, मैं अपने प्रतिनिधि के लिए बर्बाद होने के लिए तैयार हूं, इसलिए यदि आप एक समान प्रभाव के लिए कुछ लिखना चाहते हैं तो मैं इसे आपको पुरस्कृत कर सकता हूं। – Waltzy

उत्तर

2

उपयोगकर्ता से टिप्पणियों को पढ़ने के बाद मैंने इसे जेडीके/जेआरई के एक अलग संस्करण के खिलाफ बनाया और यह काम किया, आरटी.जावा के स्रोतों को डाउनलोड करने के बाद और मुझे कदम उठाने के बाद, मैंने पाया कि क्रिप्टोबेस क्लास दो जावाकिस्ट्स को तुरंत चालू कर रहा था, पहला (मेरी .jks फ़ाइल होने के नाते) जो ठीक से ठीक हो गया, लेकिन दूसरा cacertsjre\lib\security> में कीस्टोर था जिसमें changeit का डिफ़ॉल्ट पासवर्ड नहीं था जो विफलता का कारण बन रहा था;

अब मैंने जेरे कीस्टोर पर पासवर्ड बदल दिया है और मैं अपने मूल जेआर/जेडीके में ठीक काम कर रहा हूं।

1

मैं आपकी समस्या को पुस्तकालयों के साथ संबंधित है लगता है क्योंकि स्टैकट्रेस

'org.apache.ws कहते हैं .security.components.crypto.Merlin उदाहरण नहीं बना सकता '

इसका मतलब है कि आपके पास WSS4J लाइब्रेरी का (गलत संस्करण है) नहीं है।

+0

हाय क्यूरो, मैंने इस मुद्दे को ठीक करने में कामयाब रहा है (विस्तृत मैं नीचे मेरा जवाब हूं) लेकिन मैं आपको अगले 4 दिनों के अंत में बक्षीस दूंगा, इसलिए प्रतिनिधि खो नहीं गया है। – Waltzy