تحديد وحلّ المشاكل المتعلقة بأخطاء وقت التشغيل في سياسة JSON إلى XML

أنت تطّلع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

SourceUnavailable

رمز الخطأ

steps.json2xml.SourceUnavailable

نص الاستجابة للخطأ

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: Source [source_variable] is not available",
        "detail": {
            "errorcode": "steps.json2xml.SourceUnavailable"
        }
    }
}

مثال على الخطأ

{
    "fault": {
        "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available",
        "detail": {
            "errorcode": "steps.json2xml.SourceUnavailable"
        }
    }
}

السبب

يحدث هذا الخطأ إذا كان المتغيّر message المحدّد في العنصر <Source> من سياسة JSON إلى XML هو:

  • خارج النطاق (غير متوفّر في المسار المحدّد الذي يتم تنفيذ السياسة فيه)
  • لا يمكن حلّه (لم يتم تحديده)

على سبيل المثال، يحدث هذا الخطأ إذا كان من المفترض تنفيذ سياسة تحويل JSON إلى XML في عملية معالجة الطلب، ولكن تم ضبط عنصر <Source> على المتغيّر response الذي لا يتوفّر في عملية معالجة الطلب.

التشخيص

  1. حدِّد سياسة تحويل JSON إلى XML التي حدث فيها الخطأ واسم المتغيّر غير المتاح. يمكنك العثور على كلا العنصرَين في عنصر faultstring من استجابة الخطأ. على سبيل المثال، في سياسة faultstring التالية، يكون اسم السياسة هو Convert-JSONToXML والمتغيّر هو response:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. في ملف XML لسياسة JSON إلى XML التي تعذّر تنفيذها، تأكَّد من أنّ اسم المتغيّر المحدَّد في العنصر <Source> يتطابق مع اسم المتغيّر المحدّد في سلسلة الخطأ (الخطوة رقم 1 أعلاه). على سبيل المثال، تحدّد السياسة التالية من JSON إلى XML متغيّرًا باسم response في العنصر <Source>، والذي يتطابق مع محتوى faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
        <DisplayName>Convert-JSONToXML</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>response</Source>
    </JSONToXML>
    
  3. حدِّد ما إذا كان المتغيّر المستخدَم في عنصر <Source> محدّدًا ومتاحًا في المسار الذي يتم فيه تنفيذ سياسة تحويل JSON إلى XML.

  4. إذا كان المتغيّر إما:

    • خارج النطاق (غير متوفّر في العملية المحدّدة التي يتم تنفيذ السياسة فيها)
    • لا يمكن حلّه (لم يتم تحديده)

    هذا هو سبب الخطأ.

    على سبيل المثال، لنفترض أنّه من المفترض تنفيذ سياسة تحويل JSON إلى XML الموضّحة أعلاه في عملية الطلب. يُرجى تذكُّر أنّ المتغيّر response يتم استخدامه في عنصر <Source> ضمن سياسة تحويل ملفات JSON إلى XML. لا يتوفّر متغيّر الردّ إلا في مسار الردّ.

    بسبب عدم توفّر المتغيّر response في عملية إرسال الطلب، يظهر لك رمز الخطأ التالي:

    steps.json2xml.SourceUnavailable
    

الدقة

تأكَّد من أنّ المتغيّر الذي تم ضبطه في عنصر <Source> لسياسة تحويل JSON إلى XML التي تعذّر تنفيذها محدّد ومتوفّر في العملية التي يتم تنفيذ السياسة فيها.

لتصحيح مثال سياسة تحويل JSON إلى XML المعروض أعلاه، يمكنك تعديل العنصر <Source> لاستخدام المتغيّر request، لأنّه متوفّر في مسار الطلب:

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
      <DisplayName>Convert-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>request</OutputVariable>
      <Source>request</Source>
  </JSONToXML>

ExecutionFailed

رمز الخطأ

steps.json2xml.ExecutionFailed

نص استجابة الخطأ

{
   "fault": {
        "faultstring": "JSONToXML[policy_name]: Execution failed due to reason: Expecting { or [ at line 1",
        "detail": {
            "errorcode": "steps.json2xml.ExecutionFailed"
        }
    }
}

الأسباب المحتملة

في ما يلي الأسباب المحتمَلة لهذا الخطأ:

