شما در حال مشاهده مستندات 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 Transform در جریان درخواست اجرا شود، اما عنصر <Source> روی متغیر پاسخ تنظیم شده باشد، که در جریان درخواست وجود ندارد.
تشخیص
سیاست تبدیل XSL که خطا در آن رخ داده است و نام متغیری که در دسترس نیست را شناسایی کنید. میتوانید هر دوی این موارد را در عنصر
faultstringپاسخ خطا پیدا کنید. برای مثال، درfaultstringزیر، نام سیاستxsltو متغیرresponseاست:faultstring": "response message is not available for XSL: xsltدر 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>تعیین میکند که آیا متغیر استفاده شده در عنصر
<Source>در جریانی که سیاست تبدیل XSL در آن اجرا میشود، تعریف شده و در دسترس است یا خیر.اگر متغیر یکی از موارد زیر باشد:
- خارج از محدوده (در جریان خاصی که سیاست در آن اجرا میشود، در دسترس نیست) یا
- قابل حل نیست (تعریف نشده است)
پس علت خطا همینه.
به عنوان مثال، فرض کنید قرار است سیاست XSL Transform که در بالا نشان داده شده است، در جریان درخواست اجرا شود. به یاد بیاورید که متغیر
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 Payload در دسترس نیست | بار داده XML ورودی ارسال نشده یا خالی است. |
| ورودی XML ناقص | بار داده XML ورودی ناقص یا نامعتبر است. |
| پیشوند نامعتبر | فایل XML ورودی دارای پیشوندی است که در فایل XSL تعریف نشده است. |
علت: بار داده XML ورودی در دسترس نیست
این خطا زمانی رخ میدهد که بار داده XML ورودی ارسال نشود یا بار داده XML ارسال شده به عنوان بخشی از درخواست API به API Proxy که دارای سیاست 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"
}
}
}
تشخیص
فایل XSL که توسط سیاست XML Transform قابل ارزیابی نیست و دلیل شکست را مشخص کنید. اگر محتوای XML ورودی منتقل نشود یا خالی باشد، دلیل شکست نشان میدهد که در هنگام تجزیه، سند به صورت Premature end of document (پایان زودرس سند) اجرا میشود. میتوانید تمام این اطلاعات را در عنصر
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)\""بررسی کنید که آیا محتوای 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 معتبر ارسال کنید. برای مثال:
یک فایل با نام
city.xmlبا محتوای زیر ایجاد کنید:<?xml version="1.0" encoding="UTF-8"?> <root> <City>Bengaluru</City> <Name>Apigee</Name> <Pincode>560016</Pincode> </root>فراخوانی 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 ('<') character\"",
"detail": {
"errorcode": "steps.xsl.XSLEvaluationFailed"
}
}
}
تشخیص
فایل XSL که توسط سیاست XML Transform قابل ارزیابی نیست و دلیل شکست را شناسایی کنید. اگر محتوای XML ورودی ناقص باشد، دلیل شکست نشان میدهد که یک کاراکتر غیرمنتظره وجود دارد. میتوانید تمام این اطلاعات را در عنصر
faultstringپاسخ خطا پیدا کنید. به عنوان مثال، درfaultstringزیر، فایل XSL،XSL-Transform.xslاست و دلیل شکستUnexpected char while looking for open tag ('<') characterاست. یعنی "<" در محتوای XML وجود ندارد."faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\""بار داده 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 ('<') character\""
وضوح تصویر
اطمینان حاصل کنید که ورودی ارسالی به سیاست XSLTransform، یک فایل XML معتبر و غیر خالی است.
برای رفع مشکل مربوط به سیاست نمونه XSLTransform، یک فایل XML معتبر ارسال کنید. برای مثال:
فایل
city.xmlرا طوری تغییر دهید که محتوای آن در XML به صورت زیر باشد:<?xml version="1.0" encoding="UTF-8"?> <root> <City>Bengaluru</City> <Name>Apigee</Name> <Pincode>560016</Pincode> </root>فراخوانی 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"
}
}
}
تشخیص
فایل 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)\""محتوای فایل 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><Life></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></Life></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><Life></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>