Pemecahan masalah error runtime kebijakan XSLTransform

Anda sedang melihat dokumentasi Apigee dan Apigee Hybrid.
Lihat dokumentasi Apigee Edge.

XSLSourceMessageNotAvailable

Kode error

steps.xsl.XSLSourceMessageNotAvailable

Isi respons error

{
    "fault": {
        "faultstring": "response message is not available for XSL: policy_name",
        "detail": {
            "errorcode": "steps.xsl.XSLSourceMessageNotAvailable"
        }
    }
}

Contoh Pesan Error

{
    "fault": {
        "faultstring": "response message is not available for XSL: xslt",
        "detail": {
            "errorcode": "steps.xsl.XSLSourceMessageNotAvailable"
        }
    }
}

Penyebab

Error ini terjadi jika message atau variabel string yang ditentukan dalam elemen <Source> dari kebijakan XSLTransform:

  • Di luar cakupan (tidak tersedia di alur spesifik tempat kebijakan sedang dijalankan)
  • Tidak dapat diselesaikan (tidak ditentukan)

Misalnya, error ini terjadi jika kebijakan XSLTransform seharusnya dijalankan dalam alur permintaan, tetapi elemen <Source> disetel ke variabel respons, yang tidak ada dalam alur permintaan.

Diagnosis

  1. Identifikasi kebijakan XSLTransform tempat error terjadi dan nama variabel yang tidak tersedia. Anda dapat menemukan kedua item ini dalam elemen faultstring respons error. Misalnya, dalam faultstring berikut, nama kebijakannya adalah xslt dan variabelnya adalah response:

    faultstring": "response message is not available for XSL: xslt
    
  2. Pada XML kebijakan XSLTransform yang gagal, verifikasi bahwa nama variabel yang ditetapkan dalam elemen <Source> cocok dengan nama variabel yang diidentifikasi dalam string kesalahan (langkah #1 di atas). Misalnya, kebijakan XSLTransform berikut menentukan variabel bernama response dalam elemen <Source>, yang cocok dengan yang ada di string kesalahan:

    <?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. Tentukan apakah variabel yang digunakan dalam elemen <Source> telah ditetapkan dan tersedia dalam alur tempat kebijakan XSLTransform dijalankan.

  4. Jika variabelnya adalah:

    • Di luar cakupan (tidak tersedia di alur spesifik tempat kebijakan dijalankan) atau
    • Tidak dapat diselesaikan (tidak ditentukan)

    maka itulah penyebab {i>error.<i}

    Sebagai contoh, kebijakan XSLTransform yang ditampilkan di atas seharusnya dijalankan dalam alur permintaan. Ingat kembali bahwa variabel response digunakan dalam elemen <Source> dari kebijakan contoh. Variabel response hanya tersedia di alur respons.

    Karena variabel response tidak ada dalam alur permintaan, Anda akan menerima kode error:

    steps.xsl.XSLSourceMessageNotAvailable
    

Resolusi

Pastikan variabel yang ditetapkan dalam elemen <Source> dari kebijakan XSLTransform yang gagal, ditentukan dan ada dalam alur tempat kebijakan dijalankan.

Untuk memperbaiki contoh kebijakan XSLTransform yang ditampilkan di atas, Anda dapat mengubah elemen <Source> untuk menggunakan variabel request, karena variabel tersebut ada dalam alur permintaan:

<?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

Kode error

steps.xsl.XSLEvaluationFailed

Isi respons error

{
  "fault": {
      "faultstring": "Evaluation of XSL <var>XSL_file_name</var> failed with reason: \"<var>reason_for_failure</var>",
      "detail": {
          "errorcode": "steps.xsl.XSLEvaluationFailed"
      }
  }
}

Contoh Pesan Error

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

Kemungkinan penyebab

Error ini terjadi jika:

  • Payload XML input tidak tersedia/salah format.
  • Kebijakan XSLTransform gagal/tidak dapat mengubah file XML input berdasarkan aturan transformasi yang diberikan dalam file XSL. Ada banyak penyebab gagalnya kebijakan XSLTransform. Alasan kegagalan dalam pesan error akan memberikan informasi selengkapnya tentang penyebabnya. Tabel berikut mencantumkan salah satu penyebab kegagalan ini - Awalan Tidak Valid - dan dijelaskan dengan contoh.
Penyebab Deskripsi
Payload XML input tidak tersedia Payload XML input tidak diteruskan atau kosong.
Format XML Input Salah Format payload XML input salah atau tidak valid.
Awalan tidak valid Payload XML input memiliki awalan yang tidak ditetapkan di file XSL.

Penyebab: Payload XML input tidak tersedia

Error ini terjadi jika payload XML input tidak diteruskan atau payload XML yang diteruskan sebagai bagian dari permintaan API ke Proxy API yang memiliki kebijakan XSLTransform kosong.

Contoh Pesan Error

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

Diagnosis

  1. Identifikasi file XSL yang tidak dapat dievaluasi oleh kebijakan Transformasi XML dan alasan kegagalan. Jika payload XML input tidak diteruskan atau kosong, alasan kegagalan akan menunjukkan bahwa ada akhir Prematur dokumen saat mengurai. Anda dapat menemukan semua informasi ini di elemen faultstring respons error. Misalnya, dalam faultstring berikut, file XSL adalah XSL-Transform.xsl, dan alasan kegagalan adalah Premature end of document while parsing at line 1 (possibly around char 0). Error tersebut berarti payload XML tidak diteruskan atau kosong.

        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\""
    
  2. Tentukan apakah payload XML input yang telah diteruskan sebagai bagian dari permintaan kosong. Jika payload input tidak diteruskan atau kosong, berarti itulah penyebab error.

    Dalam contoh permintaan di bawah ini, payload permintaan (yaitu, isi permintaan) yang dikirim oleh pengguna kosong.

    Contoh:

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

    Dengan your_host_alias adalah domain yang ditampilkan kepada publik yang digunakan untuk mengakses API Anda, seperti yang dikonfigurasi di properti virtualhosts.hostAliases di file penggantian Anda. Lihat Menentukan penggantian konfigurasi.

    Karena payload input XML kosong, Anda menerima error:

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\""
    

Resolusi

Pastikan input yang diteruskan ke kebijakan XSLTransform adalah payload XML yang valid dan tidak kosong.

Untuk memperbaiki masalah pada contoh kebijakan XSLTransform, teruskan payload XML yang valid. Contoh:

  1. Buat file bernama city.xml dengan konten berikut:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Buat panggilan API menggunakan perintah curl seperti berikut:

    curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

    Dengan your_host_alias adalah domain yang ditampilkan kepada publik yang digunakan untuk mengakses API Anda, seperti yang dikonfigurasi di properti virtualhosts.hostAliases di file penggantian Anda. Lihat Menentukan penggantian konfigurasi.

Penyebab: Format XML Input Salah

Payload XML input yang diteruskan sebagai bagian dari permintaan API ke kebijakan XSLTransform memiliki format yang salah atau tidak valid.

Contoh Pesan Error

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

Diagnosis

  1. Identifikasi file XSL yang tidak dapat dievaluasi oleh kebijakan Transformasi XML dan alasan kegagalan. Jika format payload XML input salah, alasan kegagalan akan menunjukkan adanya karakter yang tidak terduga. Anda dapat menemukan semua informasi ini dalam elemen faultstring respons error. Misalnya, dalam faultstring berikut, file XSL adalah XSL-Transform.xsl, dan alasan kegagalannya adalah Unexpected char while looking for open tag ('&lt;') character. Artinya, "<" tidak ada dalam payload XML.

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    
  2. Periksa payload XML input yang diteruskan ke kebijakan XSLTransform dan lihat apakah memiliki konten XML yang valid atau tidak. Jika payload input bukan XML yang valid, maka itulah penyebab error.

    Dalam contoh permintaan di bawah ini, payload input (yaitu, isi permintaan) yang dikirim oleh pengguna tidak valid.

    Contoh:

    curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

    Dengan your_host_alias adalah domain yang ditampilkan kepada publik yang digunakan untuk mengakses API Anda, seperti yang dikonfigurasi di properti virtualhosts.hostAliases di file penggantian Anda. Lihat Menentukan penggantian konfigurasi.

    Dalam contoh ini, city.xml ditentukan sebagai:

    {
       "City": "Bengaluru",
       "Name": "Apigee",
       "Pincode": "560016"
    }
    

    Karena payload input adalah JSON dan bukan XML yang valid, Anda akan menerima error:

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

Resolusi

Pastikan input yang diteruskan ke kebijakan XSLTransform adalah payload XML yang valid dan tidak kosong.

Untuk memperbaiki masalah pada contoh kebijakan XSLTransform, teruskan payload XML yang valid. Contoh:

  1. Ubah file city.xml agar memiliki konten dalam XML seperti yang ditunjukkan di bawah:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Buat panggilan API menggunakan perintah curl seperti berikut:

    curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

    Dengan your_host_alias adalah domain yang ditampilkan kepada publik yang digunakan untuk mengakses API Anda, seperti yang dikonfigurasi di properti virtualhosts.hostAliases di file penggantian Anda. Lihat Menentukan penggantian konfigurasi.

Penyebab: Awalan tidak valid

Payload XML input yang diteruskan ke kebijakan XSLTransform memiliki elemen yang tidak ditetapkan sebagai awalan dalam file XSL yang ditentukan dalam kebijakan.

Contoh Pesan Error

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

Diagnosis

  1. Identifikasi file XSL yang tidak dapat dievaluasi oleh kebijakan Transformasi XML dan alasan kegagalan. Dalam hal ini, alasan kegagalan akan menunjukkan bahwa ada awalan yang belum terselesaikan di nomor baris tertentu dalam payload XML input. Anda dapat menemukan semua informasi ini di elemen faultstring respons error. Misalnya, dalam faultstring berikut, file XSL adalah XSL-Transform.xsl, dan alasan kegagalannya adalah Unresolved Prefix dan nomor barisnya adalah 1.

    "faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\""
    
  2. Periksa konten file XSL (yang diidentifikasi pada langkah #1 di atas) dan payload XML input. Jika awalan yang digunakan dalam nomor baris (diidentifikasi pada langkah #1 di atas) payload XML input tidak ada dalam file XSL, itulah penyebab error.

    Berikut adalah contoh XSL dan payload XML terkait yang menyebabkan error:

    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>
    

    Input 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>
    

    Contoh payload XML yang ditampilkan di atas berisi elemen <Life:Books>. Perhatikan bahwa XSL tidak memiliki awalan ini. Sebagai gantinya, terdapat awalan sebagai <xsl:text>&lt;Life&gt;</xsl:text>. Oleh karena itu, Anda mendapatkan error:

    "faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\""
    

Resolusi

Pastikan payload XML input yang diteruskan ke kebijakan XSLTransform memiliki semua format elemen yang ditentukan sebagai awalan dalam file XSL yang digunakan dalam kebijakan.

Untuk memperbaiki contoh file XML yang ditampilkan di atas, Anda dapat mengubah file seperti yang ditunjukkan di bawah ini:

Payload XML Input yang Diperbarui

<?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>