تحديد وحلّ المشاكل المتعلقة بأخطاء وقت تشغيل سياسة تحويل XSL

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

XSLSourceMessageNotAvailable

رمز الخطأ

steps.xsl.XSLSourceMessageNotAvailable

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

{
    "fault": {
        "faultstring": "response message is not available for XSL: policy_name",
        "detail": {
            "errorcode": "steps.xsl.XSLSourceMessageNotAvailable"
        }
    }
}

مثال على رسالة الخطأ

{
    "fault": {
        "faultstring": "response message is not available for XSL: xslt",
        "detail": {
            "errorcode": "steps.xsl.XSLSourceMessageNotAvailable"
        }
    }
}

السبب

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

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

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

التشخيص

  1. حدِّد سياسة تحويل XSL التي حدث فيها الخطأ واسمvariabile الذي لا يتوفّر. يمكنك العثور على كلا العنصرَين في عنصر faultstring في استجابة الخطأ. على سبيل المثال، في الرمز التالي faultstring، اسم السياسة هو xslt والمتغيّر هو response:

    faultstring": "response message is not available for XSL: xslt
    
  2. في ملف XML لسياسة تحويل XSL التي تعذّر تنفيذها، تأكَّد من أنّ اسم المتغيّر الذي تم ضبطه في عنصر <Source> يتطابق مع اسم المتغيّر الذي تم تحديده في سلسلة التحقّق من الأخطاء (الخطوة 1 أعلاه). على سبيل المثال، تحدد سياسة تحويل XSL التالية متغيرًا اسمه response في العنصر <Source>، والذي يطابق ما في سلسلة الخطأ:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <XSL async="false" continueOnError="false" enabled="true" name="xslt">
      <DisplayName>xslt</DisplayName>
          <Properties/>
          <ResourceURL>xsl://XSL-Transform.xsl</ResourceURL>
          <Source>response</Source>
          <Parameters ignoreUnresolvedVariables="false"/>
         <OutputVariable/>
    </XSL>
    
  3. حدد ما إذا كان المتغير المستخدم في العنصر <Source> محددًا ومتاحًا في التدفق الذي يتم فيه تنفيذ سياسة تحويل XSL.

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

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

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

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

    بما أنّ المتغيّر response غير متوفّر في عملية تقديم الطلب، ستتلقّى رمز الخطأ:

    steps.xsl.XSLSourceMessageNotAvailable
    

الدقة

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

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <XSL async="false" continueOnError="false" enabled="true" name="xslt">
  <DisplayName>xslt</DisplayName>
    <Properties/>
    <ResourceURL>xsl://XSL-Transform.xsl</ResourceURL>
    <Source>request</Source>
    <Parameters ignoreUnresolvedVariables="false"/>
   <OutputVariable/>
</XSL>

XSLEvaluationFailed

رمز الخطأ

steps.xsl.XSLEvaluationFailed

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

{
  "fault": {
      "faultstring": "Evaluation of XSL <var>XSL_file_name</var> failed with reason: \"<var>reason_for_failure</var>",
      "detail": {
          "errorcode": "steps.xsl.XSLEvaluationFailed"
      }
  }
}

مثال على رسالة الخطأ

{
    "fault": {
        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\"",
        "detail": {
            "errorcode": "steps.xsl.XSLEvaluationFailed"
        }
    }
}

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

يحدث هذا الخطأ في الحالات التالية:

  • حمولة XML التي تم إدخالها غير متاحة أو مشوهة.
  • يخفق/يتعذر تحويل سياسة WebRTC إلى تنسيق XML الذي يتم إدخاله استنادًا إلى قواعد التحويل المقدمة في ملف XSL. قد تكون هناك العديد من الأسباب المختلفة لفشل سياسة WebRTC. سيقدّم سبب تعذُّر الإجراء في رسالة الخطأ مزيدًا من المعلومات عن السبب. يسرد الجدول التالي أحد أسباب هذا الفشل - البادئة غير صالحة - وتم شرحه بمثال.
السبب الوصف
لم تتوفّر حمولة XML للتحميل لم يتم تمرير الحمولة XML التي تم إدخالها أو كانت فارغة.
تنسيق XML الخاص بالمدخلات تالف حمولة XML التي تم إدخالها غير صالحة أو تم تنسيقها بشكلٍ غير صحيح.
بادئة غير صالحة تحتوي الحمولة بتنسيق XML على بادئة غير محدّدة في ملف XSL.

