خط مشی JSONtoXML

شما در حال مشاهده مستندات 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

نام داخلی سیاست. مقدار مشخصه name می تواند شامل حروف، اعداد، فاصله، خط تیره، زیرخط و نقطه باشد. این مقدار نمی تواند بیش از 255 کاراکتر باشد.

در صورت تمایل، از عنصر <DisplayName> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

N/A مورد نیاز
continueOnError

برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

روی true تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.

نادرست اختیاری
enabled

برای اجرای خط مشی روی true تنظیم کنید.

برای خاموش کردن خط مشی، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.

درست است اختیاری
async

این ویژگی منسوخ شده است.

نادرست منسوخ شده است

عنصر <DisplayName>

علاوه بر ویژگی name برای برچسب‌گذاری خط‌مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.

<DisplayName>Policy Display Name</DisplayName>
پیش فرض

N/A

اگر این عنصر را حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود.

حضور اختیاری
تایپ کنید رشته

عنصر <منبع>

متغیر، درخواست یا پاسخی که حاوی پیام 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>
شیء JSON زیر را تبدیل می‌کند:
{"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 ارسال شده است نامعتبر یا نادرست است.
steps.jsontoxml.InCompatibleTypes 500 این خطا در صورتی رخ می دهد که نوع متغیر تعریف شده در عنصر <Source> و عنصر <OutputVariable> یکسان نباشد. اجباری است که نوع متغیرهای موجود در عنصر <Source> و عنصر <OutputVariable> مطابقت داشته باشد. انواع معتبر message و string هستند.
steps.jsontoxml.InvalidSourceType 500 این خطا در صورتی رخ می دهد که نوع متغیر مورد استفاده برای تعریف عنصر <Source> نامعتبر باشد. انواع معتبر متغیر message و string هستند.
steps.jsontoxml.OutputVariableIsNotAvailable 500 اگر متغیر مشخص شده در عنصر <Source> سیاست JSON به XML از نوع string باشد و عنصر <OutputVariable> تعریف نشده باشد، این خطا رخ می دهد. عنصر <OutputVariable> زمانی اجباری است که متغیر تعریف شده در عنصر <Source> از نوع رشته باشد.
steps.jsontoxml.SourceUnavailable 500 این خطا در صورتی رخ می دهد که متغیر پیام مشخص شده در عنصر <Source> خط مشی JSON به XML یکی از این موارد باشد:
  • خارج از محدوده (در جریان خاصی که سیاست در آن اجرا می شود موجود نیست) یا
  • قابل حل نیست (تعریف نشده است)

خطاهای استقرار

هیچ کدام

متغیرهای خطا

این متغیرها زمانی تنظیم می شوند که یک خطای زمان اجرا رخ دهد. برای اطلاعات بیشتر، به آنچه باید در مورد خطاهای خط مشی بدانید مراجعه کنید.

متغیرها کجا مثال
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>

مباحث مرتبط

،

شما در حال مشاهده مستندات 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

نام داخلی سیاست. مقدار مشخصه name می تواند شامل حروف، اعداد، فاصله، خط تیره، زیرخط و نقطه باشد. این مقدار نمی تواند بیش از 255 کاراکتر باشد.

در صورت تمایل، از عنصر <DisplayName> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

N/A مورد نیاز
continueOnError

برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

روی true تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.

نادرست اختیاری
enabled

برای اجرای خط مشی روی true تنظیم کنید.

برای خاموش کردن خط مشی، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.

درست است اختیاری
async

این ویژگی منسوخ شده است.

نادرست منسوخ شده است

عنصر <DisplayName>

علاوه بر ویژگی name برای برچسب‌گذاری خط‌مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.

<DisplayName>Policy Display Name</DisplayName>
پیش فرض

N/A

اگر این عنصر را حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود.

حضور اختیاری
تایپ کنید رشته

عنصر <منبع>

متغیر، درخواست یا پاسخی که حاوی پیام 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>
شیء JSON زیر را تبدیل می‌کند:
{"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 ارسال شده است نامعتبر یا نادرست است.
steps.jsontoxml.InCompatibleTypes 500 این خطا در صورتی رخ می دهد که نوع متغیر تعریف شده در عنصر <Source> و عنصر <OutputVariable> یکسان نباشد. اجباری است که نوع متغیرهای موجود در عنصر <Source> و عنصر <OutputVariable> مطابقت داشته باشد. انواع معتبر message و string هستند.
steps.jsontoxml.InvalidSourceType 500 این خطا در صورتی رخ می دهد که نوع متغیر مورد استفاده برای تعریف عنصر <Source> نامعتبر باشد. انواع معتبر متغیر message و string هستند.
steps.jsontoxml.OutputVariableIsNotAvailable 500 اگر متغیر مشخص شده در عنصر <Source> سیاست JSON به XML از نوع string باشد و عنصر <OutputVariable> تعریف نشده باشد، این خطا رخ می دهد. عنصر <OutputVariable> زمانی اجباری است که متغیر تعریف شده در عنصر <Source> از نوع رشته باشد.
steps.jsontoxml.SourceUnavailable 500 این خطا در صورتی رخ می دهد که متغیر پیام مشخص شده در عنصر <Source> خط مشی JSON به XML یکی از این موارد باشد:
  • خارج از محدوده (در جریان خاصی که سیاست در آن اجرا می شود موجود نیست) یا
  • قابل حل نیست (تعریف نشده است)

خطاهای استقرار

هیچ کدام

متغیرهای خطا

این متغیرها زمانی تنظیم می شوند که یک خطای زمان اجرا رخ دهد. برای اطلاعات بیشتر، به آنچه باید در مورد خطاهای خط مشی بدانید مراجعه کنید.

متغیرها کجا مثال
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>

مباحث مرتبط