פתרון בעיות בזמן ריצה של מדיניות XSL Transform

אתם צופים במסמכי העזרה של Apigee Edge.
כניסה למסמכי העזרה של Apigee X.
info

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 אמורה להתבצע. בתהליך הבקשה, אבל הרכיב <Source> מוגדר למשתנה התגובה, שלא קיימים בתהליך הבקשה.

אבחון

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

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

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

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

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

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

    בבקשה לדוגמה שבהמשך, המטען הייעודי (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, צריך להעביר עומס נתונים חוקי של 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 של הקלט שגוי

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

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

    מטען הייעודי (payload) לדוגמה ב-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)\""
    

רזולוציה

חשוב לוודא שלמטע הטעינה של ה-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>