أنت تطّلع على مستندات 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 تنسيقًا متّسقًا كما هو موضّح في مرجع رموز الأخطاء.
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
steps.messagevalidation.SourceMessageNotAvailable |
500 |
This error occurs if a variable specified in the
|
build |
steps.messagevalidation.NonMessageVariable |
500 |
This error occurs if the Message type variables represent entire HTTP requests and responses. The built-in Edge
flow variables |
build |
steps.messagevalidation.Failed |
500 | This error occurs if the SOAPMessageValidation policy fails to validate the input message payload against the XSD schema or WSDL definition. It will also occur if there is malformed JSON or XML in the payload message. | build |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Cause | Fix |
---|---|---|
InvalidResourceType |
The <ResourceURL> element in the SOAPMessageValidation policy is set to a resource type
not supported by the policy.
|
build |
ResourceCompileFailed |
The resource script referenced in the <ResourceURL> element of the SOAPMessageValidation
policy contains an error that prevents it from compiling.
|
build |
RootElementNameUnspecified |
The <Element> element in the SOAPMessageValidation policy does not contain the root
element's name. |
build |
InvalidRootElementName |
The <Element> element in the SOAPMessageValidation policy contains a root element name
that does not adhere to XML rules for valid element naming. |
build |
المخططات
يتم تحديد كل نوع سياسة من خلال مخطّط XML (.xsd
). يُرجى العِلم أنّ مخطّطات السياسات
متاحة على GitHub.