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

אבחון

  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 בקובץ ההחלפות. איך מציינים שינויים בהגדרות

    מכיוון שמטען הנתונים של קלט ה-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 תקין, זו הסיבה לשגיאה.

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

    לדוגמה:

    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 ואת הסיבה לכשל. במקרה כזה, הסיבה לכישלון תציין שיש קידומת לא פתורה במספר שורה ספציפי במטען הייעודי (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 למעלה) ואת מטען ה-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>