אתם צופים במסמכי העזרה של 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"
}
}
}
סיבה
השגיאה הזו מתרחשת אם המשתנה של המחרוזת או message שצוין ברכיב <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 שמוצגת למעלה אמורה לפעול בתהליך הבקשה. חשוב לזכור שהמשתנה
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. הסיבה לכישלון בהודעת השגיאה תספק מידע נוסף על הגורם. בטבלה הבאה מפורטת אחת מהסיבות לכך – קידומת לא חוקית – עם דוגמה להסבר.
סיבה | תיאור |
---|---|
המטען הייעודי (Payload) של XML לא זמין | המטען הייעודי (payload) של הקלט ב-XML לא מועבר או ריק. |
קובץ XML לקלט בעל מבנה שגוי | המטען הייעודי (payload) של הקלט בפורמט XML שגוי או לא חוקי. |
תחילית לא תקינה | לעומס הנתונים של קלט ה-XML יש קידומת שלא מוגדרת בקובץ ה-XSL. |
סיבה: נתוני העומס של הקלט בפורמט XML לא זמינים
השגיאה הזו מתרחשת אם לא מועברת עומס העבודה של ה-XML של הקלט, או אם עומס העבודה של ה-XML שהועברו כחלק מבקשת ה-API לשרת proxy של ה-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"
}
}
}
אבחון
מאתרים את קובץ ה-XSL שלא ניתן היה להעריך אותו באמצעות מדיניות הטרנספורמציה של ה-XML ואת הסיבה לכישלון. אם עומס העבודה של ה-XML של הקלט לא מועבר או שהוא ריק, הסיבה לכישלון תצביע על סיום מוקדם של המסמך במהלך הניתוח. כל המידע הזה מופיע ברכיב
faultstring
של תשובת השגיאה. לדוגמה, ב-faultstring
הבא, קובץ ה-XSL הואXSL-Transform.xsl
והסיבה לכשל היאPremature end of document while parsing at line 1 (possibly around char 0)
. המשמעות של השגיאה הזו היא שהמטען הייעודי (payload) של 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"
מכיוון שהמטען הייעודי (payload) של קלט ה-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 ואת הסיבה לכשל. אם עומס העבודה של ה-XML בקלט לא תקין, הסיבה לכישלון תצביע על כך שיש תו לא צפוי. כל המידע הזה מופיע ברכיב
faultstring
בתגובת השגיאה. לדוגמה, בקובץfaultstring
הבא, קובץ ה-XSL הואXSL-Transform.xsl
והסיבה לכישלון היאUnexpected char while looking for open tag ('<') character
. כלומר, ה-"<
" חסר במטען הייעודי (payload) של ה-XML."faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('<') character\""
בודקים את עומס העבודה של קלט ה-XML שמוענק למדיניות XSLTransform, כדי לראות אם יש לו תוכן XML תקין. אם המטען הייעודי (payload) של הקלט הוא לא 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, ואת הסיבה לכישלון. במקרה כזה, הסיבה לכישלון תצביע על כך שיש תחילית שלא טופלה במספר שורה ספציפי בתוכן הייעודי (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>
המטען הייעודי (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)\""
רזולוציה
חשוב לוודא שהמטען הייעודי (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>