أنت تطّلع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
تؤدي سياسة SOAPMessageValidation ما يلي:
- التحقّق من صحة أي رسالة XML وفقًا لمخطّطات XSD
- التحقّق من صحة رسائل SOAP وفقًا لتعريف WSDL
- تحديد صحة تنسيق رسائل JSON وXML
على الرغم من أنّ اسم هذه السياسة في واجهة المستخدم هو "التحقّق من صحة رسائل SOAP"، إلا أنّ السياسة تتحقّق من صحة موارد أكثر من رسائل SOAP فقط. يشير هذا القسم إلى السياسة باسم "سياسة التحقّق من الرسائل".
عنصر <MessageValidation>
تحدِّد سياسة التحقّق من الرسائل.
القيمة التلقائية | راجِع علامة التبويب السياسة التلقائية أدناه. |
هل هو مطلوب؟ | اختياري |
النوع | عنصر معقّد |
العنصر الرئيسي | timing fixed in amara |
العناصر الفرعية |
<DisplayName> <Element> <ResourceURL> <SOAPMessage> <Source> |
البنية
يستخدم العنصر <MessageValidation>
البنية التالية:
<MessageValidation continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <!-- All MessageValidation child elements are optional --> <DisplayName>policy_display_name</DisplayName> <Element namespace="element_namespace">element_to_validate</Element> <SOAPMessage version="[ 1.1 | 1.2 | 1.1/1.2 ]"/> <Source>message_to_validate</Source> <ResourceURL>validation_WSDL_or_XSD</ResourceURL> </MessageValidation>
السياسة التلقائية
يعرض المثال التالي الإعدادات التلقائية عند إضافة سياسة التحقّق من الرسائل إلى مسار الإحالة الناجحة في واجهة مستخدم Edge:
<MessageValidation continueOnError="false" enabled="true" name="SOAP-Message-Validation-1"> <DisplayName>SOAP Message Validation-1</DisplayName> <Properties/> <Element namespace="http://sample.com">sampleObject</Element> <SOAPMessage/> <Source>request</Source> <ResourceURL>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL> </MessageValidation>
يتضمن هذا العنصر السمات التالية الشائعة لجميع السياسات:
السمة | تلقائي | مطلوب | الوصف |
---|---|---|---|
name |
لا ينطبق | مطلوب |
الاسم الداخلي للسياسة. يمكن أن تحتوي قيمة السمة اختياريًا، يمكنك استخدام العنصر |
continueOnError |
false | إجراء اختياري | يمكنك ضبطها على "خطأ" لعرض رسالة خطأ عند تعذّر تنفيذ إحدى السياسات. ويُعدّ هذا سلوكًا متوقعًا في معظم السياسات. يمكنك ضبط القيمة على "صحيح" للاستمرار في تنفيذ العملية حتى بعد تعذُّر تنفيذ سياسة. |
enabled |
صحيح | إجراء اختياري | اضبط القيمة على "true" لفرض السياسة. اضبط هذه القيمة على "false" على "إيقاف" السياسة. لن يتم فرض السياسة حتى إذا ظلت مرتبطة بتدفق. |
async |
false | منهي العمل به | تم إيقاف هذه السمة نهائيًا. |
أمثلة
توضِّح الأمثلة التالية بعض الطرق التي يمكنك من خلالها استخدام سياسة التحقّق من الرسائل:
1: التحقّق من XSD
يمكنك استخدام سياسة التحقّق من الرسائل للتحقّق من حمولة طلب رسالة XML مقارنةً بمخطّط XSD.
- أنشئ ملف مورد XSD جديدًا. على سبيل المثال، "note-schema.xsd":
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
- أضِف سياسة التحقّق من رسائل SOAP إلى المسار التمهيدي لنقطة النهاية الوكيلة:
- حدِّد موقع ملف المرجع XSD باستخدام العنصر
<ResourceURL>
. على سبيل المثال:... <ResourceURL>xsd://note-schema.xsd</ResourceURL> ...
- أزِل العنصرَين
<SOAPMessage>
و<Element>
من تعريف السياسة.
من المفترض أن يظهر تعريف السياسة على النحو التالي:
<MessageValidation continueOnError="false" enabled="true" name="validateXMLRequest"> <DisplayName>My XML Validator</DisplayName> <Properties/> <Source>request</Source> <ResourceURL>xsd://note-schema.xsd</ResourceURL> </MessageValidation>
- حدِّد موقع ملف المرجع XSD باستخدام العنصر
- أرسِل طلب
POST
إلى الوكيل الذي يمثّل واجهة برمجة التطبيقات مع تضمين ملف XML كحمولة الرسالة، كما هو موضّح في المثال التالي:curl -v -X POST -H 'Content-Type: application/xml' http://my-test.apigee.net/v1/xsd-mock -d '<note> <to>Fred Rogers</to> <from>Nick Danger</from> <heading>Greetings from my neighborhood</heading> <body>Just writing to say hello.</body> </note>'
يُرجى ملاحظة أنّه تم ضبط عنوان
Content-type
على "application/xml".يمكنك أيضًا إنشاء ملف بيانات للحمولة والإشارة إليه باستخدام أمر مشابه لما يلي:
curl -v -X POST -H 'Content-type: application/xml' http://my-test.apigee.net/v1/xsd-mock --data '@../examples/note-payload.xml'
من المفترض أن يصلك ردّ خلال HTTP 200
. استنادًا إلى نقطة النهاية المستهدَفة،
قد تتلقّى تفاصيل إضافية عن الطلب. على سبيل المثال، إذا كنت تستخدم
http://httpbin.org/post
كنقطة نهاية مستهدفة وحددت -v
(مفصّل) كإخراج، من المفترض أن يكون الردّ مشابهًا لما يلي:
< HTTP/1.1 200 OK < Date: Wed, 16 May 2018 21:24:54 GMT < Content-Type: application/xml < Content-Length: 431 < Connection: keep-alive < Server: gunicorn/19.8.1 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < Via: 1.1 vegur { "args":{}, "data":"<note><to>fred</to><from>nick</from><heading>hello</heading> <body>Just writing to say hello.</body></note>", "files":{}, "form":{}, "headers": { "Accept":"*/*", "Connection":"close", "Content-Length":"106", "Content-Type":"application/xml", "Host":"httpbin.org", "User-Agent":"curl/7.58.0" }, "json":null, "origin":"10.1.1.1, 104.154.179.1", "url":"http://httpbin.org/post" }
للتأكّد من أنّ عملية التحقّق من XSD تعمل، حاوِل إدراج علامة أخرى في نص طلبك. على سبيل المثال:
curl -v -X POST -H 'Content-Type: application/xml' http://my-test.apigee.net/v1/xsd-mock -d '<note> <to>Fred Rogers</to> <from>Nick Danger</from> <heading>Greetings from my neighborhood</heading> <body>Just writing to say hello.</body> <badTag>Not good</badTag> </note>'
من المفترض أن يظهر لك خطأ في عملية التحقّق.
2: التحقّق من SOAP
يمكنك استخدام سياسة التحقّق من الرسائل للتحقّق من صحة الحمولة في طلب رسالة SOAP مقارنةً بملف WSDL.
- أنشئ ملف موارد WSDL جديدًا. على سبيل المثال، "example-wsdl.wsdl":
- أضِف سياسة التحقّق من رسائل SOAP إلى المسار التمهيدي لنقطة النهاية الوكيلة:
- اضبط سمة
version
للعنصر<SOAPMessage>
على إصدار بروتوكول SOAP الذي تريد التحقّق منه. على سبيل المثال، "1.1":... <SOAPMessage version="1.1"/> ...
- اضبط قيمة عنصر
<Element>
على العنصر الذي تريد التحقّق من صحته:... <Element namespace="https://example.com/gateway">getID</Element> ...
يحدِّد
<Element>
العنصر الفرعي الأول ضمن العنصر<Body>
في مغلف طلب SOAP.اضبط السمة
namespace
على مساحة الاسم لهذا الطفل. - حدِّد موقع ملف مرجع WSDL باستخدام العنصر
<ResourceURL>
. على سبيل المثال:... <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> ...
من المفترض أن يظهر تعريف السياسة على النحو التالي:
<MessageValidation continueOnError="false" enabled="true" name="validateSOAPRequest"> <DisplayName>My SOAP Validator</DisplayName> <Properties/> <Source>request</Source> <SOAPMessage version="1.1"/> <Element namespace="https://example.com/gateway">getID</Element> <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> </MessageValidation>
- اضبط سمة
- أرسِل طلب
POST
إلى الوكيل لواجهة برمجة التطبيقات مع مظروف SOAP كحمولة الرسالة، كما هو موضّح في المثال التالي:curl -v -X POST -H 'Content-Type: application/xml' http://my-test.apigee.net/v1/xsd-mock -d '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:prox="https://example.com/gateway" xmlns:typ="https://example.com/gateway/types"> <soapenv:Header/> <soapenv:Body> <prox:getID> <typ:MyType> <typ:ID>42</typ:ID> </typ:MyType> </prox:getID> </soapenv:Body> </soapenv:Envelope>'
يُرجى ملاحظة أنّه تم ضبط عنوان
Content-type
على "application/xml".يمكنك أيضًا إنشاء ملف بيانات للحمولة والإشارة إليه باستخدام أمر مشابه لما يلي:
curl -v -X POST -H 'Content-type: application/xml' http://my-test.apigee.net/v1/xsd-mock --data '@../examples/soap-payload.xml'
من المفترض أن يصلك ردّ خلال HTTP 200
. استنادًا إلى نقطة النهاية المستهدَفة،
قد تتلقّى تفاصيل إضافية عن الطلب. على سبيل المثال، إذا كنت تستخدِم
http://httpbin.org/post
كنقطة نهاية مستهدفة، يجب أن يكون الردّ مشابهًا
لما يلي:
< HTTP/1.1 200 OK < Date: Wed, 16 May 2018 21:24:54 GMT < Content-Type: application/xml < Content-Length: 431 < Connection: keep-alive < Server: gunicorn/19.8.1 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < Via: 1.1 vegur { "args":{}, "data":"<note><to>fred</to><from>nick</from><heading>hello</heading> <body>Just writing to say hello.</body></note>", "files":{}, "form":{}, "headers": { "Accept":"*/*", "Connection":"close", "Content-Length":"106", "Content-Type":"application/xml", "Host":"httpbin.org", "User-Agent":"curl/7.58.0" }, "json":null, "origin":"10.1.1.1, 104.154.179.1", "url":"http://httpbin.org/post" }
3: ملف XML/JSON صحيح
يمكنك استخدام سياسة التحقّق من الرسائل للتأكّد من أنّ الحمولة في رسالة JSON أو XML ذات بنية سليمة (وهي ليست هي نفسها التحقّق). تضمن السياسة أن تستوفي البنية والمحتوى المعايير المقبولة، بما في ذلك:
- يجب أن يتضمّن عنصر الجذر عنصرًا واحدًا فقط.
- عدم توفّر أحرف غير مقبولة في المحتوى
- أن تكون العناصر والعلامات مضمّنة بشكل صحيح
- تطابق العلامات في البداية والنهاية
للتحقّق من صحة حِزم XML أو JSON:
- أضِف سياسة التحقّق من رسائل SOAP إلى المسار التمهيدي لنقطة النهاية الوكيلة.
- أزِل العناصر
<ResourceURL>
و<SOAPMessage>
و<Element>
من تعريف السياسة.من المفترض أن يظهر تعريف السياسة على النحو التالي:
<MessageValidation async="false" continueOnError="false" enabled="true" name="validateXMLRequest"> <DisplayName>My JSON Checker</DisplayName> <Properties/> <Source>request</Source> </MessageValidation>
- أرسِل طلب
POST
إلى خادم الوكيل لواجهة برمجة التطبيقات، كما هو موضّح في المثال التالي:curl -v -X POST -H 'Content-Type: application/json' http://my-test.apigee.net/v1/xsd-mock -d '{ "note": { "to": "Fred Rogers", "from": "Nick Danger", "header": "Greetings from my neighborhood", "body": "Just writing to say hello." } }'
يُرجى ملاحظة أنّه تم ضبط عنوان
Content-type
على "application/json".للتحقّق من صحة ملف XML، استخدِم XML كحمولة الرسالة واضبط
Content-type
على "application/xml".
من المفترض أن يصلك ردّ خلال HTTP 200
. عند إرسال حمولة رسالة
لا تحتوي على ملف XML أو JSON بتنسيق صحيح، من المفترض أن تتلقّى خطأ
steps.messagevalidation.Failed
.
مرجع العنصر الفرعي
يصف هذا القسم العناصر الفرعية لعنصر <MessageValidation>
.
<DisplayName>
استخدِم السمة name
بالإضافة إلى سمة name
لتصنيف السياسة في محرِّر واجهة المستخدم الوكيل لمدير
باستخدام اسم مختلف يبدو أكثر طبيعية.
العنصر <DisplayName>
شائع في جميع السياسات.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختيارية: في حال حذف <DisplayName> ، يتم استخدام قيمة سمة name في
السياسة. |
النوع | سلسلة |
العنصر الرئيسي | <PolicyElement> |
العناصر الفرعية | بدون |
يستخدم العنصر <DisplayName>
البنية التالية:
البنية
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
مثال
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
لا يحتوي عنصر <DisplayName>
على سمات أو عناصر ثانوية.
<Element>
تُحدِّد العنصر في الرسالة المطلوب التحقّق منه. هذا هو العنصر الفرعي الأول ضمن عنصر
<Body>
في مغلف طلب SOAP.
القيمة التلقائية | sampleObject |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الرئيسي |
<MessageValidation>
|
العناصر الفرعية | بدون |
يستخدم العنصر <Element>
البنية التالية:
البنية
... <Element namespace="element_namespace">element_to_validate</Element> ...
مثال 1
يحدِّد المثال التالي عنصرًا واحدًا ليتم التحقّق منه:
... <Element namespace="https://example.com/gateway">getID</Element> ...
مثال 2
يمكنك تحديد أكثر من عنصر واحد للتحقّق منه عن طريق إضافة عناصر <Element>
متعددة:
... <Element namespace="https://example.com/gateway">getID</Element> <Element namespace="https://example.com/gateway">getDetails</Element> ...
يحتوي عنصر <Element>
على السمات التالية:
السمة | تلقائي | مطلوب؟ | الوصف |
---|---|---|---|
namespace |
"http://sample.com" | اختياري | تحدِّد مساحة الاسم للعنصر الذي سيتم التحقّق منه. |
<ResourceURL>
يحدِّد مخطّط XSD أو تعريف WSDL الذي سيتم استخدامه للتحقّق من صحة الرسالة المصدر.
القيمة التلقائية | wsdl://display_name.wsdl |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الرئيسي |
<MessageValidation>
|
العناصر الفرعية | بدون |
يستخدم العنصر <ResourceURL>
البنية التالية:
البنية
... <ResourceURL>[wsdl|xsd]://validation_WSDL_or_XSD</ResourceURL> ...
أمثلة
بالنسبة إلى ملف XML:
... <ResourceURL>xsd://note-schema.xsd</ResourceURL> ...
بالنسبة إلى ملف WSDL:
... <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> ...
يجب أن تشير قيمة <ResourceURL>
إلى ملف موارد في الوكيل لواجهة برمجة التطبيقات. لا يمكن أن تشير إلى موارد خارجية عبر HTTP أو HTTPS.
في حال عدم تحديد قيمة لسمة <ResourceURL>
، يتم التحقّق من الرسالة بحثًا عن تنسيق JSON
أو XML سليم إذا كان عنوان Content-type
هو "application/json" أو "application/xml"،
على التوالي.
لا يحتوي العنصر <ResourceURL>
على عناصر أو سمات فرعية.
استخدام ملفات XSD للتحقّق من الصحة
إذا كانت الحمولة بتنسيق XML التي تتحقّق منها باستخدام سياسة التحقّق من الرسائل تشير إلى مخطّط آخر، عليك إضافة البادئة xsd
إلى ملف XSD المضمّن في سمة schemaLocation
.
يتألّف مثال المخطّط التالي من عدة ملفات XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:include schemaLocation="xsd://note-schema.xsd"/> <xs:include schemaLocation="xsd://letter-schema.xsd"/> <xs:include schemaLocation="xsd://user-schema.xsd"/> </xs:schema>
استخدام ملفات WSDL للتحقق من الصحة
يجب أن يحدِّد ملف WSDL مخطّطًا واحدًا على الأقل. وإذا لم يشير إلى مخطّط واحد على الأقل، لن تجتاز سياسة التحقّق من الرسائل.
الحد الأقصى لعمق الاستيراد لنموذج هو 10. وفي حال تجاوزت هذا العدد من عمليات الاستيراد المُدمجة، لن تنجح سياسة التحقّق من الرسائل.
<SOAPMessage>
يحدِّد إصدار SOAP الذي تتحقّق منه سياسة التحقّق من الرسائل.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | timing fixed in amara |
العنصر الرئيسي |
<MessageValidation>
|
العناصر الفرعية | بدون |
يستخدم العنصر <SOAPMessage>
البنية التالية:
البنية
... <SOAPMessage version="[ 1.1 | 1.2 | 1.1/1.2 ]"/> ...
مثال
... <SOAPMessage version="1.1"/> ...
يحتوي عنصر <SOAPMessage>
على السمات التالية:
السمة | تلقائي | مطلوب؟ | الوصف |
---|---|---|---|
version |
بدون | اختياري | إصدار SOAP الذي تستخدمه هذه السياسة للتحقّق من صحة رسائل SOAP
القيم الصالحة هي:
|
لمزيد من المعلومات، يُرجى الاطّلاع على من SOAP/1.1 إلى SOAP الإصدار 1.2 في 9 نقاط.
<Source>
لتحديد الرسالة المصدر التي سيتم التحقّق منها. وتكون قيمة هذا العنصر هي اسم الرسالة التي تريد التحقّق من صحتها.
في حال عدم ضبط <Source>
، يتم ضبط هذه السياسة تلقائيًا على "الرسالة"، والتي تشير إلى
رسالة الطلب الكاملة (في مسار الطلب) أو رسالة الردّ (في مسار الردّ)، بما في ذلك أي
حمولة. يمكنك أيضًا ضبطه صراحةً على "طلب" أو "ردّ" للإشارة إلى الطلب
أو الردّ.
القيمة التلقائية | طلب |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الرئيسي |
<MessageValidation>
|
العناصر الفرعية | بدون |
يستخدم العنصر <Source>
البنية التالية:
البنية
... <Source>message_to_validate</Source> ...
مثال
... <Source>request</Source> ...
بالإضافة إلى "الرسالة" و"الطلب" و "الاستجابة"، يمكنك ضبط قيمة
<Source>
على اسم أي رسالة في مسارك. في حال اتّباع هذه الطريقة، عليك إنشاء
رسالة مخصّصة بهذا الاسم في مسار الإحالة الناجحة قبل تنفيذ هذه السياسة. بخلاف ذلك، ستظهر لك
رسالة خطأ.
إذا تعذّر حلّ قيمة <Source>
في تدفّق الرسائل أو تم حلّها لتكون نوعًا غير نوع
الرسالة، يحدث أحد الإجراءَين التاليَين:
- في حال كانت القيمة فارغة: يُرسِل Edge خطأ
steps.messagevalidation.SourceMessageNotAvailable
. - إذا كان نوع المحتوى غير رسالة: يُرسِل Edge خطأ
steps.messagevalidation.NonMessageVariable
.
لا يحتوي عنصر <Source>
على سمات أو عناصر ثانوية.
رموز الخطأ
تتّبع الأخطاء المعروضة من سياسات Edge تنسيقًا متّسقًا كما هو موضّح في مرجع رموز الأخطاء.
يصف هذا القسم رموز الأخطاء ورسائل الخطأ التي يتم عرضها ومتغيرات الأخطاء التي تضبطها Edge عندما تؤدي هذه السياسة إلى ظهور خطأ. هذه المعلومات مهمة لمعرفة ما إذا كنت تعمل على تطوير قواعد للأخطاء للتعامل معها. لمزيد من المعلومات، يمكنك الاطّلاع على المعلومات التي يجب معرفتها عن الأخطاء المتعلقة بالسياسات وأخطاء المعالجة.
أخطاء في وقت التشغيل
يمكن أن تحدث هذه الأخطاء عند تنفيذ السياسة.
رمز الخطأ | رموز حالة HTTP | السبب | إصلاح |
---|---|---|---|
steps.messagevalidation.SourceMessageNotAvailable |
500 |
يحدث هذا الخطأ إذا كان أحد المتغيّرين المحدَّدين في العنصر
|
build |
steps.messagevalidation.NonMessageVariable |
500 |
يحدث هذا الخطأ إذا تم ضبط العنصر تمثل متغيرات نوع الرسالة طلبات واستجابات HTTP كاملة. وتكون متغيّرات تدفق Edge المدمَجة |
build |
steps.messagevalidation.Failed |
500 | يحدث هذا الخطأ إذا تعذّر على سياسة SOAPMessageValidation التحقق من حمولة رسالة الإدخال وفقًا لمخطّط XSD أو تعريف WSDL. وستظهر هذه البيانات أيضًا إذا كانت رسالة الحمولة مكتوبة بتنسيق JSON أو XML بشكلٍ غير صحيح. | build |
أخطاء النشر
يمكن أن تحدث هذه الأخطاء عند نشر خادم وكيل يحتوي على هذه السياسة.
اسم الخطأ | السبب | إصلاح |
---|---|---|
InvalidResourceType |
تم ضبط العنصر <ResourceURL> في سياسة SOAPMessageHealthation على نوع مورد غير متوافق مع السياسة.
|
build |
ResourceCompileFailed |
يحتوي النص البرمجي للمورد المشار إليه في العنصر <ResourceURL> ضمن السياسة SOAPMessageHealthation على خطأ يمنع تجميعه.
|
build |
RootElementNameUnspecified |
لا يحتوي العنصر <Element> المتوفّر في سياسة SOAPMessageHealthation على اسم العنصر الجذر. |
build |
InvalidRootElementName |
يحتوي العنصر <Element> في سياسة SOAPMessage بدء الاستخدام على اسم عنصر جذري
لا يتوافق مع قواعد XML لتسمية العناصر الصالحة. |
build |
المخططات
يتم تحديد كل نوع سياسة من خلال مخطّط XML (.xsd
). يُرجى العِلم أنّ مخطّطات السياسات
متاحة على GitHub.