การแก้ปัญหาข้อผิดพลาดเกี่ยวกับรันไทม์ของนโยบายการเปลี่ยนรูปแบบ XSL

คุณกำลังดูเอกสารประกอบของ 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"
        }
    }
}

สาเหตุ

ข้อผิดพลาดนี้จะเกิดขึ้นหากตัวแปรข้อความ หรือสตริงที่ระบุในองค์ประกอบ <Source> ของนโยบายการแปลง XSL เป็นอย่างใดอย่างหนึ่งต่อไปนี้

  • ไม่อยู่ในขอบเขต (ไม่พร้อมใช้งานในโฟลว์ที่เฉพาะเจาะจงซึ่งมีการบังคับใช้นโยบาย)
  • ไม่สามารถแก้ไขได้ (ไม่ได้กำหนด)

เช่น ข้อผิดพลาดนี้จะเกิดขึ้นหากนโยบายการแปลง XSL ควรดำเนินการ ในโฟลว์คำขอ แต่ตั้งค่าองค์ประกอบ <Source> เป็นตัวแปรการตอบกลับ ซึ่งไม่มีอยู่ในโฟลว์คำขอ

การวินิจฉัย

  1. ระบุนโยบายการแปลง XSL ที่เกิดข้อผิดพลาดและชื่อ ของตัวแปรที่ใช้ไม่ได้ คุณดูรายการทั้ง 2 รายการนี้ได้ในองค์ประกอบ 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 Transform กำลังดำเนินการอยู่หรือไม่

  4. หากตัวแปรเป็นอย่างใดอย่างหนึ่งต่อไปนี้

    • อยู่นอกขอบเขต (ไม่พร้อมใช้งานในโฟลว์ที่เฉพาะเจาะจงซึ่งมีการดำเนินการตามนโยบาย) หรือ
    • ไม่สามารถแก้ไขได้ (ไม่ได้กำหนด)

    นั่นคือสาเหตุของข้อผิดพลาด

    ตัวอย่างเช่น สมมติว่านโยบายการแปลง XSL ที่แสดงด้านบนควร ดำเนินการในขั้นตอนคำขอ โปรดทราบว่าตัวแปร response ใช้ใน องค์ประกอบ <Source> ของนโยบายตัวอย่าง ตัวแปร response ใช้ได้เฉพาะในขั้นตอนการตอบกลับ

    เนื่องจากตัวแปร response ไม่มีอยู่ในโฟลว์คำขอ คุณจึงได้รับรหัสข้อผิดพลาดต่อไปนี้

    steps.xsl.XSLSourceMessageNotAvailable
    

ความละเอียด

ตรวจสอบว่าตัวแปรที่ตั้งค่าไว้ในองค์ประกอบ <Source> ของนโยบาย XSL Transform ที่ล้มเหลว มีการกำหนดและอยู่ในโฟลว์ที่นโยบายดำเนินการ

หากต้องการแก้ไขนโยบายการแปลง 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 อาจทำงานไม่สำเร็จได้จากหลายสาเหตุ สาเหตุที่ทำให้เกิดข้อผิดพลาด ในข้อความแสดงข้อผิดพลาดจะให้ข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุ ตารางต่อไปนี้แสดงสาเหตุหนึ่งที่ทำให้เกิดข้อผิดพลาดนี้ ซึ่งก็คือ "คำนำหน้าไม่ถูกต้อง" และอธิบายพร้อมตัวอย่าง
สาเหตุ คำอธิบาย
เพย์โหลด XML ของอินพุตไม่พร้อมใช้งาน ไม่ได้ส่งเพย์โหลด XML ที่ป้อนหรือเพย์โหลดว่างเปล่า
XML อินพุตมีรูปแบบไม่ถูกต้อง เพย์โหลด XML ของอินพุตผิดรูปแบบหรือไม่ถูกต้อง
คำนำหน้าไม่ถูกต้อง เพย์โหลด XML อินพุตมีคำนำหน้าที่ไม่ได้กำหนดไว้ในไฟล์ XSL

สาเหตุ: เพย์โหลด XML ของอินพุตไม่พร้อมใช้งาน

ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่ได้ส่งเพย์โหลด XML อินพุต หรือเพย์โหลด XML ที่ส่ง เป็นส่วนหนึ่งของคำขอ 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) ข้อผิดพลาดดังกล่าวหมายความว่า ไม่ได้ส่งเพย์โหลด 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 อินพุตที่ส่งเป็นส่วนหนึ่งของคำขอ ว่างเปล่าหรือไม่ หากไม่ได้ส่งเพย์โหลดอินพุตหรือเพย์โหลดว่างเปล่า นั่นคือสาเหตุ ของข้อผิดพลาด

    ในคำขอตัวอย่างด้านล่าง เพย์โหลดคำขอ (นั่นคือ เนื้อหาคำขอ) ที่ผู้ใช้ส่งมานั้นว่างเปล่า

    เช่น

    curl -v "http://<org>-<env>.apigee.net/v1/xsltransform" -H "Content-Type: application/xml"
    

    เนื่องจากเพย์โหลดอินพุต 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 ที่ถูกต้อง เช่น

  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 ประเมินไม่ได้ และสาเหตุที่ดำเนินการไม่สำเร็จ หากเพย์โหลด XML ของอินพุตมีรูปแบบไม่ถูกต้อง สาเหตุของ ความล้มเหลวจะระบุว่ามีอักขระที่ไม่คาดคิด คุณดูข้อมูลทั้งหมดนี้ได้ในองค์ประกอบ faultstring ของการตอบกลับข้อผิดพลาด เช่น ใน faultstring ต่อไปนี้ ไฟล์ XSL คือ XSL-Transform.xsl และเหตุผล ที่ล้มเหลวคือ Unexpected char while looking for open tag ('&lt;') character กล่าวคือ ไม่มี "<" ในเพย์โหลด 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://<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 ('&lt;') character\""
    

ความละเอียด

ตรวจสอบว่าอินพุตที่ส่งไปยังนโยบาย XSLTransform เป็นเพย์โหลด XML ที่ถูกต้อง และไม่ว่างเปล่า

หากต้องการแก้ไขปัญหาเกี่ยวกับนโยบาย XSLTransform ตัวอย่าง ให้ส่งเพย์โหลด 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
    

สาเหตุ: คำนำหน้าไม่ถูกต้อง

เพย์โหลด 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 และเพย์โหลด 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>
    

    เพย์โหลด 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)\""
    

ความละเอียด

ตรวจสอบว่าเพย์โหลด XML อินพุตที่ส่งไปยังนโยบาย XSLTransform มีรูปแบบองค์ประกอบทั้งหมดที่กำหนดเป็นคำนำหน้าในไฟล์ XSL ที่ใช้ในนโยบาย

หากต้องการแก้ไขไฟล์ XML ตัวอย่างที่แสดงด้านบน คุณสามารถแก้ไขไฟล์ได้ดังที่แสดงด้านล่าง

เพย์โหลด 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>