سؤال

صادفت واحدة غريبة اليوم ، الأمر كما هو:

أقوم بإعداد أجنحة اختبار لـ QAING خدمة ويب لي ، والتي يتم كتابتها في PHP5 - الاستفادة من الفصل soapfault من بين أمور أخرى.

يمكنني استخدام الفصل لإرجاع رسالة الخطأ إلى العملاء. مثال:

if (!$this->CheckHost(getenv('REMOTE_ADDR')))
{
    return new SoapFault(S_CLIENT, S_STRING_IP, "", S_DETAIL_IP);
}

إرجاع Soapfault إذا لم يكن العميل غير مصرح به ...

الآن ، إذا قمت بإضافة تأكيد امتثال المخطط في Soapui 3.0.1 يخبرني أن الرسالة التي تم إرجاعها ليست متوافقة مع ملف WSDL.

تتم كتابة ملف WSDL من قبلي ولا يحتوي في الفعل على وصف لفئة Soapfault الفعلية. هل سيكون ذلك مطلوبًا؟ الفكر ليس لأن soapfault يتم spezified في الصابون 1.1 على أي حال.

الاستجابة الفعلية تبدو هكذا:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode>SOAP-ENV:Client</faultcode>
         <faultstring>ERR_102</faultstring>
         <faultactor/>
         <detail>IP error message</detail>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

رسالة خطأ soapui هي:

عنصر "التفاصيل" مع نوع المحتوى العنصر فقط لا يمكن أن يحتوي على محتوى نص.

هل لدى أي شخص تلميح ما أفعله خطأ؟

تيا

ك

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

المحلول

مخطط SOAP 1.1 XML (http://schemas.xmlsoap.org/soap/envelope/) يحدد عنصر التفاصيل على أنه

   <xs:complexType name="detail"><xs:sequence> 
      <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> 
    </xs:sequence> 
    <xs:anyAttribute namespace="##any" processContents="lax" /> 
  </xs:complexType> 

وهذا يعني أنه لا يمكن أن يحتوي على نص فقط كما في خطأك. حاول تغيير الاستجابة إلى شيء مثل

...
   <detail><msg>IP error message</msg></detail>
...

أتمنى أن يساعدك هذا!

مع تحياتي،

/Ole Eviware.com

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