خط مشی JSONtoXML

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

چی

این خط‌مشی پیام‌ها را از فرمت نشانه‌گذاری شی جاوا اسکریپت (JSON) به زبان نشانه‌گذاری قابل توسعه (XML) تبدیل می‌کند و چندین گزینه برای کنترل نحوه تبدیل پیام‌ها در اختیار شما قرار می‌دهد.

این خط مشی مخصوصاً در صورتی مفید است که می خواهید پیام ها را با استفاده از XSL تغییر دهید. پس از تبدیل یک بار JSON به XML، از خط مشی XSL Transform با یک شیوه نامه سفارشی برای انجام تبدیل مورد نیاز خود استفاده کنید.

با فرض اینکه هدف تبدیل یک درخواست با فرمت JSON به یک درخواست با فرمت XML است، این خط مشی به یک جریان درخواست پیوست می شود (به عنوان مثال، Request / ProxyEndpoint / PostFlow).

نمونه ها

برای بحث مفصل در مورد تبدیل بین JSON و XML، به http://community.apigee.com/articles/1839/converting-between-xml-and-json-what-you-need-to-k.html مراجعه کنید.

تبدیل یک درخواست

<JSONToXML name="jsontoxml">
    <Source>request</Source>
    <OutputVariable>request</OutputVariable>
</JSONToXML>

این پیکربندی پیام درخواست با فرمت JSON را به عنوان منبع می گیرد و سپس یک پیام با قالب XML ایجاد می کند که در request OutputVariable پر می شود. 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 اضافه می شود تعیین می شود
حضور اختیاری
تایپ کنید پیام

عنصر <OutputVariable>

خروجی تبدیل فرمت 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> از نوع رشته باشد.
تایپ کنید پیام

<Options>/<OmitXmlDeclaration>

مشخص می کند که فضای نام XML از خروجی حذف شود. مقدار پیش فرض false است به این معنی که فضای نام را در خروجی قرار دهید.

به عنوان مثال، تنظیم زیر خط مشی را برای حذف فضای نام پیکربندی می کند:

<OmitXmlDeclaration>true</OmitXmlDeclaration>

<Options>/<NamespaceBlockName>
<Options>/<DefaultNamespaceNodeName>
عناصر <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>

<Options>/<ObjectRootElementName>

<ObjectRootElementName> نام عنصر ریشه را هنگام تبدیل از JSON که عنصر ریشه نامگذاری ندارد به XML مشخص می کند.

برای مثال، اگر JSON به صورت زیر ظاهر شود:

{
  "abc": "123",
  "efg": "234"
}

و <ObjectRootElementName> را به عنوان:

<ObjectRootElementName>Root</ObjectRootElementName>

XML حاصل به صورت زیر ظاهر می شود:

<Root>
   <abc>123</abc>
   <efg>234</efg>
</Root>

<Options>/<AttributeBlockName>
عناصر <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>/<ArrayRootElementName>
عنصر <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>

<Options>/<Indent>

تورفتگی خروجی 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 است.

به عنوان مثال تنظیمات زیر:

<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 در جریان پاسخ خروجی جفت می شود. با ترکیب خط‌مشی‌ها از این طریق، یک JSON API می‌تواند برای سرویس‌هایی که به صورت بومی فقط از 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>

موضوعات مرتبط