פתרון בעיות בזמן ריצה של מדיניות 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"
        }
    }
}

סיבה

השגיאה הזו מתרחשת אם משתנה המחרוזת message או המחרוזת שצוין ברכיב <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"
        }
    }
}

גורמים אפשריים

השגיאה הזו מתרחשת אם:

  • המטען הייעודי (payload) של ה-XML שהוזן לא זמין או שפורמטו שגוי.
  • מדיניות ה-XSLTransform נכשלת או לא יכולה להמיר את קובץ ה-XML של הקלט, בהתאם לכללי הטרנספורמציה שצוינו בקובץ ה-XSL. יכולות להיות הרבה סיבות שונות לכישלון של מדיניות XSLTransform. תוכלו למצוא מידע נוסף על הסיבה לכשל בהודעת השגיאה. בטבלה הבאה מופיעה אחת הסיבות האפשריות לכשל הזה – 'תחילית לא חוקית', והיא מוסברת בדוגמה.
סיבה תיאור
מטען ייעודי של XML לא זמין המטען הייעודי (payload) של קלט ה-XML לא הועבר או שהוא ריק.
קובץ XML של קלט בפורמט שגוי המטען הייעודי (payload) של הקלט בפורמט XML שגוי או לא חוקי.
תחילית לא תקינה למטען הייעודי (payload) של ה-XML שבקלט יש תחילית שלא מוגדרת בקובץ ה-XSL.

הסיבה: המטען הייעודי (payload) של קלט XML לא זמין

השגיאה הזו מתרחשת אם המטען הייעודי (payload) של ה-XML שהוזן לא מועבר, או אם המטען הייעודי של ה-XML מועבר כחלק מבקשת ה-API לשרת ה-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). משמעות השגיאה היא שמטען הייעודי (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)\""
    
  2. צריך לקבוע אם המטען הייעודי (payload) ב-XML של הקלט שהועבר כחלק מהבקשה של ריק. אם המטען הייעודי של הקלט לא הועבר או שהוא ריק, זו הסיבה לשגיאה.

    בבקשה לדוגמה שלמטה, המטען הייעודי (payload) של הבקשה (כלומר, גוף הבקשה) שנשלח על ידי המשתמש היה ריק.

    לדוגמה:

    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 הוא מטען ייעודי (payload) חוקי ב-XML, ושהוא לא ריק.

כדי לפתור את הבעיה במדיניות XSLTransform לדוגמה, יש להעביר מטען ייעודי (payload) חוקי ב-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 שגוי

המטען הייעודי (payload) ב-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 ואת הסיבה לכשל. אם המטען הייעודי (payload) של הקלט ב-XML שגוי, הסיבה לכישלון תציין שיש תו לא צפוי. אפשר למצוא את כל המידע הזה ברכיב faultstring של הודעת השגיאה. לדוגמה, בקובץ faultstring הבא, קובץ ה-XSL הוא XSL-Transform.xsl, והסיבה לכשל היא Unexpected char while looking for open tag ('&lt;') character. כלומר, הרכיב '<' חסר במטען הייעודי (payload) של XML.

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    
  2. יש לבדוק את המטען הייעודי (payload) של קלט ה-XML שהועבר למדיניות XSLTransform, ולראות אם יש בו תוכן XML חוקי. אם המטען הייעודי של הקלט הוא לא XML חוקי, זו הסיבה לשגיאה.

    בבקשה לדוגמה שלמטה, המטען הייעודי (payload) של הקלט (כלומר, גוף הבקשה) שנשלח על ידי המשתמש לא היה חוקי.

    לדוגמה:

    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"
    }
    

    מאחר שמטען הייעודי (payload) של הקלט הוא JSON ולא XML חוקי, מתקבלת הודעת השגיאה:

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    

רזולוציה

מוודאים שהקלט שמועבר למדיניות XSLTransform הוא מטען ייעודי (payload) חוקי ב-XML, ושאינו ריק.

כדי לפתור את הבעיה במדיניות XSLTransform לדוגמה, יש להעביר מטען ייעודי (payload) חוקי ב-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
    

הסיבה: הקידומת לא תקינה

המטען הייעודי (payload) של ה-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 ואת הסיבה לכשל. במקרה כזה, הסיבה לכשל מציינת שיש קידומת לא מפוענחת במספר שורה ספציפי במטען הייעודי (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)\""
    
  2. בודקים את התוכן של קובץ ה-XSL (שזוהה בשלב 1 למעלה) ואת המטען הייעודי (payload) של XML. אם הקידומת שמשמשת במספר השורה (שזוהה בשלב 1 למעלה) של המטען הייעודי (payload) של ה-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>&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>
    

    המטען הייעודי (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>&lt;Life&gt;</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>