تحديد وحلّ المشاكل المتعلقة بأخطاء وقت التشغيل في سياسة 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> على request في السياسة التالية من JSON إلى XML:

    <?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> على الاستجابة، ولكن يعمل خادم الخلفية على نقل حمولة بيانات فارغة.

الدقة

تأكَّد من أنّ الإدخال الذي تم تمريره إلى سياسة 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> على المتغيّر request في السياسة التالية من JSON إلى XML:

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

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

    <?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 من نوع السلسلة بينما المتغيّر response من نوع الرسالة، فإنّه نوعان غير متوافقين، ولذلك يظهر لك رمز الخطأ:

    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. يمكنك العثور على هذه المعلومات في رسالة الخطأ. على سبيل المثال، في الخطأ التالي، النوع غير الصالح هو عدد صحيح.

    "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، يمكنك استخدام الطلب متغيّر من النوع message أو أي سلسلة أخرى وهو حمولة JSON صالحة