عیب یابی خطای زمان اجرا خط مشی XSL Transform

شما در حال مشاهده اسناد 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"
        }
    }
}

علت

اگر پیام یا متغیر رشته ای که در عنصر <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 در دسترس نیست/بد شکل است.
  • خط مشی XSLTransform شکست می خورد/نمی تواند فایل XML ورودی را بر اساس قوانین تبدیل ارائه شده در فایل XSL تبدیل کند. ممکن است دلایل مختلفی برای شکست خط مشی XSLTransform وجود داشته باشد. دلیل عدم موفقیت در پیام خطا اطلاعات بیشتری در مورد علت ارائه می دهد. جدول زیر یکی از دلایل این شکست - پیشوند نامعتبر - را فهرست کرده و با یک مثال توضیح داده شده است.
علت توضیحات
ورودی XML Payload در دسترس نیست بار ورودی XML ارسال یا خالی نیست.
XML ورودی نادرست بار ورودی XML بد شکل یا نامعتبر است.
پیشوند نامعتبر است محموله ورودی XML دارای پیشوندی است که در فایل XSL تعریف نشده است.

علت: ورودی XML payload در دسترس نیست

اگر بار ورودی XML ارسال نشود یا بار XML به عنوان بخشی از درخواست API به پروکسی API دارای خط مشی 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. تماس API را با استفاده از دستور cURL به صورت زیر انجام دهید:

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

علت: ورودی XML نامناسب

بار ورودی XML ارسال شده به عنوان بخشی از درخواست API به خط‌مشی 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 به صورت زیر تماس API را انجام دهید:

    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 payload در فایل 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 Payload را وارد کنید

    <?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 payload نشان داده شده در بالا حاوی عنصر <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 Payload به روز شد

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