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

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

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 الخاص بسياسة 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>
    
  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 الذي تعذّر تنفيذه. على سبيل المثال، تحتوي سياسة 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>
    
  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> على الاستجابة ولكن حمولة استجابة 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 من النوع "سلسلة" ولم يتم تحديد العنصر <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. تحقَّق من قيمة السمة "النوع" (إذا كانت متوفّرة).
      2. في حال عدم توفّر السمة "النوع"، يُعدّ المتغيّر سلسلة.
    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. تحقَّق من قيمة السمة "النوع" (إذا كانت متوفّرة).
      2. في حال عدم توفّر السمة "النوع"، يُعدّ المتغيّر سلسلة.
    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 من نوع السلسلة باستخدام سياسة "تعيين الرسالة"، واستخدام هذا المتغيّر في العنصر <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. تحقَّق من قيمة السمة "النوع" (إذا كانت متوفّرة).
      2. في حال عدم توفّر السمة "النوع"، يُعدّ المتغيّر سلسلة.
    3. إذا لم يكن نوع المتغيّر المحدّد في <Source> من النوعين "رسالة" أو "سلسلة"، سيكون ذلك هو سبب الخطأ. يمكنك الاطّلاع على المتغيّرات الشائعة وأنواعها في مرجع المتغيّرات.

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