سياسة JSONtoXML

أنت تعرض مستندات Apigee Edge.
انتقل إلى مستندات Apigee X.
معلومات

المزايا

تؤدي هذه السياسة إلى تحويل الرسائل من تنسيق JavaScript Object Notation (JSON) إلى تنسيق قابل للامتداد. لغة ترميزية (XML)، مما يمنحك العديد من الخيارات للتحكم في كيفية تحويل الرسائل.

وهذه السياسة مفيدة بشكل خاص إذا كنت تريد تحويل الرسائل باستخدام XSL. بعد تقوم بتحويل حمولة JSON إلى XML، واستخدام سياسة XSL Transform مع ورقة أنماط مخصصة لإجراء التحويل الذي تحتاجه.

وبافتراض أن الغرض من ذلك هو تحويل طلب بتنسيق JSON إلى طلب بتنسيق XML، سيتم إرفاق السياسة بمسار الطلب (مثل الطلب / 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 تتمّ تعبئتها في OutputVariable request الحافة تلقائيًا محتوى هذا المتغير كرسالة لخطوة المعالجة التالية.


مرجع العنصر

في ما يلي العناصر والسمات التي يمكنك ضبطها في هذه السياسة.

<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>

&lt;JSONToXML&gt; السمات

يصف الجدول التالي السمات المشتركة بين جميع العناصر الرئيسية للسياسة:

السمة الوصف تلقائي التواجد في المنزل
name

الاسم الداخلي للسياسة. يمكن لقيمة السمة name أن تحتوي على أحرف وأرقام ومسافات وواصلات وشرطات سفلية ونقاط. لا يمكن لهذه القيمة يتجاوز 255 حرفًا.

يمكنك، إذا أردت، استخدام العنصر <DisplayName> لتصنيف السياسة محرر الخادم الوكيل لواجهة مستخدم الإدارة باسم مختلف بلغة طبيعية.

لا ينطبق مطلوب
continueOnError

اضبط القيمة على false لعرض رسالة خطأ عند تعذُّر تنفيذ سياسة. هذا متوقّع السلوك في معظم السياسات.

يمكنك ضبط القيمة على true لمواصلة تنفيذ المسار حتى بعد تطبيق إحدى السياسات. فشل.

خطأ اختياري
enabled

اضبط القيمة على true لفرض السياسة.

اضبط القيمة على false من أجل إيقاف السياسة. لن تكون السياسة ويتم فرضها حتى لو ظلت مرتبطة بتدفق.

صحيح اختياري
async

تم إيقاف هذه السمة نهائيًا.

خطأ منهي العمل به

&lt;DisplayName&gt; عنصر

استخدِمه مع السمة name لتصنيف السياسة في إدارة خادم وكيل لواجهة المستخدم باسم مختلف بلغة طبيعية.

<DisplayName>Policy Display Name</DisplayName>
تلقائي

لا ينطبق

إذا لم تستخدم هذا العنصر، سيتم ضبط قيمة السمة name للسياسة على النحو التالي: استخدام البيانات المختلفة.

التواجد في المنزل اختياري
النوع سلسلة

&lt;Source&gt; عنصر

المتغيّر أو الطلب أو الاستجابة، الذي يحتوي على رسالة JSON التي تريد التحويل إليها XML.

إذا لم يتم تحديد <Source>، سيتم التعامل مع الرسالة كرسالة (يتم حلّها من خلال الرسالة) لطلب الموافقة عندما تكون السياسة مرتبطة بمسار الطلب أو الرد عند إرفاق السياسة إلى تدفق الاستجابة).

إذا تعذَّر حلّ متغيّر المصدر أو إلى نوع آخر ليس رسالة، سيتم تطبيق السياسة إلى حدوث خطأ.

<Source>request</Source>
تلقائي الطلب أو الاستجابة، يتم تحديدهما من خلال إضافة السياسة إلى مسار الخادم الوكيل لواجهة برمجة التطبيقات
الحضور اختياري
النوع رسالة

&lt;OutputVariable&gt; عنصر

تخزين مخرجات تحويل تنسيق JSON إلى XML عادةً ما تكون هذه هي نفس قيمة المصدر، والذي يعني عادةً تحويل طلب JSON إلى طلب XML.

يتم تحليل حمولة رسالة JSON وتحويلها إلى XML ونوع محتوى HTTP تم ضبط عنوان الرسالة بتنسيق XML على text/xml;charset=UTF-8.

إذا لم يتم تحديد OutputVariable، يتم التعامل مع source على أنّه OutputVariable على سبيل المثال، إذا كانت قيمة السمة source هي request، ثم يتم ضبط OutputVariable تلقائيًا على request.

<OutputVariable>request</OutputVariable>
تلقائي الطلب أو الاستجابة، يتم تحديدهما من خلال إضافة السياسة إلى مسار الخادم الوكيل لواجهة برمجة التطبيقات
الحضور يكون هذا العنصر إلزاميًا عندما يكون المتغيّر المحدّد في العنصر <Source> من النوع سلسلة.
النوع رسالة

&lt;Options&gt;/&lt;OmitXmlDeclaration&gt;

يتم تحديده لحذف مساحة اسم XML من النتائج. القيمة التلقائية هي false. مما يعني تضمين مساحة الاسم في الإخراج.

على سبيل المثال، يضبط الإعداد التالي السياسة على حذف مساحة الاسم:

<OmitXmlDeclaration>true</OmitXmlDeclaration>

&lt;Options&gt;/&lt;NamespaceBlockName&gt;
&lt;Options&gt;/&lt;DefaultNamespaceNodeName&gt;
&lt;Options&gt;/&lt;NamespaceSeparator&gt; العناصر

لا يدعم 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>

&lt;Options&gt;/&lt;ObjectRootElementName&gt;

&lt;ObjectRootElementName&gt; تحدّد اسم العنصر الجذر عند التحويل من JSON، الذي لا يحتوي على جذر مُسمّى. إلى XML.

على سبيل المثال، في حال ظهور ملف JSON على النحو التالي:

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

وتضبط &lt;ObjectRootElementName&gt; على:

<ObjectRootElementName>Root</ObjectRootElementName>

يظهر ملف XML الناتج على النحو التالي:

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

&lt;Options&gt;/&lt;AttributeBlockName&gt;
&lt;Options&gt;/&lt;AttributePrefix&gt; العناصر

يتيح لك <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>

&lt;Options&gt;/&lt;ArrayRootElementName&gt;
&lt;Options&gt;/&lt;ArrayItemElementName&gt; عنصر

لتحويل صفيفة 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>

&lt;Options&gt;/&lt;Indent&gt;

يُحدد لوضع مسافة بادئة لإخراج 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>

&lt;Options&gt;/&lt;TextNodeName&gt; عنصر

تحوِّل سمة 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>

&lt;Options&gt;/&lt;NullValue&gt; عنصر

يشير إلى قيمة فارغة. والقيمة التلقائية هي NULL.

على سبيل المثال، الإعداد التالي:

<NullValue>I_AM_NULL</NullValue>
تحوّل كائن JSON التالي:
{"person" : "I_AM_NULL"}

إلى عنصر XML التالي:

<person></person>

في حال عدم تحديد قيمة (أو قيمة أخرى غير I_AM_NULL) للقيمة "Null" (فارغ)، عندئذٍ يتم تحويل الحمولة نفسها إلى:

<person>I_AM_NULL</person>

&lt;Options&gt;/&lt;InvalidCharsReplacement&gt; عنصر

للمساعدة في التعامل مع XML غير الصالح الذي قد يتسبب في حدوث مشاكل مع المحلل اللغوي، يتم استبدال هذا الإعداد أي عناصر JSON ينتج عنها XML غير صالح مع السلسلة. على سبيل المثال، ما يلي الإعداد:

<InvalidCharsReplacement>_</InvalidCharsReplacement>

يحوِّل كائن JSON هذا

{
    "First%%%Name": "John"
}

على بنية XML التالية:

<First_Name>John<First_Name>

ملاحظات الاستخدام

في سيناريو التوسط النموذجي، غالبًا ما يتم استخدام سياسة JSON إلى XML في مسار الطلب الوارد مع سياسة XMLtoJSON في مسار الاستجابة الصادرة. ومن خلال الجمع بين السياسات بهذه الطريقة، يمكن عرض واجهة برمجة التطبيقات JSON للخدمات التي تتوافق في الأصل مع XML فقط.

وغالبًا ما يكون من المفيد تطبيق تنسيق JSON التلقائي (الفارغ) على سياسة XML وإضافة محتوى عناصر التهيئة كما هو مطلوب.

للسيناريوهات التي تستهلك فيها تطبيقات العملاء المتنوعة واجهات برمجة التطبيقات، والتي قد تتطلب إما JSON وXML، يمكن تعيين تنسيق الاستجابة ديناميكيًا من خلال تهيئة JSON إلى XML وXML يجب تنفيذ سياسات JSON بشكل مشروط. يُرجى الاطّلاع على متغيّرات التدفق وشروطه لتنفيذ هذا السيناريو.

المخططات

مرجع الخطأ

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.jsontoxml.ExecutionFailed 500 The input payload (JSON) is empty or the input (JSON) passed to JSON to XML policy is invalid or malformed.
steps.jsontoxml.InCompatibleTypes 500 This error occurs if the type of the variable defined in the <Source> element and the <OutputVariable> element are not the same. It is mandatory that the type of the variables contained within the <Source> element and the <OutputVariable> element matches. The valid types are message and string.
steps.jsontoxml.InvalidSourceType 500 This error occurs if the type of the variable used to define the <Source> element is invalid. The valid types of variable are message and string.
steps.jsontoxml.OutputVariableIsNotAvailable 500 This error occurs if the variable specified in the <Source> element of the JSON to XML Policy is of type string and the <OutputVariable> element is not defined. The <OutputVariable> element is mandatory when the variable defined in the <Source> element is of type string.
steps.jsontoxml.SourceUnavailable 500 This error occurs if the message variable specified in the <Source> element of the JSON to XML policy is either:
  • out of scope (not available in the specific flow where the policy is being executed) or
  • can't be resolved (is not defined)

Deployment errors

None.

Fault variables

These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "SourceUnavailable"
jsontoxml.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. jsontoxml.JSON-to-XML-1.failed = true

Example error response

{
  "fault": {
    "faultstring": "JSONToXML[JSON-to-XML-1]: Source xyz is not available",
    "detail": {
      "errorcode": "steps.json2xml.SourceUnavailable"
    }
  }
}

Example fault rule

<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>

مواضيع ذات صلة