السبب الوصف
حمولة الإدخال غير متوفّرة حمولة الإدخال (JSON) فارغة.
إدخال غير صالح أو مكتوب بشكل غير صحيح الإدخال (بتنسيق JSON) الذي تم تمريره إلى سياسة تحويل JSON إلى XML غير صالح أو بتنسيق غير صحيح.

السبب: عدم توفّر حمولة الإدخال

في سياسة تحويل JSON إلى XML، إذا كان محتوى (حمولة) المتغيّر المحدّد في عنصر <Source> فارغًا، يحدث هذا الخطأ.

على سبيل المثال، إذا تم ضبط العنصر <Source> في سياسة JSON إلى XML كمتغيّر request أو response وكان من المفترض أن تحتوي على حمولة JSON، ولكن إذا كانت الحمولة فارغة، سيحدث الخطأ.

التشخيص

  1. حدِّد سياسة JSON إلى XML التي حدث فيها الخطأ. يمكنك العثور على هذه المعلومات في عنصر faultstring من استجابة الخطأ. على سبيل المثال، في faultstring التالي، اسم السياسة هو Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. افحص العنصر <Source> في ملف XML الخاص بسياسة XML الذي تعذّر دمجه بتنسيق JSON إلى XML وحدِّد المتغيّر المحدّد. على سبيل المثال، تم ضبط عنصر <Source> في سياسة تحويل JSON إلى XML التالية على request:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
    <DisplayName>Convert-JSONToXML</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>request</OutputVariable>
    <Source>request</Source>
    </JSONToXML>
    
  3. تحقَّق مما إذا كان المتغيّر المحدّد لعنصر <Source> في السياسة فارغًا. إذا كان الحقل فارغًا، هذا هو سبب الخطأ.

    في مثال سياسة تحويل JSON إلى XML المعروض أعلاه، تكون الحمولة المطلوبة (أي محتوى الطلب) التي أرسلها العميل فارغة.

    على سبيل المثال:

    curl -v "http://<org>-<env>.apigee.net/v1/testjsontoxml" -H "Content-Type: application/json"
    

    لأنّ الحمولة في استجابة JSON فارغة، يظهر لك رمز الخطأ:

    steps.json2xml.ExecutionFailed
    

    يمكن أن يحدث هذا الخطأ أيضًا إذا تم ضبط عنصر <Source> على response، ولكن تم تمرير حمولة فارغة من خلال خادم الخلفية.

الدقة

تأكَّد من أنّ الإدخال الذي تم تمريره إلى سياسة JSON إلى XML في العنصر <Source> هو حمولة JSON صالحة وليس فارغًا.

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

  1. أنشئ ملفًا باسم city.json يتضمّن المحتوى التالي:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. يمكنك طلب بيانات من واجهة برمجة التطبيقات باستخدام أمر cURL على النحو التالي:

    curl -v "http://<org>-<env>.apigee.net/v1/testxmltojson" -H "Content-Type: application/json" -X POST -d @company.json
    

السبب: إدخال غير صالح أو مشوه

إذا كانت سياسة تحويل JSON إلى XML تُحلِّل إدخالًا غير صالح أو بتنسيق غير صحيح، سيظهر لك هذا الخطأ.

على سبيل المثال، إذا تم تقديم ملف JSON غير الصالح التالي كإدخال لسياسة تحويل JSON إلى XML،

[
    "args": ["name" : "Google" ]
]

ستظهر لك رسالة الخطأ التالية:

"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"

التشخيص

  1. حدِّد سياسة تحويل JSON إلى XML التي حدث فيها الخطأ. يمكنك العثور على هذه المعلومات في عنصر faultstring من استجابة الخطأ. على سبيل المثال، في سياسة faultstring التالية، يكون اسم السياسة هو Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. راجِع عنصر <Source> المحدّد في ملف XML لسياسة تحويل JSON إلى XML الذي تعذّر تحويله. على سبيل المثال، تم ضبط عنصر <Source> في سياسة تحويل JSON إلى XML التالية على المتغيّر request:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
      <DisplayName>Convert-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>request</OutputVariable>
      <Source>request</Source>
    </JSONToXML>
    
  3. تحقّق ممّا إذا كان الإدخال المحدّد في عنصر <Source> حمولة JSON صالحة. إذا كان الإدخال غير صالح أو تم تنسيقه بشكلٍ غير صحيح، هذا هو سبب الخطأ.

    لنفترض أنّه تم نقل ملف JSON غير الصالح التالي إلى السياسة.

    [
        "args": ["name" : "Google" ]
    ]
    

    في ما يلي نموذج لطلب بيانات من واجهة برمجة التطبيقات يوضِّح كيفية تمرير الطلب:

    curl -v "http://<org>-<env>.apigee.net/v1/testjsontoxml" -H "Content-Type:
    application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
    

    الحمولة بتنسيق JSON التي تم تمريرها في الطلب غير صالحة لأنّ عنصر JSON يبدأ وينتهي بأقواس مربّعة ([ ]). لهذا السبب، يظهر لك رمز الخطأ:

    steps.json2xml.ExecutionFailed

    يمكن أن يحدث هذا الخطأ أيضًا إذا تم ضبط عنصر <Source> على response ولكنّ الحمولة في استجابة JSON غير صالحة أو ذات تنسيق غير صحيح.

