سؤال

المدمج في PHP تمديد ل SOAP لا يتحقق من صحة كل شيء في الوارد SOAP طلب ضد XML Schema في ال WSDL.إنه يتحقق من وجود الكيانات الأساسية، ولكن عندما يكون لديك شيء معقد مثل simpleType القيود التي يتجاهلها الامتداد إلى حد كبير وجودها.

ما هي أفضل طريقة للتحقق من صحة SOAP طلب ضد XML Schema الواردة في WSDL?

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

المحلول

تم التنقيب في هذا الشأن لساعات المشاهدة.لا يقوم PHP SoapServer الأصلي ولا مكتبة NuSOAP بأي عملية تحقق.يقوم PHP SoapServer ببساطة بإنشاء نوع من النوع.على سبيل المثال إذا قمت بتحديد

<xsd:element name="SomeParameter" type="xsd:boolean" />

وتقديم

<get:SomeParameter>dfgdfg</get:SomeParameter>

ستحصل على نوع PHP منطقي (صحيح)

يقوم NuSOAP ببساطة بإرسال كل شيء إلى السلسلة على الرغم من أنه يتعرف على الأنواع البسيطة:

من سجل تصحيح nuSOAP:

nusoap_xmlschema: processing typed element SomeParameter of type http://www.w3.org/2001/XMLSchema:boolean

لذا فإن أفضل طريقة هي حل joelhardi للتحقق من صحة نفسك أو استخدام محلل XML مثل XERCES

نصائح أخرى

إلى جانب PHP5 SOAP libs الأصلي، يمكنني أيضًا أن أخبرك أنه لن تقوم libs PEAR أو Zend SOAP بالتحقق من صحة مخطط الرسائل في الوقت الحالي.(لا أعرف أي تطبيق PHP SOAP يقوم بذلك، للأسف.)

ما سأفعله هو تحميل رسالة XML في ملف DOMDocument الكائن واستخدم أساليب DOMDocument للتحقق من صحة المخطط.

عادةً لا يتم التحقق من صحة المرء مقابل WSDL.إذا تم تصميم WSDL بشكل صحيح، فيجب أن يكون هناك مخطط xml أساسي (XSD) للتحقق من صحة نص الطلب مقابله.يجب أن يكون محلل XML الخاص بك قادرًا على القيام بذلك.

يعتمد الباقي على كيفية تنفيذ خدمة الويب ومحرك SOAP الذي تستخدمه.لست على دراية مباشرة بمحرك PHP.بالنسبة إلى "التحقق من صحة" مستوى WSDL/الواجهة عادةً ما أفعل شيئًا مثل هذا:

  1. هل يتطابق نص الطلب مع نوع طلب معروف وهل هو صالح (بواسطة XSD)؟
  2. هل الرسالة منطقية في هذا السياق وهل يمكنني تعيينها لعملية/معالج؟
  3. إذا كان الأمر كذلك، ابدأ بمعالجته
  4. خلاف ذلك:خطأ

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

منذ بعض الوقت لقد خلقت دليل على المفهوم خدمة الويب باستخدام PHP نوسواب.لا أعرف إذا كان هذا صحيحًا، لكنني أفترض أنه كذلك.

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