السبب: لا تتوفّر حمولة XML المُدخلة

يحدث هذا الخطأ إذا لم يتم تمرير الحمولة XML المُدخلة أو إذا كانت الحمولة XML التي تم تمريرها كجزء من طلب واجهة برمجة التطبيقات إلى وكيل واجهة برمجة التطبيقات الذي يتضمّن سياسة XSLTransform فارغة.

مثال على رسالة الخطأ

{
    "fault": {
        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\"",
        "detail": {
            "errorcode": "steps.xsl.XSLEvaluationFailed"
        }
    }
}

التشخيص

  1. حدِّد ملف XSL الذي تعذّر تقييمه من خلال سياسة تحويل XML وسبب تعذُّر التقييم. إذا لم يتم تمرير الحمولة XML للدخل أو كانت فارغة، سيشير سبب الخطأ إلى أنّه تم إنهاء المستند مبكرًا أثناء التحليل. يمكنك العثور على كل هذه المعلومات في faultstring عنصر استجابة الخطأ. على سبيل المثال، في faultstring التالي، ملف XSL هو XSL-Transform.xsl، وسبب الخطأ هو Premature end of document while parsing at line 1 (possibly around char 0). يعني هذا الخطأ أنّه لم يتم تمرير الحمولة بتنسيق XML أو أنّها فارغة.

        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\""
    
  2. حدِّد ما إذا كانت حمولة XML التي تم تمريرها كجزء من الطلب of فارغة. إذا لم يتم تمرير الحمولة البرمجية للإدخال أو كانت فارغة، هذا هو سبب حدوث الخطأ.

    في مثال الطلب أدناه، كانت حمولة الطلب (أي نص الطلب) التي أرسلها المستخدم فارغة.

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

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

    لأنّ حمولة إدخال XML فارغة، ستظهر لك رسالة الخطأ التالية:

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\""
    

الدقة

تأكَّد من أنّ الإدخال الذي تم تمريره إلى سياسة XSLTransform هو حمولة XML صالحة وليست فارغة.

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

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

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. يمكنك إجراء طلب البيانات من واجهة برمجة التطبيقات باستخدام أمر cURL على النحو التالي:

    curl -v "http://<org>-<env>.apigee.net/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

السبب: ملف XML للإدخال بتنسيق غير صحيح

الحمولة XML التي تم تمريرها كجزء من طلب البيانات من واجهة برمجة التطبيقات إلى سياسة XSLTransform غير صالحة أو تم تنسيقها بشكلٍ غير صحيح.

مثال على رسالة الخطأ

{
    "fault": {
        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\"",
        "detail": {
            "errorcode": "steps.xsl.XSLEvaluationFailed"
        }
    }
}

التشخيص

  1. حدِّد ملف XSL الذي تعذّر تقييمه من خلال سياسة تحويل XML وسبب تعذّر التقييم. إذا كانت حمولة XML المُدخلة غير صحيحة، سيشير سبب الإخفاق إلى وجود حرف غير متوقع. يمكنك العثور على كل هذه المعلومات في عنصر faultstring من استجابة الخطأ. على سبيل المثال، في faultstring التالي، ملف XSL هو XSL-Transform.xsl، وسبب التعذُّر هو Unexpected char while looking for open tag ('&lt;') character. وهذا يعني أنّ العنصر "<" غير متوفّر في الحمولة بتنسيق XML.

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    
  2. راجِع حمولة XML التي تم تمريرها إلى سياسة XSLTransform لمعرفة ما إذا كانت تحتوي على محتوى XML صالح أم لا. إذا كانت حمولة البيانات المُدخلة غير صالحة بتنسيق XML، يكون هذا هو سبب الخطأ.

    في مثال الطلب أدناه، كانت حمولة الإدخال (أي محتوى الطلب) التي أرسلها المستخدم غير صالحة.

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

    curl -v "http://<org>-<env>.apigee.net/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

    مكان city.xml:

    {
       "City": "Bengaluru",
       "Name": "Apigee",
       "Pincode": "560016"
    }
    

    بما أنّ الحمولة المُدخلة هي JSON وليست XML صالحة، يظهر لك الخطأ التالي:

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    

الدقة

