شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
چه
این خطمشی پیامها را از قالب نشانهگذاری شیء جاوا اسکریپت (JSON) به زبان نشانهگذاری توسعهپذیر (XML) تبدیل میکند و گزینههای مختلفی برای کنترل نحوه تبدیل پیامها در اختیار شما قرار میدهد.
این سیاست به ویژه در صورتی مفید است که بخواهید پیامها را با استفاده از XSL تبدیل کنید. پس از تبدیل یک فایل JSON به XML، از سیاست XSL Transform به همراه یک style sheet سفارشی برای انجام تبدیل مورد نیاز خود استفاده کنید.
با فرض اینکه هدف تبدیل یک درخواست با فرمت JSON به یک درخواست با فرمت XML باشد، این سیاست به یک جریان درخواست (برای مثال، Request / ProxyEndpoint / PostFlow) پیوست میشود.
نمونهها
برای بحث مفصل در مورد تبدیل بین JSON و XML، به مسئله تبدیل آرایه JSON به آرایه XML در شیء پاسخ مراجعه کنید.
تبدیل یک درخواست
<JSONToXML name="jsontoxml">
<Source>request</Source>
<OutputVariable>request</OutputVariable>
</JSONToXML> این پیکربندی، پیام درخواست با فرمت JSON را به عنوان منبع دریافت میکند و سپس یک پیام با فرمت XML ایجاد میکند که در متغیر خروجی request قرار میگیرد. Edge به طور خودکار از محتوای این متغیر به عنوان پیام برای مرحله بعدی پردازش استفاده میکند.
مرجع عنصر
در ادامه عناصر و ویژگیهایی که میتوانید در این سیاست پیکربندی کنید، آمده است.
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSON-to-XML-1"> <DisplayName>JSON to XML 1</DisplayName> <Source>request</Source> <OutputVariable>request</OutputVariable> <Options> <OmitXmlDeclaration>false</OmitXmlDeclaration> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator> <AttributeBlockName>#attrs</AttributeBlockName> <AttributePrefix>@</AttributePrefix> <ObjectRootElementName>Root</ObjectRootElementName> <ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName> <Indent>false</Indent> <TextNodeName>#text</TextNodeName> <NullValue>I_AM_NULL</NullValue> <InvalidCharsReplacement>_</InvalidCharsReplacement> </Options> </JSONToXML>
ویژگیهای <JSONToXML>
جدول زیر ویژگی هایی را توصیف می کند که برای همه عناصر اصلی خط مشی مشترک هستند:
| صفت | توضیحات | پیش فرض | حضور |
|---|---|---|---|
name | نام داخلی سیاست. مقدار مشخصه در صورت تمایل، از عنصر | N/A | مورد نیاز |
continueOnError | برای بازگرداندن خطا در صورت شکست خط مشی، روی روی | نادرست | اختیاری |
enabled | برای اجرای خط مشی روی برای خاموش کردن خط مشی، روی | درست است | اختیاری |
async | این ویژگی منسوخ شده است. | نادرست | منسوخ شده است |
عنصر <DisplayName>
علاوه بر ویژگی name برای برچسبگذاری خطمشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.
<DisplayName>Policy Display Name</DisplayName>
| پیش فرض | N/A اگر این عنصر را حذف کنید، از مقدار ویژگی |
|---|---|
| حضور | اختیاری |
| تایپ کنید | رشته |
عنصر <منبع>
متغیر، درخواست یا پاسخی که حاوی پیام JSON است که میخواهید به XML تبدیل کنید.
اگر <Source> تعریف نشده باشد، به عنوان پیام در نظر گرفته میشود (که وقتی سیاست به جریان درخواست متصل میشود، به درخواست تبدیل میشود، یا وقتی سیاست به جریان پاسخ متصل میشود، به پاسخ تبدیل میشود).
اگر متغیر منبع قابل حل نباشد، یا به نوعی غیر از پیام حل شود، این خطمشی خطایی ایجاد میکند.
<Source>request</Source>
| پیشفرض | درخواست یا پاسخ، که با توجه به محل اضافه شدن سیاست به جریان پروکسی API تعیین میشود |
| حضور | اختیاری |
| نوع | پیام |
عنصر <متغیر خروجی>
خروجی تبدیل فرمت JSON به XML را ذخیره میکند. این معمولاً همان مقدار منبع است، یعنی معمولاً یک درخواست JSON به یک درخواست XML تبدیل میشود.
محتوای پیام JSON تجزیه و به XML تبدیل میشود و هدر نوع محتوای HTTP پیام با فرمت XML روی text/xml;charset=UTF-8 تنظیم میشود.
اگر OutputVariable مشخص نشده باشد، source به عنوان OutputVariable در نظر گرفته میشود. برای مثال، اگر source request باشد، OutputVariable به طور پیشفرض request را در نظر میگیرد.
<OutputVariable>request</OutputVariable>
| پیشفرض | درخواست یا پاسخ، که با توجه به محل اضافه شدن سیاست به جریان پروکسی API تعیین میشود |
| حضور | این عنصر زمانی اجباری است که متغیر تعریف شده در عنصر <Source> از نوع رشته باشد. |
| نوع | پیام |
<گزینهها>/<اعلانهای OmitXml>
مشخص میکند که فضای نام XML از خروجی حذف شود. مقدار پیشفرض false است، به این معنی که فضای نام در خروجی لحاظ شود.
برای مثال، تنظیمات زیر، سیاست حذف فضای نام را پیکربندی میکند:
<OmitXmlDeclaration>true</OmitXmlDeclaration>
<گزینهها>/<نامفضایبلوک>
<گزینهها>/<نام پیشفرضفضایگرهنام>
عناصر <Options>/<NamespaceSeparator>
JSON از فضاهای نام پشتیبانی نمیکند، در حالی که اسناد XML اغلب به آنها نیاز دارند. NamespaceBlockName شما را قادر میسازد تا یک ویژگی JSON تعریف کنید که به عنوان منبع تعریف فضای نام در XML تولید شده توسط سیاست عمل میکند. (این بدان معناست که JSON منبع باید ویژگیای را ارائه دهد که بتواند در یک فضای نام مورد انتظار توسط برنامهای که XML حاصل را مصرف میکند، نگاشت شود.)
برای مثال، تنظیمات زیر:
<NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator>
نشان میدهد که یک ویژگی به نام #namespaces در JSON منبع وجود دارد که حداقل شامل یک فضای نام است که به عنوان پیشفرض تعیین شده است. برای مثال:
{
"population": {
"#namespaces": {
"$default": "http://www.w3.org/1999/people",
"exp": "http://www.w3.org/1999/explorers"
},
"person": "John Smith",
"exp:person": "Pedro Cabral"
}
}تبدیل میکند به:
<population xmlns="http://www.w3.org/1999/people" xmlns:exp="http://www.w3.org/1999/explorers"> <person>John Smith</person> <exp:person>Pedro Cabral</exp:person> </population>
<گزینهها>/<نام عنصر ریشه شیء>
<ObjectRootElementName> نام عنصر ریشه را هنگام تبدیل از JSON، که عنصر ریشه نامگذاری شدهای ندارد، به XML مشخص میکند.
برای مثال، اگر JSON به صورت زیر نمایش داده شود:
{
"abc": "123",
"efg": "234"
}و <ObjectRootElementName> را به صورت زیر تنظیم میکنید:
<ObjectRootElementName>Root</ObjectRootElementName>
XML حاصل به صورت زیر ظاهر میشود:
<Root> <abc>123</abc> <efg>234</efg> </Root>
<گزینهها>/<نام بلوک ویژگی>
عناصر <Options>/<AttributePrefix>
<AttributeBlockName> شما را قادر میسازد تا مشخص کنید چه زمانی عناصر JSON به ویژگیهای XML تبدیل میشوند (به جای عناصر XML).
برای مثال، تنظیمات زیر ویژگیهای درون یک شیء به نام #attrs را به ویژگیهای XML تبدیل میکند:
<AttributeBlockName>#attrs</AttributeBlockName>
شیء JSON زیر:
{
"person" : {
"#attrs" : {
"firstName" : "John",
"lastName" : "Smith"
},
"occupation" : "explorer",
}
}به ساختار XML زیر تبدیل میشود:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<AttributePrefix> خاصیتی را که با پیشوند مشخص شده شروع میشود، به ویژگیهای XML تبدیل میکند. در جایی که پیشوند ویژگی روی @ تنظیم شده باشد، برای مثال:
<AttributePrefix>@</AttributePrefix>
شیء JSON زیر را تبدیل میکند:
{ "person" : { "@firstName" : "John", "@lastName" : "Smith" "occupation" : "explorer", } }
به ساختار XML زیر:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<گزینهها>/<نام عنصر آرایه>
عنصر <Options>/<ArrayItemElementName>
یک آرایه JSON را به لیستی از عناصر XML با نامهای مشخص شده برای عناصر والد و فرزند تبدیل میکند.
برای مثال، تنظیمات زیر:
<ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName>
آرایه JSON زیر را تبدیل میکند:
[
"John Cabot",
{
"explorer": "Pedro Cabral"
},
"John Smith"
]به ساختار XML زیر تبدیل کنید:
<Array>
<Item>John Cabot</Item>
<Item>
<explorer>Pedro Cabral</explorer>
</Item>
<Item>John Smith</Item>
</Array><گزینهها>/<تورفتگی>
مشخص میکند که خروجی XML تورفتگی داشته باشد. مقدار پیشفرض false است، به این معنی که تورفتگی ایجاد نکنید.
برای مثال، تنظیمات زیر، سیاست ایجاد تورفتگی در خروجی را پیکربندی میکند:
<Indent>true</Indent>
اگر ورودی JSON به شکل زیر باشد:
{"n": [1, 2, 3] }سپس خروجی بدون تورفتگی به صورت زیر خواهد بود:
<Array><n>1</n><n>2</n><n>3</n></Array>
با فعال بودن قابلیت تورفتگی، خروجی به صورت زیر خواهد بود:
<Array>
<n>1</n>
<n>2</n>
<n>3</n>
</Array>عنصر <Options>/<TextNodeName>
یک ویژگی JSON را به یک گره متنی XML با نام مشخص شده تبدیل میکند. برای مثال، تنظیمات زیر:
<TextNodeName>age</TextNodeName>
این JSON را تبدیل میکند:
{
"person": {
"firstName": "John",
"lastName": "Smith",
"age": 25
}
}به این ساختار XML:
<person> <firstName>John</firstName>25<lastName>Smith</lastName> </person>
اگر TextNodeName مشخص نشده باشد، XML با استفاده از تنظیمات پیشفرض برای یک گره متنی تولید میشود:
<person> <firstName>John</firstName> <age>25</age> <lastName>Smith</lastName> </person>
عنصر <Options>/<NullValue>
مقدار تهی (null) را نشان میدهد. به طور پیشفرض، مقدار NULL است.
برای مثال تنظیم زیر:
<NullValue>I_AM_NULL</NullValue>
{"person" : "I_AM_NULL"}به عنصر XML زیر:
<person></person>
در جایی که هیچ مقداری (یا مقداری غیر از I_AM_NULL ) برای مقدار Null مشخص نشده باشد، همان payload به صورت زیر تبدیل میشود:
<person>I_AM_NULL</person>
عنصر <Options>/<InvalidCharsReplacement>
برای کمک به مدیریت XML نامعتبر که ممکن است باعث ایجاد مشکل در تجزیهکننده شود، این تنظیم هر عنصر JSON که XML نامعتبر تولید میکند را با رشته جایگزین میکند. به عنوان مثال، تنظیم زیر:
<InvalidCharsReplacement>_</InvalidCharsReplacement>
این شیء JSON را تبدیل میکند.
{
"First%%%Name": "John"
}به این ساختار XML:
<First_Name>John<First_Name>
یادداشتهای استفاده
در یک سناریوی میانجیگری معمول، یک سیاست JSON به XML در جریان درخواست ورودی اغلب با یک سیاست XMLtoJSON در جریان پاسخ خروجی جفت میشود. با ترکیب سیاستها به این روش، یک API JSON میتواند برای سرویسهایی که به صورت بومی فقط از XML پشتیبانی میکنند، در دسترس قرار گیرد.
اغلب مفید است که JSON پیشفرض (خالی) را روی سیاست XML اعمال کنید و عناصر پیکربندی را به صورت تکراری در صورت نیاز اضافه کنید.
برای سناریوهایی که APIها توسط برنامههای کلاینت متنوعی مصرف میشوند که ممکن است به JSON و XML نیاز داشته باشند، میتوان با پیکربندی سیاستهای JSON به XML و XML به JSON برای اجرای مشروط، قالب پاسخ را به صورت پویا تنظیم کرد. برای پیادهسازی این سناریو، به متغیرها و شرایط جریان مراجعه کنید.
طرحوارهها
مرجع خطا
این بخش کدهای خطا و پیامهای خطایی را که برگردانده میشوند و متغیرهای خطا را که توسط Edge تنظیم میشوند، هنگامی که این خطمشی خطا را راهاندازی میکند، توضیح میدهد. این اطلاعات برای دانستن اینکه آیا در حال توسعه قوانین خطا برای رسیدگی به خطاها هستید، مهم است. برای کسب اطلاعات بیشتر، آنچه را که باید در مورد خطاهای خط مشی و مدیریت خطاها بدانید را ببینید.
خطاهای زمان اجرا
این خطاها ممکن است هنگام اجرای سیاست رخ دهند.
| کد خطا | وضعیت HTTP | علت | رفع کنید |
|---|---|---|---|
steps.jsontoxml.ExecutionFailed | 500 | بار ورودی (JSON) خالی است یا ورودی (JSON) که به خط مشی JSON به XML ارسال شده است نامعتبر یا نادرست است. | build |
steps.jsontoxml.InCompatibleTypes | 500 | این خطا در صورتی رخ می دهد که نوع متغیر تعریف شده در عنصر <Source> و عنصر <OutputVariable> یکسان نباشد. اجباری است که نوع متغیرهای موجود در عنصر <Source> و عنصر <OutputVariable> مطابقت داشته باشد. انواع معتبر message و string هستند. | build |
steps.jsontoxml.InvalidSourceType | 500 | این خطا در صورتی رخ می دهد که نوع متغیر مورد استفاده برای تعریف عنصر <Source> نامعتبر باشد. انواع معتبر متغیر message و string هستند. | build |
steps.jsontoxml.OutputVariableIsNotAvailable | 500 | اگر متغیر مشخص شده در عنصر <Source> سیاست JSON به XML از نوع string باشد و عنصر <OutputVariable> تعریف نشده باشد، این خطا رخ می دهد. عنصر <OutputVariable> زمانی اجباری است که متغیر تعریف شده در عنصر <Source> از نوع رشته باشد. | build |
steps.jsontoxml.SourceUnavailable | 500 | این خطا در صورتی رخ می دهد که متغیر پیام مشخص شده در عنصر <Source> خط مشی JSON به XML یکی از این موارد باشد:
| build |
خطاهای استقرار
هیچ کدام
متغیرهای خطا
این متغیرها زمانی تنظیم می شوند که یک خطای زمان اجرا رخ دهد. برای اطلاعات بیشتر، به آنچه باید در مورد خطاهای خط مشی بدانید مراجعه کنید.
| متغیرها | کجا | مثال |
|---|---|---|
fault.name=" fault_name " | fault_name نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. | fault.name Matches "SourceUnavailable" |
jsontoxml. policy_name .failed | policy_name نام سیاستی است که توسط کاربر مشخص شده است که خطا را ایجاد کرده است. | jsontoxml.JSON-to-XML-1.failed = true |
نمونه پاسخ خطا
{
"fault": {
"faultstring": "JSONToXML[JSON-to-XML-1]: Source xyz is not available",
"detail": {
"errorcode": "steps.json2xml.SourceUnavailable"
}
}
}مثال قانون خطا
<FaultRule name="JSON To XML Faults">
<Step>
<Name>AM-SourceUnavailableMessage</Name>
<Condition>(fault.name Matches "SourceUnavailable") </Condition>
</Step>
<Step>
<Name>AM-BadJSON</Name>
<Condition>(fault.name = "ExecutionFailed")</Condition>
</Step>
<Condition>(jsontoxml.JSON-to-XML-1.failed = true) </Condition>
</FaultRule>مباحث مرتبط
- تبدیل XML به JSON: سیاست XML به JSON
- تبدیل XSL: سیاست تبدیل XSL
شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
چه
این خطمشی پیامها را از قالب نشانهگذاری شیء جاوا اسکریپت (JSON) به زبان نشانهگذاری توسعهپذیر (XML) تبدیل میکند و گزینههای مختلفی برای کنترل نحوه تبدیل پیامها در اختیار شما قرار میدهد.
این سیاست به ویژه در صورتی مفید است که بخواهید پیامها را با استفاده از XSL تبدیل کنید. پس از تبدیل یک فایل JSON به XML، از سیاست XSL Transform به همراه یک style sheet سفارشی برای انجام تبدیل مورد نیاز خود استفاده کنید.
با فرض اینکه هدف تبدیل یک درخواست با فرمت JSON به یک درخواست با فرمت XML باشد، این سیاست به یک جریان درخواست (برای مثال، Request / ProxyEndpoint / PostFlow) پیوست میشود.
نمونهها
برای بحث مفصل در مورد تبدیل بین JSON و XML، به مسئله تبدیل آرایه JSON به آرایه XML در شیء پاسخ مراجعه کنید.
تبدیل یک درخواست
<JSONToXML name="jsontoxml">
<Source>request</Source>
<OutputVariable>request</OutputVariable>
</JSONToXML> این پیکربندی، پیام درخواست با فرمت JSON را به عنوان منبع دریافت میکند و سپس یک پیام با فرمت XML ایجاد میکند که در متغیر خروجی request قرار میگیرد. Edge به طور خودکار از محتوای این متغیر به عنوان پیام برای مرحله بعدی پردازش استفاده میکند.
مرجع عنصر
در ادامه عناصر و ویژگیهایی که میتوانید در این سیاست پیکربندی کنید، آمده است.
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSON-to-XML-1"> <DisplayName>JSON to XML 1</DisplayName> <Source>request</Source> <OutputVariable>request</OutputVariable> <Options> <OmitXmlDeclaration>false</OmitXmlDeclaration> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator> <AttributeBlockName>#attrs</AttributeBlockName> <AttributePrefix>@</AttributePrefix> <ObjectRootElementName>Root</ObjectRootElementName> <ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName> <Indent>false</Indent> <TextNodeName>#text</TextNodeName> <NullValue>I_AM_NULL</NullValue> <InvalidCharsReplacement>_</InvalidCharsReplacement> </Options> </JSONToXML>
ویژگیهای <JSONToXML>
جدول زیر ویژگی هایی را توصیف می کند که برای همه عناصر اصلی خط مشی مشترک هستند:
| صفت | توضیحات | پیش فرض | حضور |
|---|---|---|---|
name | نام داخلی سیاست. مقدار مشخصه در صورت تمایل، از عنصر | N/A | مورد نیاز |
continueOnError | برای بازگرداندن خطا در صورت شکست خط مشی، روی روی | نادرست | اختیاری |
enabled | برای اجرای خط مشی روی برای خاموش کردن خط مشی، روی | درست است | اختیاری |
async | این ویژگی منسوخ شده است. | نادرست | منسوخ شده است |
عنصر <DisplayName>
علاوه بر ویژگی name برای برچسبگذاری خطمشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.
<DisplayName>Policy Display Name</DisplayName>
| پیش فرض | N/A اگر این عنصر را حذف کنید، از مقدار ویژگی |
|---|---|
| حضور | اختیاری |
| تایپ کنید | رشته |
عنصر <منبع>
متغیر، درخواست یا پاسخی که حاوی پیام JSON است که میخواهید به XML تبدیل کنید.
اگر <Source> تعریف نشده باشد، به عنوان پیام در نظر گرفته میشود (که وقتی سیاست به جریان درخواست متصل میشود، به درخواست تبدیل میشود، یا وقتی سیاست به جریان پاسخ متصل میشود، به پاسخ تبدیل میشود).
اگر متغیر منبع قابل حل نباشد، یا به نوعی غیر از پیام حل شود، این خطمشی خطایی ایجاد میکند.
<Source>request</Source>
| پیشفرض | درخواست یا پاسخ، که با توجه به محل اضافه شدن سیاست به جریان پروکسی API تعیین میشود |
| حضور | اختیاری |
| نوع | پیام |
عنصر <متغیر خروجی>
خروجی تبدیل فرمت JSON به XML را ذخیره میکند. این معمولاً همان مقدار منبع است، یعنی معمولاً یک درخواست JSON به یک درخواست XML تبدیل میشود.
محتوای پیام JSON تجزیه و به XML تبدیل میشود و هدر نوع محتوای HTTP پیام با فرمت XML روی text/xml;charset=UTF-8 تنظیم میشود.
اگر OutputVariable مشخص نشده باشد، source به عنوان OutputVariable در نظر گرفته میشود. برای مثال، اگر source request باشد، OutputVariable به طور پیشفرض request را در نظر میگیرد.
<OutputVariable>request</OutputVariable>
| پیشفرض | درخواست یا پاسخ، که با توجه به محل اضافه شدن سیاست به جریان پروکسی API تعیین میشود |
| حضور | این عنصر زمانی اجباری است که متغیر تعریف شده در عنصر <Source> از نوع رشته باشد. |
| نوع | پیام |
<گزینهها>/<اعلانهای OmitXml>
مشخص میکند که فضای نام XML از خروجی حذف شود. مقدار پیشفرض false است، به این معنی که فضای نام در خروجی لحاظ شود.
برای مثال، تنظیمات زیر، سیاست حذف فضای نام را پیکربندی میکند:
<OmitXmlDeclaration>true</OmitXmlDeclaration>
<گزینهها>/<نامفضایبلوک>
<گزینهها>/<نام پیشفرضفضایگرهنام>
عناصر <Options>/<NamespaceSeparator>
JSON از فضاهای نام پشتیبانی نمیکند، در حالی که اسناد XML اغلب به آنها نیاز دارند. NamespaceBlockName شما را قادر میسازد تا یک ویژگی JSON تعریف کنید که به عنوان منبع تعریف فضای نام در XML تولید شده توسط سیاست عمل میکند. (این بدان معناست که JSON منبع باید ویژگیای را ارائه دهد که بتواند در یک فضای نام مورد انتظار توسط برنامهای که XML حاصل را مصرف میکند، نگاشت شود.)
برای مثال، تنظیمات زیر:
<NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator>
نشان میدهد که یک ویژگی به نام #namespaces در JSON منبع وجود دارد که حداقل شامل یک فضای نام است که به عنوان پیشفرض تعیین شده است. برای مثال:
{
"population": {
"#namespaces": {
"$default": "http://www.w3.org/1999/people",
"exp": "http://www.w3.org/1999/explorers"
},
"person": "John Smith",
"exp:person": "Pedro Cabral"
}
}تبدیل میکند به:
<population xmlns="http://www.w3.org/1999/people" xmlns:exp="http://www.w3.org/1999/explorers"> <person>John Smith</person> <exp:person>Pedro Cabral</exp:person> </population>
<گزینهها>/<نام عنصر ریشه شیء>
<ObjectRootElementName> نام عنصر ریشه را هنگام تبدیل از JSON، که عنصر ریشه نامگذاری شدهای ندارد، به XML مشخص میکند.
برای مثال، اگر JSON به صورت زیر نمایش داده شود:
{
"abc": "123",
"efg": "234"
}و <ObjectRootElementName> را به صورت زیر تنظیم میکنید:
<ObjectRootElementName>Root</ObjectRootElementName>
XML حاصل به صورت زیر ظاهر میشود:
<Root> <abc>123</abc> <efg>234</efg> </Root>
<گزینهها>/<نام بلوک ویژگی>
عناصر <Options>/<AttributePrefix>
<AttributeBlockName> شما را قادر میسازد تا مشخص کنید چه زمانی عناصر JSON به ویژگیهای XML تبدیل میشوند (به جای عناصر XML).
برای مثال، تنظیمات زیر ویژگیهای درون یک شیء به نام #attrs را به ویژگیهای XML تبدیل میکند:
<AttributeBlockName>#attrs</AttributeBlockName>
شیء JSON زیر:
{
"person" : {
"#attrs" : {
"firstName" : "John",
"lastName" : "Smith"
},
"occupation" : "explorer",
}
}به ساختار XML زیر تبدیل میشود:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<AttributePrefix> خاصیتی را که با پیشوند مشخص شده شروع میشود، به ویژگیهای XML تبدیل میکند. در جایی که پیشوند ویژگی روی @ تنظیم شده باشد، برای مثال:
<AttributePrefix>@</AttributePrefix>
شیء JSON زیر را تبدیل میکند:
{ "person" : { "@firstName" : "John", "@lastName" : "Smith" "occupation" : "explorer", } }
به ساختار XML زیر:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<گزینهها>/<نام عنصر آرایه>
عنصر <Options>/<ArrayItemElementName>
یک آرایه JSON را به لیستی از عناصر XML با نامهای مشخص شده برای عناصر والد و فرزند تبدیل میکند.
برای مثال، تنظیمات زیر:
<ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName>
آرایه JSON زیر را تبدیل میکند:
[
"John Cabot",
{
"explorer": "Pedro Cabral"
},
"John Smith"
]به ساختار XML زیر تبدیل کنید:
<Array>
<Item>John Cabot</Item>
<Item>
<explorer>Pedro Cabral</explorer>
</Item>
<Item>John Smith</Item>
</Array><گزینهها>/<تورفتگی>
مشخص میکند که خروجی XML تورفتگی داشته باشد. مقدار پیشفرض false است، به این معنی که تورفتگی ایجاد نکنید.
برای مثال، تنظیمات زیر، سیاست ایجاد تورفتگی در خروجی را پیکربندی میکند:
<Indent>true</Indent>
اگر ورودی JSON به شکل زیر باشد:
{"n": [1, 2, 3] }سپس خروجی بدون تورفتگی به صورت زیر خواهد بود:
<Array><n>1</n><n>2</n><n>3</n></Array>
با فعال بودن قابلیت تورفتگی، خروجی به صورت زیر خواهد بود:
<Array>
<n>1</n>
<n>2</n>
<n>3</n>
</Array>عنصر <Options>/<TextNodeName>
یک ویژگی JSON را به یک گره متنی XML با نام مشخص شده تبدیل میکند. برای مثال، تنظیمات زیر:
<TextNodeName>age</TextNodeName>
این JSON را تبدیل میکند:
{
"person": {
"firstName": "John",
"lastName": "Smith",
"age": 25
}
}به این ساختار XML:
<person> <firstName>John</firstName>25<lastName>Smith</lastName> </person>
اگر TextNodeName مشخص نشده باشد، XML با استفاده از تنظیمات پیشفرض برای یک گره متنی تولید میشود:
<person> <firstName>John</firstName> <age>25</age> <lastName>Smith</lastName> </person>
عنصر <Options>/<NullValue>
مقدار تهی (null) را نشان میدهد. به طور پیشفرض، مقدار NULL است.
برای مثال تنظیم زیر:
<NullValue>I_AM_NULL</NullValue>
{"person" : "I_AM_NULL"}به عنصر XML زیر:
<person></person>
در جایی که هیچ مقداری (یا مقداری غیر از I_AM_NULL ) برای مقدار Null مشخص نشده باشد، همان payload به صورت زیر تبدیل میشود:
<person>I_AM_NULL</person>
عنصر <Options>/<InvalidCharsReplacement>
برای کمک به مدیریت XML نامعتبر که ممکن است باعث ایجاد مشکل در تجزیهکننده شود، این تنظیم هر عنصر JSON که XML نامعتبر تولید میکند را با رشته جایگزین میکند. به عنوان مثال، تنظیم زیر:
<InvalidCharsReplacement>_</InvalidCharsReplacement>
این شیء JSON را تبدیل میکند.
{
"First%%%Name": "John"
}به این ساختار XML:
<First_Name>John<First_Name>
یادداشتهای استفاده
در یک سناریوی میانجیگری معمول، یک سیاست JSON به XML در جریان درخواست ورودی اغلب با یک سیاست XMLtoJSON در جریان پاسخ خروجی جفت میشود. با ترکیب سیاستها به این روش، یک API JSON میتواند برای سرویسهایی که به صورت بومی فقط از XML پشتیبانی میکنند، در دسترس قرار گیرد.
اغلب مفید است که JSON پیشفرض (خالی) را روی سیاست XML اعمال کنید و عناصر پیکربندی را به صورت تکراری در صورت نیاز اضافه کنید.
برای سناریوهایی که APIها توسط برنامههای کلاینت متنوعی مصرف میشوند که ممکن است به JSON و XML نیاز داشته باشند، میتوان با پیکربندی سیاستهای JSON به XML و XML به JSON برای اجرای مشروط، قالب پاسخ را به صورت پویا تنظیم کرد. برای پیادهسازی این سناریو، به متغیرها و شرایط جریان مراجعه کنید.
طرحوارهها
مرجع خطا
این بخش کدهای خطا و پیامهای خطایی را که برگردانده میشوند و متغیرهای خطا را که توسط Edge تنظیم میشوند، هنگامی که این خطمشی خطا را راهاندازی میکند، توضیح میدهد. این اطلاعات برای دانستن اینکه آیا در حال توسعه قوانین خطا برای رسیدگی به خطاها هستید، مهم است. برای کسب اطلاعات بیشتر، آنچه را که باید در مورد خطاهای خط مشی و مدیریت خطاها بدانید را ببینید.
خطاهای زمان اجرا
این خطاها ممکن است هنگام اجرای سیاست رخ دهند.
| کد خطا | وضعیت HTTP | علت | رفع کنید |
|---|---|---|---|
steps.jsontoxml.ExecutionFailed | 500 | بار ورودی (JSON) خالی است یا ورودی (JSON) که به خط مشی JSON به XML ارسال شده است نامعتبر یا نادرست است. | build |
steps.jsontoxml.InCompatibleTypes | 500 | این خطا در صورتی رخ می دهد که نوع متغیر تعریف شده در عنصر <Source> و عنصر <OutputVariable> یکسان نباشد. اجباری است که نوع متغیرهای موجود در عنصر <Source> و عنصر <OutputVariable> مطابقت داشته باشد. انواع معتبر message و string هستند. | build |
steps.jsontoxml.InvalidSourceType | 500 | این خطا در صورتی رخ می دهد که نوع متغیر مورد استفاده برای تعریف عنصر <Source> نامعتبر باشد. انواع معتبر متغیر message و string هستند. | build |
steps.jsontoxml.OutputVariableIsNotAvailable | 500 | اگر متغیر مشخص شده در عنصر <Source> سیاست JSON به XML از نوع string باشد و عنصر <OutputVariable> تعریف نشده باشد، این خطا رخ می دهد. عنصر <OutputVariable> زمانی اجباری است که متغیر تعریف شده در عنصر <Source> از نوع رشته باشد. | build |
steps.jsontoxml.SourceUnavailable | 500 | این خطا در صورتی رخ می دهد که متغیر پیام مشخص شده در عنصر <Source> خط مشی JSON به XML یکی از این موارد باشد:
| build |
خطاهای استقرار
هیچ کدام
متغیرهای خطا
این متغیرها زمانی تنظیم می شوند که یک خطای زمان اجرا رخ دهد. برای اطلاعات بیشتر، به آنچه باید در مورد خطاهای خط مشی بدانید مراجعه کنید.
| متغیرها | کجا | مثال |
|---|---|---|
fault.name=" fault_name " | fault_name نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. | fault.name Matches "SourceUnavailable" |
jsontoxml. policy_name .failed | policy_name نام سیاستی است که توسط کاربر مشخص شده است که خطا را ایجاد کرده است. | jsontoxml.JSON-to-XML-1.failed = true |
نمونه پاسخ خطا
{
"fault": {
"faultstring": "JSONToXML[JSON-to-XML-1]: Source xyz is not available",
"detail": {
"errorcode": "steps.json2xml.SourceUnavailable"
}
}
}مثال قانون خطا
<FaultRule name="JSON To XML Faults">
<Step>
<Name>AM-SourceUnavailableMessage</Name>
<Condition>(fault.name Matches "SourceUnavailable") </Condition>
</Step>
<Step>
<Name>AM-BadJSON</Name>
<Condition>(fault.name = "ExecutionFailed")</Condition>
</Step>
<Condition>(jsontoxml.JSON-to-XML-1.failed = true) </Condition>
</FaultRule>مباحث مرتبط
- تبدیل XML به JSON: سیاست XML به JSON
- تبدیل XSL: سیاست تبدیل XSL