كيف يمكنني التعامل مع الخروع unmarshaling الرسائل SOAP عند تعريف مساحة داخل علامة العملية؟

StackOverflow https://stackoverflow.com/questions/626648

سؤال

وأنا تطوير خدمة الويب العقد الأول على أساس الربيع-WS. أنا الاعتماد على الخروع التنظيم، ولقد واجهت المشكلة التالية.

ويجري قبلت

ويطلب عند تعريف "XMLNS" مساحة الاسم في علامة مغلف، مثل:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
                      xmlns="http://www.mycompany.com/MyService/schemas">
  <soap:Header/>
  <soap:Body>
    <doPlaceHoldRequest>
      <hold>
        <accountInfo>
          <accountNumber>123456789</accountNumber>
        </accountInfo>
        <extended>false</extended>
        <afterHours>false</afterHours>
        <amountSavings>1.00</amountSavings>
        <amountChecking>0.00</amountChecking>
      </hold>
    </doPlaceHoldRequest>
  </soap:Body>
</soap:Envelope>

ولكن، ولدت عملاء على حد سواء. NET و Java من .wsdl التي تقدمها الربيع-WS (التي تم إنشاؤها من XSD)، تشكيل طلباتهم على النحو التالي:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header/>
  <soap:Body>
    <doPlaceHoldRequest 
                xmlns="http://www.mycompany.com/MyService/schemas">
      <hold>
        <accountInfo>
          <accountNumber>123456789</accountNumber>
        </accountInfo>
        <extended>false</extended>
        <afterHours>false</afterHours>
        <amountSavings>1.00</amountSavings>
        <amountChecking>0.00</amountChecking>
      </hold>
    </doPlaceHoldRequest>
  </soap:Body>
</soap:Envelope>

والذي ينتج استثناء Unmarshalling التي القيت من قبل الخروع. كيف يمكنني الحصول على الخروع التعرف على هذه الرسائل كما صالحة؟ استطاعت أمي أن WSDL (أو XSD كنت الإنشاء التلقائي ذلك) تكون خاطئة؟

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

المحلول

إذا ش انظر هذا بلوق وأعتقد لن تذهب إلى خدمات ويب أخرى :) http://springkbase.blogspot.com/2009/06/ ربيع-خدمة ويب-مع castor.html

نصائح أخرى

وأنا واجهت هذه المشكلة مرارا وتكرارا مع أول خدمة الويب الخاص بي الربيع-WS / الخروع. بقدر ما أستطيع أن أقول، في مكان ما على طول الخط بعض العناصر استخراج الحمولة بطريقة غير مساحة علم. وبعبارة أخرى، عقدة مثل doPlaceHoldRequest يصبح جذر وثيقة XML دون وراثة تصريح مساحة اسم المستوى الأعلى، وفي الحالتين أعلاه، الذي يؤدي إلى واحد <م> هو في مساحة الاسم الذي تريده، واحد هو أن لا - حتى واحد يؤكد غرامة ضد المخطط الخاص بك، والآخر لا

.

وأفضل حل ويبدو أن لتغطية جميع القواعد. جعل XSD لديك elementFormDefault = "مؤهل"، أن تطلب من جميع العناصر الخاصة بك لتكون في مساحة الاسم. ثم تحديد NS-اوري وبادئة نانو ثانية في كل خريطة لعنصر في رسم الخرائط الخروع الخاص بك. والنتيجة هي أثقل قليلا، مع كل البادئات مساحة الاسم، ولكن يبدو لجعله أقل كثيرا هشة عندما يتعلق الأمر للعملاء كسول و السلوك غير الشرعيين في مكونات الملقم.

JAX-WS العودة قوائم فارغة يجعل نقطة جيدة، جدا. org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor يستحق الحاجة إلى التحقق من صحة ما يأتي في الداخل والخارج.

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