أنت الآن بصدد الاطّلاع على مستندات 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
لتصنيف السياسة في محرّر وكيل واجهة مستخدم الإدارة باسم مختلف وأكثر طبيعية.
العنصر <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>
إلى ملف موارد في خادم وكيل API. ولا يمكنه الإشارة إلى موارد خارجية عبر HTTP أو HTTPS.
في حال عدم تحديد قيمة لـ <ResourceURL>
، يتم التحقّق من الرسالة للتأكّد من أنّها تتضمّن JSON أو XML منسّقًا بشكل سليم، وذلك إذا كان العنوان Content-type
هو "application/json" أو "application/xml" على التوالي.
لا يحتوي العنصر <ResourceURL>
على عناصر فرعية أو سمات.
استخدام مخططات XML لعملية التحقّق
إذا كان حمولة 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>
، سيتم تلقائيًا ضبط هذه السياسة على "message"، ما يشير إلى رسالة الطلب الكاملة (في مسار الطلب) أو رسالة الردّ (في مسار الردّ)، بما في ذلك أي حمولة. يمكنك أيضًا ضبطها بشكل صريح على "طلب" أو "رد" للإشارة إلى الطلب أو الرد.
القيمة التلقائية | طلب |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الأصل |
<MessageValidation>
|
العناصر الفرعية | بدون |
يستخدم العنصر <Source>
البنية التالية:
البنية
... <Source>message_to_validate</Source> ...
مثال
... <Source>request</Source> ...
بالإضافة إلى "message" و"request" و "response"، يمكنك ضبط قيمة <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.