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