درحال مشاهده اسناد Apigee Edge هستید.
به
اسناد Apigee X بروید. اطلاعات
خطمشی SOAPMessageValidation کارهای زیر را انجام میدهد:
- هر پیام XML را دربرابر طرحوارههای XSD آنها اعتبارسنجی میکند
- پیامهای SOAP را براساس تعریف WSDL اعتبارسنجی میکند
- خوشساخت بودن پیامهای JSON و XML را تعیین میکند
While the name of this policy in the UI is "SOAP Message Validation", the policy validates more than just SOAP messages. این بخش به خطمشی بهعنوان «خطمشی اعتبارسنجی پیام» اشاره میکند.
<MessageValidation> عنصر
خطمشی «اعتبارسنجی پیام» را تعریف میکند.
| مقدار پیشفرض | برگه خطمشی پیشفرض را در زیر ببینید |
| الزامی است؟ | اختیاری |
| تایپ کردن | شیء پیچیده |
| عنصر ولی | نامربوط |
| عناصر فرزند |
<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 | N/A | ضروری | نام داخلی سیاست. مقدار مشخصه در صورت تمایل، از عنصر |
continueOnError | نادرست | اختیاری | برای بازگرداندن خطا در صورت شکست خط مشی، روی "false" تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است. روی "true" تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد. |
enabled | درست است، واقعی | اختیاری | برای اجرای این خطمشی روی «درست» تنظیم کنید. برای «خاموش کردن» خط مشی، روی «نادرست» تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد. |
async | نادرست | منسوخ | این ویژگی منسوخ شده است. |
مثالها
نمونههای زیر برخیاز روشهایی را نشان میدهد که میتوانید از خطمشی «اعتبارسنجی پیام» استفاده کنید:
۱: اعتبارسنجی 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>'
باید خطای اعتبارسنجی دریافت کنید.
۲: اعتبارسنجی SOAP
میتوانید از خطمشی «اعتبارسنجی پیام» برای اعتبارسنجی بار داده درخواست پیام SOAP دربرابر WSDL استفاده کنید.
- فایل منبع WSDL جدیدی ایجاد کنید. برای مثال، «example-wsdl.wsdl»:
- خطمشی «اعتبارسنجی پیام SOAP» را به پیشجریان نقطه پایانی پراکسیتان اضافه کنید:
- مشخصه
versionعنصر<SOAPMessage>را روی نسخهای از پروتکل SOAP که میخواهید دربرابر آن اعتبارسنجی کنید تنظیم کنید. برای مثال، «۱.۱»:... <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" }
۳: 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> برای همه خطمشیها مشترک است.
| مقدار پیشفرض | نامربوط |
| الزامی است؟ | اختیاری. اگر <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> ...
مثال ۱
مثال زیر یک عنصر را برای اعتبارسنجی تعریف میکند:
... <Element namespace="https://example.com/gateway">getID</Element> ...
مثال ۲
با افزودن چند عنصر <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 باید حداقل یک طرحواره تعریف کند. اگر حداقل به یک طرح ارجاع ندهد، خطمشی «اعتبارسنجی پیام» ناموفق میشود.
حداکثر عمق وارد کردن برای طرحواره ۱۰ است. اگر از این تعداد واردات تودرتو فراتر بروید، خطمشی «اعتبارسنجی پیام» ناموفق میشود.
<SOAPMessage>
نسخه SOAP را که خطمشی «اعتبارسنجی پیام» براساس آن اعتبارسنجی میکند تعریف میکند.
| مقدار پیشفرض | نامربوط |
| الزامی است؟ | اختیاری |
| تایپ کردن | نامربوط |
| عنصر ولی |
<MessageValidation>
|
| عناصر فرزند | هیچکدام |
عنصر <SOAPMessage> از نحو زیر استفاده میکند:
نحو
... <SOAPMessage version="[ 1.1 | 1.2 | 1.1/1.2 ]"/> ...
مثال
... <SOAPMessage version="1.1"/> ...
عنصر <SOAPMessage> دارای مشخصههای زیر است:
| مشخصه | پیشفرض | الزامی است؟ | شرح |
|---|---|---|---|
version |
هیچکدام | اختیاری | نسخه SOAP که این خطمشی برای اعتبارسنجی پیامهای SOAP استفاده میکند.
مقادیر معتبر عبارتاند از:
|
برای اطلاعات بیشتر، From SOAP/1.1 to SOAP Version 1.2 in 9 points را ببینید.
<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 |
۵۰۰ |
این خطا زمانی رخ میدهد که متغیری که در عنصر
|
build |
steps.messagevalidation.NonMessageVariable |
۵۰۰ |
این خطا زمانی رخ میدهد که عنصر متغیرهای نوع پیام نشاندهنده کل درخواستها و پاسخهای HTTP هستند. متغیرهای جریان داخلی Edge
|
build |
steps.messagevalidation.Failed |
۵۰۰ | این خطا زمانی رخ میدهد که خطمشی SOAPMessageValidation نتواند پیام ورودی بار را دربرابر طرحواره XSD یا تعریف WSDL اعتبارسنجی کند. همچنین اگر JSON یا XML در پیام دادهبرداری بدشکل باشد، این خطا رخ میدهد. | build |
خطاهای استقرار
این خطاها ممکن است زمانی رخ دهند که یک پراکسی حاوی این خطمشی را مستقر میکنید.
| نام خطا | علت | رفع اشکال |
|---|---|---|
InvalidResourceType |
عنصر <ResourceURL> در خطمشی SOAPMessageValidation روی نوع منبعی تنظیم شده است که خطمشی پشتیبانی نمیکند.
|
build |
ResourceCompileFailed |
نوشتار منبع ارجاعشده در عنصر <ResourceURL> خطمشی SOAPMessageValidation
حاوی خطایی است که مانع از ترجمه آن میشود.
|
build |
RootElementNameUnspecified |
عنصر <Element> در خطمشی SOAPMessageValidation نام عنصر ریشه را ندارد. |
build |
InvalidRootElementName |
عنصر <Element> در خطمشی SOAPMessageValidation حاوی نام عنصر ریشهای است که از قوانین XML برای نامگذاری عنصر معتبر پیروی نمیکند. |
build |
طرحوارهها
هر نوع خطمشی با یک طرحواره XML (.xsd) تعریف میشود. برای مرجع، طرحوارههای خطمشی
در GitHub دردسترس هستند.