XSL Dönüşümü politikası çalışma zamanı hatası sorunlarını giderme

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
info

XSLSourceMessageNotAvailable

Hata kodu

steps.xsl.XSLSourceMessageNotAvailable

Hata yanıtı gövdesi

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

Örnek Hata Mesajı

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

Neden

Bu hata, XSL Dönüşüm politikasının <Source> öğesinde belirtilen message veya dize değişkeni şunlardan biri olduğunda ortaya çıkar:

  • Kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz)
  • Çözümlenemez (tanımlanmamıştır)

Örneğin, XSL Dönüşüm politikasının istek akışında yürütülmesi gerekiyorsa ancak <Source> öğesi, istek akışında bulunmayan yanıt değişkenine ayarlanmışsa bu hata meydana gelir.

Teşhis

  1. Hatanın oluştuğu XSL Dönüşüm politikasını ve kullanılamayan değişkenin adını belirleyin. Bu öğelerin ikisini de hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring'te politika adı xslt ve değişken response'dir:

    faultstring": "response message is not available for XSL: xslt
    
  2. Başarısız XSL Dönüştürme politikası XML'inde, <Source> öğesinde ayarlanan değişken adının, hata dizesinde tanımlanan değişken adıyla eşleştiğini doğrulayın (yukarıdaki 1. adım). Örneğin, aşağıdaki XSL Dönüşüm politikası, <Source> öğesinde response adlı bir değişken belirtir. Bu değişken, hata dizesindekiyle eşleşir:

    <?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> öğesinde kullanılan değişkenin tanımlanıp tanımlanmadığını ve XSL Dönüşüm politikasının yürütüldüğü akışta kullanılıp kullanılamayacağını belirleyin.

  4. Değişken şu durumlarda:

    • Kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
    • Çözümlenemez (tanımlanmamıştır)

    Bu durumda, hatanın nedeni budur.

    Örnek olarak, yukarıda gösterilen XSL Dönüştürme politikasının istek akışında yürütülmesi gerektiğini varsayalım. response değişkeninin örnek politikanın <Source> öğesinde kullanıldığını unutmayın. response değişkeni yalnızca yanıt akışında kullanılabilir.

    response değişkeni istek akışında bulunmadığından aşağıdaki hata kodunu alırsınız:

    steps.xsl.XSLSourceMessageNotAvailable
    

Çözünürlük

Başarısız XSL Dönüşüm politikasının <Source> öğesinde ayarlanan değişkenin, politikanın yürütüldüğü akışta tanımlandığından ve bulunduğundan emin olun.

Yukarıda gösterilen örnek XSL Dönüşüm politikasını düzeltmek için <Source> öğesini, istek akışında bulunduğu için request değişkenini kullanacak şekilde değiştirebilirsiniz:

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

Hata kodu

steps.xsl.XSLEvaluationFailed

Hata yanıtı gövdesi

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

Örnek Hata Mesajı

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

Olası nedenler

Bu hata aşağıdaki durumlarda oluşur:

  • Giriş XML yükü kullanılamıyor/bozuk.
  • XSLTransform politikası, XSL dosyasında sağlanan dönüştürme kurallarına göre giriş XML dosyasını dönüştüremez. XSLTransform politikasının başarısız olmasının birçok farklı nedeni olabilir. Hata mesajındaki hatanın nedeni, hatanın nedeni hakkında daha fazla bilgi sağlar. Aşağıdaki tabloda, bu hatanın nedeni olan Geçersiz Önek listelenmekte olup bir örnekle açıklanmıştır.
Neden Açıklama
Giriş XML yükü kullanılamıyor Giriş XML yükü iletilmiyor veya boş.
Yanlış biçimlendirilmiş giriş XML'i Giriş XML yükü bozuk veya geçersiz.
Geçersiz ön ek Giriş XML yükü, XSL dosyasında tanımlanmayan bir ön eke sahip.

Neden: Giriş XML yükü kullanılamıyor

Bu hata, giriş XML yükü iletilmezse veya API isteğinin bir parçası olarak XSLTransform politikasına sahip API Proxy'sine iletilen XML yükü boş olduğunda ortaya çıkar.

Örnek Hata Mesajı

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

