أنت تطّلع على مستندات 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 | منهي العمل به | تم إيقاف هذه السمة نهائيًا. |
أمثلة
The following examples show some of the ways in which you can use the Message Validation policy:
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 Message Validation إلى المسار الأولي لنقطة نهاية الخادم الوكيل:
- حدِّد موقع ملف مورد 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> إلى ملف
مورد في الخادم الوكيل لواجهة برمجة التطبيقات. ولا يمكن أن يشير إلى موارد خارجية عبر 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>، يتم ضبط هذه السياسة تلقائيًا على "message"، ما يشير إلى رسالة الطلب الكاملة (في مسار الطلب) أو رسالة الاستجابة (في مسار الاستجابة)، بما في ذلك أي حمولة. يمكنك أيضًا ضبطها صراحةً على "request" أو "response" للإشارة إلى الطلب أو الاستجابة.
| القيمة التلقائية | طلب |
| هل هو مطلوب؟ | اختياري |
| النوع | سلسلة |
| العنصر الرئيسي |
<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.