2009-12-11 18 views
10

350 बाउंटी और उस व्यक्ति के लिए वैफल्स जो मेरी मदद कर सकता है, के साथ संदेश डिक्रिप्ट करना!स्प्रिंग वेब सेवा क्लाइंट

मैं दिन के लिए Spring वेब सेवा एन्क्रिप्शन के साथ संघर्ष कर रहा हूं और मैं यह नहीं समझ सकता कि संदेश निकाय पर स्प्रिंग की एन्क्रिप्शन कैसे प्राप्त करें। जब भी मेरे पास सर्वर परिणामस्वरूप संदेश एन्क्रिप्ट करता है तो क्लाइंट इसे स्कीमा (XSD) के विरुद्ध सत्यापित करने से पहले इसे डिक्रिप्ट नहीं कर रहा है।

Here is the server side configuration

The server's xwss security configuration

The client's Spring configuration

Client's xwss configuration

मैं क्या कर सकते हैं उपयोगकर्ता टोकन एन्क्रिप्ट और इसे सफलतापूर्वक डिक्रिप्ट है। मैं करता हूं कि क्लाइंट से सर्वर पर डेटा भेजते समय। सर्वर तब उपयोगकर्ता टोकन को डिक्रिप्ट करता है और उपयोगकर्ता प्रमाण-पत्र प्रमाणित करता है, जो काफी अच्छी तरह से काम करता है।

समस्या तब होती है जब मैं वापस आने वाले संदेश के शरीर को आज़माता और एन्क्रिप्ट करता हूं। मुद्दा ग्राहक पक्ष पर होता है। ऐसा लगता है कि क्लाइंट इसे अस्वीकार करने से पहले संदेश को सत्यापित करने का प्रयास कर रहा है, और इसलिए स्कीमा के विरुद्ध सत्यापन करते समय एक त्रुटि होती है।

[Fatal Error] :1:192: The prefix "ns0" for element "ns0:HolidayListResponse" is not bound. 
11-Dec-2009 7:45:32 AM com.sun.xml.wss.impl.apachecrypto.DecryptionProcessor decryptElementWithCipher 
SEVERE: WSS1203: Exception [ The prefix "ns0" for element "ns0:HolidayListResponse" is not bound. ] while trying to decrypt message 

And here is the SOAP response itself

और यहाँ मार्शलिंग मैपिंग फ़ाइल

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN" 
         "http://castor.org/mapping.dtd"> 
<mapping> 
    <field-handler name="dateHandler" class="com.mycompany.hr.handlers.DateFieldHandler" /> 
    <field-handler name="dateHandler2" class="com.mycompany.hr.handlers.DateFieldHandler" /> 
    <class name="com.mycompany.hr.data.Holiday"> 
     <map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="Holiday" /> 
     <field name="from" type="string" handler="dateHandler"> 
      <bind-xml name="StartDate" node="element" /> 
     </field> 
     <field name="to" type="string" handler="dateHandler2"> 
      <bind-xml name="EndDate" node="element" /> 
     </field> 
    </class> 
    <class name="com.mycompany.hr.data.Employee"> 
     <map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="Employee" /> 
     <field name="number" type="java.lang.Integer"> 
      <bind-xml name="Number" node="element" /> 
     </field> 
     <field name="firstName" type="java.lang.String"> 
      <bind-xml name="FirstName" node="element" /> 
     </field> 
     <field name="lastName" type="java.lang.String"> 
      <bind-xml name="LastName" node="element" /> 
     </field> 
    </class> 
    <class name="com.mycompany.hr.data.HolidayRequest"> 
     <map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="HolidayRequest" /> 
     <field name="holiday" type="com.mycompany.hr.data.Holiday"> 
      <bind-xml name="Holiday" node="element" /> 
     </field> 
     <field name="employee" type="com.mycompany.hr.data.Employee"> 
      <bind-xml name="Employee" node="element" /> 
     </field> 
    </class> 

    <class name="com.mycompany.hr.data.HolidayConfirmation"> 
     <map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="HolidayConfirmation" /> 
     <field name="confirmationCode" type="java.lang.Integer"> 
      <bind-xml name="ConfirmationCode" node="element" /> 
     </field> 
     <field name="confirmationMessage" type="java.lang.String"> 
      <bind-xml name="ConfirmationMessage" node="element" /> 
     </field> 
    </class> 

    <class name="com.mycompany.hr.data.HolidayResponse"> 
     <map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="HolidayResponse" /> 
     <field name="confirmation" type="com.mycompany.hr.data.HolidayConfirmation"> 
      <bind-xml name="HolidayConfirmation" node="element" /> 
     </field> 
    </class> 
    <class name="com.mycompany.hr.data.HolidayListRequest"> 
     <map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="HolidayListRequest" /> 
     <field name="id" type="java.lang.Integer"> 
      <bind-xml name="userId" node="element" /> 
     </field> 
    </class> 
    <class name="com.mycompany.hr.data.HolidayListResponse"> 
     <map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="HolidayListResponse" /> 
     <field name="holidays" type="com.mycompany.hr.data.Holiday" collection="vector"> 
      <bind-xml name="Holiday" node="element" /> 
     </field> 
    </class> 