Teşhis

  1. XML Dönüşüm politikası tarafından değerlendirilemeyen XSL dosyasını ve hatanın nedenini belirleyin. Giriş XML yükü iletilmiyorsa veya boşsa hatanın nedeni, ayrıştırma sırasında dokümanın erken sonlandırıldığını gösterir. Bu bilgilerin tümünü hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring dosyasında XSL dosyası XSL-Transform.xsl, hatanın nedeni ise Premature end of document while parsing at line 1 (possibly around char 0)'dir. Bu hata, XML yükü aktarılmadığı veya boş olduğu anlamına gelir.

        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\""
    
  2. İsteğin bir parçası olarak iletilen giriş XML yükünün boş olup olmadığını belirleyin. Giriş yükü iletilmezse veya boşsa hatanın nedeni budur.

    Aşağıdaki örnek isteğinde, kullanıcı tarafından gönderilen istek yükü (yani istek gövdesi) boştu.

    Örneğin:

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

    XML giriş yükü boş olduğu için şu hatayı alırsınız:

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

Çözünürlük

XSLTransform politikasına iletilen girişin geçerli bir XML yükü olduğundan ve boş olmadığından emin olun.

Örnek XSLTransform politikasıyla ilgili sorunu düzeltmek için geçerli bir XML yükü gönderin. Örneğin:

  1. Aşağıdaki içeriğe sahip city.xml adlı bir dosya oluşturun:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Aşağıdaki gibi bir cURL komutu kullanarak API çağrısı yapın:

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

Neden: Yanlış biçimlendirilmiş giriş XML'i

API isteği kapsamında XSLTransform politikasına iletilen giriş XML yükü yanlış biçimlendirilmiş veya geçersiz.

Örnek Hata Mesajı

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

Teşhis

  1. XML Dönüşüm Politikası tarafından değerlendirilemeyen XSL dosyasını ve hatanın nedenini belirleyin. Giriş XML yükü yanlış biçimlendirilmişse hatanın nedeni beklenmeyen bir karakter olduğunu gösterir. Tüm bu bilgileri hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring'te XSL dosyası XSL-Transform.xsl, hatanın nedeni ise Unexpected char while looking for open tag ('&lt;') character. Yani XML yükünde "<" eksik.

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    
  2. XSLTransform politikasına iletilen giriş XML yükünü inceleyin ve geçerli XML içeriği olup olmadığına bakın. Giriş yükü geçerli XML değilse hata bununla ilgilidir.

    Aşağıdaki örnek isteğinde, kullanıcı tarafından gönderilen giriş yükü (yani istek gövdesi) geçersizdi.

    Örneğin:

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

    Buradaki city.xml:

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

    Giriş yükü geçerli bir XML değil JSON olduğu için şu hatayı alırsınız:

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

Çözünürlük

XSLTransform politikasına iletilen girişin geçerli bir XML yükü olduğundan ve boş olmadığından emin olun.

Örnek XSLTransform politikasıyla ilgili sorunu düzeltmek için geçerli bir XML yükü gönderin. Örneğin:

  1. city.xml dosyasını, XML'deki içeriğin aşağıda gösterildiği gibi olması için değiştirin:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Aşağıdaki gibi cURL komutunu kullanarak API çağrısı yapın:

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

Neden: Geçersiz ön ek

XSLTransform politikasına iletilen giriş XML yükü, politikada belirtilen XSL dosyasında önek olarak tanımlanmamış bir öğeye sahip.

Örnek Hata Mesajı

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

Teşhis

  1. XML Dönüşüm Politikası tarafından değerlendirilemeyen XSL dosyasını ve hatanın nedenini belirleyin. Bu durumda, hatanın nedeni, giriş XML yükündeki belirli bir satır numarasında çözülmemiş bir ön ek olduğunu gösterir. Bu bilgilerin tümünü hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring'te XSL dosyası XSL-Transform.xsl, hatanın nedeni Unresolved Prefix ve satır numarası 1'tır.

    "faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\""
    
  2. XSL dosyasının içeriğini (yukarıdaki 1. adımda tanımlanmıştır) ve giriş XML yükü'nü inceleyin. Giriş XML yükü satır numarasında (yukarıdaki 1. adımda tanımlanmıştır) kullanılan ön ek XSL dosyasında yoksa hatanın nedeni budur.

    Hataya neden olan örnek XSL ve ilgili XML yükü aşağıda verilmiştir:

    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>
    

    Giriş XML Yükleyici

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

    Yukarıda gösterilen örnek XML yükü bir <Life:Books> öğesi içerir. XSL'de bu ön ekin bulunmadığını unutmayın. Bunun yerine <xsl:text>&lt;Life&gt;</xsl:text> ön ekiyle başlar. Bu nedenle şu hatayı alırsınız:

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

Çözünürlük

XSLTransform politikasına iletilen giriş XML yükünün, politikada kullanılan XSL dosyasında önek olarak tanımlanan tüm öğe biçimlerini içerdiğinden emin olun.

Yukarıda gösterilen örnek XML dosyasını düzeltmek için dosyayı aşağıda gösterildiği gibi değiştirebilirsiniz:

Güncellenen Giriş XML Yükleyicisi

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