الحلّ

تأكَّد من أنّ الإدخال الذي تم تمريره إلى سياسة JSON إلى XML في العنصر <Source> صالح وليس مكتوبًا بشكلٍ غير صحيح.

لحلّ المشكلة المتعلّقة بسياسة تحويل نموذج JSON إلى XML التي تمت مناقشتها أعلاه، عليك إرسال طلب حِمل JSON صالح على النحو التالي:

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

رمز الخطأ

steps.json2xml.OutputVariableIsNotAvailable

نص الاستجابة للخطأ

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
        }
    }
}

مثال على الخطأ

{
    "fault": {
        "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
        }
    }
}

السبب

يحدث هذا الخطأ إذا كان المتغيّر المحدّد في عنصر <Source> من سياسة تحويل JSON إلى XML من النوع string ولم يتم تعريف العنصر <OutputVariable>. يكون عنصر <OutputVariable> إلزاميًا عندما يكون المتغيّر المحدّد في عنصر <Source> من النوع سلسلة.

التشخيص

  1. حدِّد سياسة تحويل JSON إلى XML التي حدث فيها الخطأ. يمكنك العثور عليه في عنصر faultstring من استجابة الخطأ. على سبيل المثال، في faultstring التالي، اسم السياسة هو Check-JSONToXML:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. في سياسة تحويل JSON إلى XML التي تعذّر إكمالها، تحقّق مما إذا كان الرمز <OutputVariable> غير متوفّر.

    يتضمّن نموذج سياسة JSONToXML التالي عنصر <OutputVariable> غير متوفّر:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
        <DisplayName>Check-JSONToXML</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
            <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <Source>PostalCode</Source>
    </JSONToXML>
    
  3. حدِّد نوع المتغيّر المحدّد في عنصر <Source>:

    1. حدِّد مكان الرمز ضمن "وكيل واجهة برمجة التطبيقات" الذي تمّ فيه تعريف المتغيّر أولاً.
    2. بعد معرفة السياسة التي تم فيها تعريف المتغيّر وملؤه أولاً، عليك تحديد نوع هذا المتغيّر على النحو التالي:
      1. تحقّق من قيمة سمة type (إذا كانت متوفّرة).
      2. إذا لم تكن سمة type متوفّرة، يُعتبَر المتغيّر سلسلة.
    3. إذا كان نوع المتغيّر هو سلسلة، هذا هو سبب الخطأ. يمكنك الاطّلاع على المتغيّرات الشائعة وأنواعها في مرجع المتغيّرات.

    على سبيل المثال، اطّلِع على المتغيّر PostalCode في سياسة تحويل JSON إلى XML أعلاه.

    على سبيل المثال، لنفترض أنّه يتم استخدام سياسة "تعيين رسالة" لتعيين قيمة لمتغيّر يُسمّى PostalCode كما هو موضّح أدناه:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
        <DisplayName>Assign_PostalCode</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>PostalCode</Name>
            <Value>{"value":"56008"}</Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    يُرجى العِلم أنّ نوع المتغيّر الذي تم ضبطه في <AssignVariable> هو سلسلة. إذًا، يكون المتغير PostalCode من نوع السلسلة.

    تذكَّر الآن أنّه يتم استخدام المتغيّر PostalCode في العنصر <Source> لسياسة JSONToXML:

    <Source>PostalCode</Source>
    

    بما أنّ PostalCode من النوع سلسلة والعنصر <OutputVariable> غير متوفّر، يظهر لك رمز الخطأ:

    steps.json2xml.OutputVariableIsNotAvailable
    

الدقة