</mapping> 

मैं जानता हूँ कि यह जानकारी का एक बहुत कुछ है, लेकिन मैं समझ मैं सब कुछ प्रदान करेगा। क्या मेरा एन्क्रिप्शन सेटअप सही है? क्या यह संभव नहीं है कि संदेश के शरीर को एन्क्रिप्ट करें और इसे क्लाइंट साइड पर डिक्रिप्ट करें? इस बिंदु पर मैं लगभग किसी भी सुझाव के लिए खुला हूँ।

+0

आपने अभी तक पूरी जानकारी नहीं दी है;) पूर्ण स्टैकट्रैक दें (या कम से कम इसे सार्थक जगह पर कट करें, शुरुआत में नहीं) – Bozho

+0

मुझे एक त्रुटि के लिए मिलता है। मुझे पूरा स्टैक ट्रेस नहीं मिलता है। मुझे लगता है कि स्टैक ट्रेस एक्सएसडी के खिलाफ संदेश को सत्यापित करने का प्रयास कर रहा है, जो एन्क्रिप्टेड डेटा पर काम नहीं करेगा। – Zoidberg

+0

ऐसा लगता है कि डिक्रिप्शन प्रोसेसर यह तय करना चाहता है कि यह किस चीज को डिक्रिप्ट कर रहा है, लेकिन नहीं। अपने ग्राहक के वसंत xml में मुझे कहीं भी "स्कीमा" संदर्भों का उपयोग नहीं किया जा रहा है ... –

उत्तर

0

आप निश्चित हैं

<property name="xsd" value="classpath:src/java/hr.xsd"/> 

ठीक से हल किया जा रहा है?

आपको जो त्रुटि मिल रही है वह इंगित करती है कि यह उस तत्व को कैसे संभालना है, यह नहीं मिल सकता है। अगर प्रतिक्रिया डिक्रिप्ट नहीं हो रही है तो आप तत्व का नाम और उपसर्ग नहीं देख पाएंगे।

क्या आप एन्क्रिप्शन के बिना वेब सेवा को सत्यापित और चलाने में सक्षम हैं?

+0

हां, मैं एन्क्रिप्शन के बिना सफलतापूर्वक इसे चलाने में सक्षम हूं। यह ns0: HolidayListResponse के बारे में जानता है क्योंकि स्कीमा को प्रतिक्रिया में शीर्ष स्तर तत्व होना आवश्यक है, लेकिन संदेश एन्क्रिप्ट किया गया है, इसलिए यह शीर्ष स्तर तत्व नहीं देखता है। Xsd प्रॉपर्टी के लिए, हाँ यह ठीक से हल हो रहा है, स्क्वायर पथ से सीधे वसंत प्रारंभ पथ। मैंने पथ बदलने की कोशिश की और मुझे स्टार्टअप पर एक त्रुटि मिलती है अगर उसे एक्सएसडी फ़ाइल नहीं मिलती है। – Zoidberg

2

CastorMarshaller गुणों पर एक नज़र डालें, और कुछ "अनदेखी" को सही करने के लिए प्रयास करें (आपके <bean id="castorMarshaller" में)। उदाहरण के लिए सेट:

<property name="validating" value="false" /> 
<property name="suppressNamespaces" value="true" /> 
<property name="ignoreExtraElements" value="true" /> 

उनमें से एक ऐसा कर सकता है।

+0

जब मुझे मौका मिलता है तो मैं कोशिश करूँगा और आपको बता दूंगा। धन्यवाद। – Zoidberg

+0

@Zoidberg अभी भी कोई अपडेट नहीं है? :) – Bozho

+0

प्रतिक्रिया की कमी के लिए खेद है, हमारा ध्यान इस समय से अन्य प्राथमिकताओं में स्थानांतरित हो गया है और मैं काफी व्यस्त हूं। मैं इस जवाब को फिर से वोट दूंगा, क्योंकि यह सही की तरह दिखता है। एक बार मुझे इसे करने का मौका मिलने के बाद, अगर यह काम करता है या नहीं तो मैं आपको बता दूंगा। प्रतिक्रिया के लिए फिर से धन्यवाद। – Zoidberg

संबंधित मुद्दे