عیب‌یابی خطای زمان اجرای خط‌مشی «تبدیل 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"
        }
    }
}

علت

این خطا زمانی رخ می‌دهد که پیام یا متغیر رشته‌ای مشخص‌شده در عنصر <Source> خط‌مشی «تبدیل XSL» یکی از موارد زیر باشد:

  • خارج از محدوده (در جریان خاصی که خط‌مشی در آن اجرا می‌شود دردسترس نیست)
  • حل‌وفصل نشد (تعریف نشده است)

برای مثال، اگر خط‌مشی «تبدیل XSL» قرار باشد در جریان درخواست اجرا شود، اما عنصر <Source> روی متغیر پاسخ تنظیم شده باشد، این خطا رخ می‌دهد، چون این متغیر در جریان درخواست وجود ندارد.

تشخیص

  1. خط‌مشی «تبدیل XSL» را که خطا در آن رخ داده است و نام متغیری را که دردسترس نیست شناسایی کنید. می‌توانید هر دو این موارد را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در faultstring زیر، نام خط‌مشی xslt و متغیر response است:

    faultstring": "response message is not available for XSL: xslt
    
  2. در «زبان نشانه‌گذاری توسعه‌پذیر» خط‌مشی «تبدیل XSL» ناموفق، درستی‌سنجی کنید که نام متغیر تنظیم‌شده در عنصر <Source> با نام متغیر شناسایی‌شده در رشته خطا مطابقت داشته باشد (مرحله ۱ در بالا). برای مثال، خط‌مشی «تبدیل 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» ناموفق تعریف شده باشد و در جریانی که خط‌مشی اجرا می‌شود وجود داشته باشد.

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

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

این خطا زمانی رخ می‌دهد که بار 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 ورودی ارسال نشود یا خالی باشد، دلیل عدم موفقیت نشان می‌دهد که درحین تجزیه، سند به‌طور نارس و ناتمام پایان یافته است. می‌توانید همه این اطلاعات را در عنصر 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 ورودی که به‌عنوان بخشی از درخواست 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» نتوانسته است آن را ارزیابی کند و دلیل این خطا را شناسایی کنید. اگر بار 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. تماس با API را بااستفاده از فرمان 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 (که در مرحله ۱ بالا شناسایی شده است) و داده‌بر XML ورودی را بررسی کنید. اگر پیشوند استفاده‌شده در شماره خط (شناسایی‌شده در مرحله ۱ بالا) بار 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>
    

    پایه‌بار زبان نشانه‌گذاری توسعه‌پذیر نمونه نشان‌داده‌شده در بالا حاوی عنصر <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>