הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של Apigee Edge
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> של מדיניות XSLTransform הוא אחד מהבאים:
- לא רלוונטי (לא זמין בתהליך הספציפי שבו המדיניות מופעלת)
- אי אפשר לפתור (לא מוגדר)
לדוגמה, השגיאה הזו מתרחשת אם מדיניות XSLTransform אמורה להתבצע בתהליך הבקשה, אבל הרכיב <Source> מוגדר למשתנה התגובה, שלא קיים בתהליך הבקשה.
אבחון
מזהים את מדיניות XSLTransform שבה אירעה השגיאה ואת שם המשתנה שלא זמין. אפשר למצוא את שני הפריטים האלה ברכיב
faultstringשל תגובת השגיאה. לדוגמה, בקטע הבאfaultstring, שם המדיניות הואxsltוהמשתנה הואresponse:faultstring": "response message is not available for XSL: xsltב-XML של מדיניות XSLTransform שנכשלה, מוודאים שהשם של המשתנה שהוגדר ברכיב
<Source>זהה לשם המשתנה שזוהה במחרוזת השגיאה (שלב 1 למעלה). לדוגמה, במדיניות XSLTransform הבאה מוגדר משתנה בשם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>מוגדר וזמין בתהליך שבו מופעלת מדיניות XSLTransform.אם המשתנה הוא:
- לא נכלל בהיקף (לא זמין בתהליך הספציפי שבו המדיניות מופעלת) או
- אי אפשר לפתור (לא מוגדר)
אז זו הסיבה לשגיאה.
לדוגמה, נניח שמדיניות XSLTransform שמוצגת למעלה אמורה לפעול בתהליך הבקשה. נזכיר שהמשתנה
responseמשמש ברכיב<Source>של מדיניות הדוגמה. המשתנהresponseזמין רק בתהליך התשובה.מכיוון שהמשתנה
responseלא קיים בתהליך הבקשה, מקבלים את קוד השגיאה:steps.xsl.XSLSourceMessageNotAvailable
רזולוציה
מוודאים שהמשתנה שהוגדר ברכיב <Source> של מדיניות XSLTransform
שנכשלה מוגדר וקיים בתהליך שבו המדיניות מופעלת.
כדי לתקן את מדיניות XSLTransform שמוצגת בדוגמה שלמעלה, אפשר לשנות את הרכיב <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 נכשלת. הסיבה לכישלון בהודעת השגיאה תספק מידע נוסף על הסיבה. בטבלה הבאה מפורטת אחת מהסיבות האפשריות לכישלון הזה – תחילית לא תקינה – ומוסברות באמצעות דוגמה.
| מטרה | תיאור |
|---|---|
| מטען ייעודי (payload) של קלט XML לא זמין | מטען ה-XML לקלט לא הועבר או שהוא ריק. |
| קובץ XML עם קלט פגום | מטען ה-XML שהוזן לא תקין או שהפורמט שלו שגוי. |
| תחילית לא תקינה | למטען הייעודי (payload) של קלט ה-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 של הקלט לא מועבר או שהוא ריק, הסיבה לכשל תציין שיש סיום מוקדם של המסמך במהלך הניתוח. את כל המידע הזה אפשר למצוא באלמנט
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://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml"
your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין
virtualhosts.hostAliasesבקובץ ההחלפות. מידע נוסף זמין במאמר בנושא ציון החלפות של הגדרות.מכיוון שמטען ה-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 הוא מטען ייעודי (payload) תקין בפורמט XML ולא ריק.
כדי לפתור את הבעיה במדיניות לדוגמה של XSLTransform, צריך להעביר מטען ייעודי (payload) של 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://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין
virtualhosts.hostAliasesבקובץ ההחלפות. מידע נוסף זמין במאמר בנושא ציון החלפות של הגדרות.
הסיבה: קובץ 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 תקין. אם מטען הייעודי (payload) של הקלט הוא לא XML תקין, זו הסיבה לשגיאה.
בדוגמה של הבקשה שמופיעה בהמשך, מטען הייעודי (payload) של הקלט (כלומר, גוף הבקשה) שנשלח על ידי המשתמש היה לא תקין.
לדוגמה:
curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין
virtualhosts.hostAliasesבקובץ ההחלפות. מידע נוסף זמין במאמר בנושא ציון החלפות של הגדרות.בדוגמה הזו,
city.xmlמוגדר כך:{ "City": "Bengaluru", "Name": "Apigee", "Pincode": "560016" }מכיוון שמטען הייעודי (payload) של הקלט הוא JSON ולא XML תקין, מוצגת השגיאה:
"faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\""
רזולוציה
מוודאים שהקלט שמועבר למדיניות XSLTransform הוא מטען ייעודי (payload) של XML תקין ולא ריק.
כדי לפתור את הבעיה במדיניות לדוגמה של XSLTransform, צריך להעביר מטען ייעודי (payload) של 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://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין
virtualhosts.hostAliasesבקובץ ההחלפות. מידע נוסף זמין במאמר בנושא ציון החלפות של הגדרות.
הסיבה: קידומת לא תקינה
במטען ה-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 ואת הסיבה לכשל. במקרה הזה, הסיבה לכשל תציין שיש תחילית לא פתורה במספר שורה ספציפי במטען הייעודי (payload) של קלט ה-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 (שמזוהה בשלב 1 למעלה) ואת מטען ה-XML של הקלט. אם הקידומת שמשמשת במספר השורה (שמזוהה בשלב 1 למעלה) של מטען ה-XML של הקלט לא קיימת בקובץ ה-XSL, זו הסיבה לשגיאה.
הנה דוגמה ל-XSL ולמטען הייעודי (payload) של 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>מטען ייעודי (payload) של קלט בפורמט 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><Life></xsl:text>. לכן מופיעה השגיאה:"faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly around char 270)\""
רזולוציה
מוודאים שב-payload של קלט ה-XML שמועבר למדיניות XSLTransform מוגדרים כל פורמטי הרכיבים כקידומות בקובץ ה-XSL שמשמש במדיניות.
כדי לתקן את קובץ ה-XML לדוגמה שמוצג למעלה, אפשר לשנות את הקובץ כמו שמוצג בהמשך:
מטען ייעודי (payload) של קלט 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>