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

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

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"
        }
    }
}

السبب

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

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

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

التشخيص

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

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

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

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

    عندئذٍ يكون هذا هو سبب الخطأ.

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

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

    steps.xsl.XSLSourceMessageNotAvailable
    

الدقة

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

لتصحيح مثال سياسة XSL Transform الموضّح أعلاه، يمكنك تعديل العنصر <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 للإدخال غير متاحة أو غير صالحة.
  • تعذُّر/عدم إمكانية تحويل ملف XML الإدخال باستخدام سياسة XSLTransform استنادًا إلى قواعد التحويل المتوفّرة في ملف XSL قد تكون هناك أسباب مختلفة لتعذُّر تنفيذ سياسة XSLTransform. سيوفر سبب التعذّر في رسالة الخطأ مزيدًا من المعلومات حول السبب. يسرد الجدول التالي أحد أسباب هذا الخطأ، وهو &quot;بادئة غير صالحة&quot;، ويتم توضيح ذلك بمثال.
السبب الوصف
حمولة 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 Transform وسبب تعذُّر التقييم إذا لم يتم تمرير حمولة 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 التي تم تمريرها كجزء من الطلب فارغة. إذا لم يتم تمرير حمولة الإدخال أو كانت فارغة، سيكون ذلك هو سبب الخطأ.

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

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

    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 Transform وسبب تعذُّر التقييم إذا كانت حمولة 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\""
    

الدقة

تأكَّد من أنّ الإدخال الذي تم تمريره إلى سياسة XSLTransform هو حمولة 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 Transform وسبب تعذُّر التقييم. في هذه الحالة، سيشير سبب الخطأ إلى أنّه هناك بادئة لم يتم حلّها في رقم سطر معيّن في حمولة 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 التي تم إدخالها إلى سياسة XSLTransform تتضمّن جميع تنسيقات العناصر المحدّدة كبادئات في ملف 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>