تأكَّد من أنّه إذا كان المتغيّر المحدّد في عنصر <Source> من سياسة JSONToXML من النوع سلسلة، يتم تعريف العنصر <OutputVariable> ضمن السياسة.

لتصحيح سياسة JSONToXML التي تمت مناقشتها أعلاه، أدرِج عنصر <OutputVariable> كما هو موضّح أدناه.

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
      <DisplayName>Check-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>response</OutputVariable>
      <Source>PostalCode</Source>
  </JSONToXML>

InCompatibleTypes

رمز الخطأ

steps.json2xml.InCompatibleTypes

نص الاستجابة للخطأ

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.json2xml.InCompatibleTypes"
        }
    }
}

مثال على الخطأ

{
    "fault": {
        "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.json2xml.InCompatibleTypes"
        }
    }
}

السبب

يحدث هذا الخطأ إذا كان نوع المتغيّر المحدّد في عنصر <Source> وعنصر <OutputVariable> غير متطابق. يجب أن يتطابق نوع المتغيّرات المضمّنة في العنصر <Source> مع العنصر <OutputVariable>.

الأنواع الصالحة هي message وstring.

التشخيص

  1. حدِّد سياسة JSON إلى XML التي حدث فيها الخطأ. يمكنك العثور عليه في عنصر faultstring من استجابة الخطأ. على سبيل المثال، في faultstring التالي، اسم السياسة هو JSONToXML_checktype:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. في سياسة JSON إلى XML التي تعذّر تنفيذها، لاحظ القيم المحدّدة في <OutputVariable> و<Source>.

    راجِع المثال التالي على السياسة:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML_checktype">
        <DisplayName>JSONToXML_checktype</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
            <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <OutputVariable>response</OutputVariable>
        <Source>PostalCode</Source>
    </JSONToXML>
    
    
  3. حدِّد نوع المتغيّر المحدّد في عنصرَي <Source> و<OutputVariable>:

    1. حدِّد مكان الرمز في "وكيل واجهة برمجة التطبيقات" حيث تم تعريف كل متغيّر من هذه المتغيّرات أولاً.
    2. بعد معرفة السياسة التي يتم فيها تعريف المتغيّر وتعبئته أولاً، عليك تحديد نوع ذلك المتغيّر على النحو التالي:
      1. تحقّق من قيمة سمة type (إذا كانت متوفّرة).
      2. إذا لم تكن سمة type متوفّرة، يُعتبَر المتغيّر سلسلة.
    3. إذا كان نوع المتغيّر المحدّد في <Source> هو سلسلة بينما كان نوع <OutputVariable> هو رسالة أو العكس، هذا هو سبب الخطأ. يمكنك الاطّلاع على معلومات عن المتغيّرات الشائعة وأنواعها في مرجع المتغيّرات.

    على سبيل المثال، نأخذ سياسة "تخصيص رسالة" التي تُستخدَم لتخصيص قيمة لمتغيّر يُسمّى PostalCode كما هو موضّح أدناه:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
        <DisplayName>Assign_PostalCode</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>PostalCode</Name>
            <Value>{"value":"56008"}</Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    يُرجى العلم أنّ نوع المتغيّر الذي تمّ ضبطه في <AssignVariable> هو سلسلة، وبالتالي، يكون المتغيّر PostalCode من النوع سلسلة.

    تذكَّر الآن أنّه يتم استخدام المتغيّر PostalCode في العنصر <Source> لسياسة JSONToXML:

    <Source>PostalCode</Source>
    

    وبالمثل، تذكَّر أنّه يتم استخدام المتغيّر response في العنصر <OutputVariable> لسياسة JSONToXML:

    <OutputVariable>response</OutputVariable>
    

    بما أنّ المتغيّر PostalCode من النوع string بينما المتغيّر response من النوع message، فإنّ هذين النوعَين غير متوافقَين، لذا يظهر لك رمز الخطأ:

    steps.json2xml.InCompatibleTypes
    

    يمكن أن يحدث الخطأ أعلاه أيضًا إذا كان المتغير في العنصر <Source> من النوع message ولكن المتغير في العنصر <OutputVariable> من نوع السلسلة.

الدقة

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

لتصحيح سياسة تحويل JSON إلى XML التي تمت مناقشتها أعلاه، يمكنك تحديد متغيّر آخر PostalCode_output من النوع string باستخدام سياسة تحديد الرسالة، واستخدام هذا المتغيّر في عنصر <OutputVariable> من سياسة تحويل JSON إلى XML.

