פתרון בעיות של שגיאות בזמן ריצה במדיניות XSLTransform

הדף הזה רלוונטי ל-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> מוגדר למשתנה התגובה, שלא קיים בתהליך הבקשה.

אבחון

  1. מזהים את מדיניות XSLTransform שבה אירעה השגיאה ואת שם המשתנה שלא זמין. אפשר למצוא את שני הפריטים האלה ברכיב faultstring של תגובת השגיאה. לדוגמה, בקטע הבא faultstring, שם המדיניות הוא xslt והמשתנה הוא response:

    faultstring": "response message is not available for XSL: xslt
    
  2. ב-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>
    
  3. קובעים אם המשתנה שמשמש ברכיב <Source> מוגדר וזמין בתהליך שבו מופעלת מדיניות XSLTransform.

  4. אם המשתנה הוא:

    • לא רלוונטי (לא זמין בתהליך הספציפי שבו המדיניות מופעלת) או
    • אי אפשר לפתור (לא מוגדר)

    אז זה הגורם לשגיאה.

    לדוגמה, נניח שמדיניות 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 נכשלת. הסיבה לכישלון בהודעת השגיאה תספק מידע נוסף על הגורם. בטבלה הבאה מפורטת אחת מהסיבות האפשריות לכישלון הזה – קידומת לא תקינה – ומוסברות באמצעות דוגמה.
מטרה תיאור
מטען ה-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"
        }
    }
}

אבחון

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

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

    לדוגמה:

    curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml"
    

    כאשר your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין virtualhosts.hostAliases בקובץ ההחלפות. איך מציינים שינויים בהגדרות

    מכיוון שהמטען הייעודי (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://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 ('&lt;') character\"",
        "detail": {
            "errorcode": "steps.xsl.XSLEvaluationFailed"
        }
    }
}

אבחון

  1. מאתרים את קובץ ה-XSL שלא ניתן להעריך אותו באמצעות מדיניות ה-XML Transform ואת הסיבה לכשל. אם מטען ה-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. בודקים את מטען ה-XML של הקלט שעבר למדיניות XSLTransform כדי לראות אם הוא מכיל תוכן XML תקין. אם מטען הייעוד של הקלט הוא לא 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 ('&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://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"
        }
    }
}

אבחון

  1. מאתרים את קובץ ה-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)\""
    
  2. בודקים את התוכן של קובץ ה-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>&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 הייעודי (payload) שמוצג למעלה מכיל את הרכיב <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>