تأكد من أن الإدخال الذي تم تمريره إلى سياسة WebRTCransform يمثل حمولة بيانات بتنسيق XML صالحة وغير فارغ.

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

  1. عدِّل الملف city.xml ليكون المحتوى بتنسيق XML كما هو موضّح أدناه:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. يمكنك إجراء طلب البيانات من واجهة برمجة التطبيقات باستخدام الأمر cURL على النحو التالي:

    curl -v "http://<org>-<env>.apigee.net/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

السبب: بادئة غير صالحة

تحتوي الحمولة XML المُدخلة التي تم تمريرها إلى سياسة XSLTransform على عنصر لم يتم تحديده كبادئة في ملف XSL المحدَّد في السياسة.

مثال على رسالة الخطأ

{
    "fault": {
        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\"",
        "detail": {
            "errorcode": "steps.xsl.XSLEvaluationFailed"
        }
    }
}

التشخيص

  1. حدِّد ملف XSL الذي تعذّر تقييمه من خلال سياسة تحويل XML وسبب تعذُّر التقييم. في هذه الحالة، سيشير سبب الخطأ إلى أنّ هناك بادئة لم يتم حلّها في رقم سطر معيّن في حمولة XML الإدخال. يمكنك العثور على كل هذه المعلومات في العنصر faultstring الخاص باستجابة الخطأ. على سبيل المثال، في faultstring التالي، يكون ملف XSL هو XSL-Transform.xsl، وسبب تعذّر ذلك هو Unresolved Prefix ورقم السطر 1.

    "faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\""
    
  2. افحص محتوى ملف XSL (المحدّد في الخطوة رقم 1 أعلاه) وحمولة XML. إذا لم تكن البادئة المستخدَمة في رقم السطر (الذي تم تحديده في الخطوة رقم 1 أعلاه) من ملف XML المُدخل (الذي يمثّل الحمولة) متوفّرة في ملف XSL، هذا يعني أنّها سبب الخطأ.

    في ما يلي نموذج XSL وحمولة XML المقابلة التي تؤدي إلى الخطأ:

    XSL-Transform.xsl
    
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:output method="text"/>
      <xsl:variable name="newline">
       <xsl:text>
       </xsl:text>
      </xsl:variable>
      <xsl:template match="/">
      <xsl:text>&lt;Life&gt;</xsl:text>
        <xsl:value-of select="$newline"/>
        <xsl:text>Here are the odd-numbered items from the list:</xsl:text>
        <xsl:value-of select="$newline"/>
        <xsl:for-each select="list/listitem">
          <xsl:if test="(position() mod 2) = 1">
            <xsl:number format="1. "/>
            <xsl:value-of select="."/>
            <xsl:value-of select="$newline"/>
          </xsl:if>
        </xsl:for-each>
      <xsl:text>&lt;/Life&gt;</xsl:text>
    </xsl:template>
    </xsl:stylesheet>
    

    إدخال الحمولة بتنسيق XML

    <?xml version="1.0"?>
    <Life:Books>
      <title>A few of my favorite albums</title>
      <listitem>Beat Crazy</listitem>
      <listitem>Here Come the Warm Jets</listitem>
      <listitem>Kind of Blue</listitem>
      <listitem>London Calling</listitem>
    </Life:Books>
    

    يحتوي مثال حمولة البيانات بتنسيق XML المعروض أعلاه على عنصر <Life:Books>. يُرجى ملاحظة أنّ ملف XSL لا يحتوي على هذه البادئة. ولكن بدلاً من ذلك، تم إدراج البادئة على النحو التالي: <xsl:text>&lt;Life&gt;</xsl:text>. وبالتالي، تظهر لك رسالة الخطأ التالية:

    "faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\""
    

الدقة

تأكد من أن حمولة بيانات XML المدخلة التي تم تمريرها إلى سياسة WebRTCransform تحتوي على جميع تنسيقات العناصر المحددة كبادئات في ملف XSL المستخدم في السياسة.

لحلّ مشكلة نموذج ملف XML المعروض أعلاه، يمكنك تعديل الملف على النحو الموضّح أدناه:

حمولة XML المعدَّلة للبيانات المُدخلة

<?xml version="1.0"?>
<Life>
  <title>A few of my favorite albums</title>
  <listitem>Beat Crazy</listitem>
  <listitem>Here Come the Warm Jets</listitem>
  <listitem>Kind of Blue</listitem>
  <listitem>London Calling</listitem>
</Life>