سياسة تعيين الرسائل المعدَّلة:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
    <DisplayName>Assign_PostalCode</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name>PostalCode</Name>
        <Value>{"value":"56008"}</Value>
        <Ref/>
    </AssignVariable>
    <AssignVariable>
        <Name>PostalCode_output</Name>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

سياسة JSONToXML المعدَّلة:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
    <DisplayName>JSONToXML_checktype</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>PostalCode_output</OutputVariable>
    <Source>PostalCode</Source>
</JSONToXML>

InvalidSourceType

رمز الخطأ

steps.json2xml.InvalidSourceType

نص الاستجابة للخطأ

{
    "fault": {
        "faultstring": "JSONToXML[class invalid_class]: Invalid source type class invalid_class. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.json2xml.InvalidSourceType"
        }
    }
}

مثال على الخطأ

{
    "fault": {
        "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.json2xml.InvalidSourceType"
        }
    }
}

السبب

يحدث هذا الخطأ إذا كان نوع المتغيّر المستخدَم لتحديد عنصر <Source> غير صالح.إنّ الأنواع الصالحة للمتغيّر هي message وstring.

التشخيص

  1. حدِّد نوع المصدر غير الصالح المستخدَم في سياسة تحويل JSON إلى XML. يمكنك العثور على هذه المعلومات في رسالة الخطأ. على سبيل المثال، في الخطأ التالي، النوع غير الصالح هو Integer.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. افحص جميع سياسات JSON إلى XML في خادم وكيل واجهة برمجة التطبيقات المحدّد الذي حدث فيه الخطأ. في سياسة JSON إلى XML التي تعذّرت معالجتها، سجِّل اسم المتغيّر المحدّد في <Source>.

    في ما يلي نموذج سياسة تحتوي على المتغيّر المسمى EmployeeID المحدّد في العنصر <Source>:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
    <DisplayName>Check_SourceType</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>request</OutputVariable>
    <Source>EmployeeID</Source>
</JSONToXML>
  1. حدِّد نوع المتغيّر المحدّد في عنصر <Source>:

    1. حدِّد موقع الرمز داخل الخادم الوكيل لواجهة برمجة التطبيقات حيث تم تحديد هذا المتغيّر أولاً.
    2. بعد تحديد السياسة التي تم فيها تعريف المتغيّر وملؤه أولاً، عليك تحديد نوع هذا المتغيّر على النحو التالي:
      1. تحقّق من قيمة سمة type (إذا كانت متوفّرة).
      2. إذا لم تكن سمة type متوفّرة، يُعتبَر المتغيّر سلسلة.
    3. إذا لم يكن نوع المتغيّر المحدَّد في <Source> ليس نوع رسالة أو سلسلة، يكون هذا هو سبب الخطأ. يمكنك الاطّلاع على المتغيّرات الشائعة وأنواعها في مرجع المتغيّرات.

    على سبيل المثال، لنأخذ في الاعتبار أنّ سياسة استخراج المتغيّرات المستخدَمة لاستخراج القيمة من حمولة JSON وضبط القيمة على المتغيّر EmployeeID من نوع العدد الصحيح كما هو موضّح أدناه:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractJSONVariables">
        <Source>request</Source>
        <JSONPayload>
            <Variable name="EmployeeID" type="integer">
                <JSONPath>$.ID</JSONPath>
            </Variable>
        </JSONPayload>
    </ExtractVariables>
    

    تذكَّر الآن أنّه يتم استخدام المتغيّر EmployeeID في العنصر <Source> لسياسة JSONToXML:

    <Source>EmployeeID</Source>
    

    بما أنّ نوع هذا المتغيّر هو Integer، وهو نوع غير صالح من أنواع <Source>، يتعذّر تنفيذ الخادم الوكيل لواجهة برمجة التطبيقات مع ظهور الخطأ:

    steps.json2xml.InvalidSourceType
    

الدقة

تأكَّد من أنّ نوع المتغيّر المستخدَم لتحديد عنصر <Source> صالح. نوعا <Source> الصالحان هما message وstring.

لتجنُّب الخطأ أعلاه في سياسة JSONToXML، يمكنك استخدام المتغيّر request الذي يكون من النوع message أو أي سلسلة أخرى تكون حمولة JSON صالحة.