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 mesaj veya dize değişkeni aşağıdakilerden biriyse oluşur:

  • 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üştürme politikasını ve adını tanımlayın değişkendir. Bu öğelerin ikisini de hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring, politika adı xslt, değişken ise response olur:

    faultstring": "response message is not available for XSL: xslt
    
  2. Başarısız XSL Dönüştürme politikası XML'inde değişkenin adının <Source> öğesindeki set, hatada tanımlanan değişken adıyla eşleşir dize (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 şunlardan biriyse:

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

    hatanın nedeni budur.

    Örneğin, yukarıda gösterilen XSL Dönüşüm politikasının istek akışında çalıştırılması 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

Değişkenin, başarısız XSL Dönüşümü <Source> öğesinde ayarlanmış olduğundan emin olun politikanın uygulandığı akış da tanımlanır ve bu akışta bulunur.

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ı başarısız oluyor/giriş XML dosyasını dönüştüremiyor dönüştürme kurallarına göre değiştirebilirsiniz. XSLTransform politikasının başarısız olmasının birçok farklı nedeni olabilir. Başarısızlığın nedeni nedeni hakkında daha fazla bilgi sağlar. Aşağıdakiler tablosunda bu hatanın nedeninden biri (Geçersiz Önek) listelenmiştir. Bu durumun nedeninin bir örnekle devam edelim.
Neden Açıklama
Giriş XML yükü kullanılamıyor Giriş XML yükü iletilmez veya boş kalmaz.
Hatalı Giriş XML'si Giriş XML yükü bozuk veya geçersiz.
Geçersiz ön ek Giriş XML yükü, XSL dosyasında tanımlanmayan bir öneke sahip.

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

Bu hata, giriş XML yükü iletilmiyorsa veya API isteğinin bir parçası olarak API Proxy'ye iletilen XML yükü XSLTransform politikasına sahipse ve boşsa oluşur.

Ö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ü faultstring içinde bulabilirsiniz. öğesi seçin. Örneğin, aşağıdaki faultstring içinde XSL dosyası XSL-Transform.xsl ve hatanın nedeni Premature end of document while parsing at line 1 (possibly around char 0). Bu hata, XML yükünün iletilmediğini veya boş olduğunu doğrulayın.

        "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 bunun nedeni budur. hata için.

    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ğundan ş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ş bırakılamaz.

Ö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

XSLTransform politikasına yönelik API isteğinin bir parçası olarak aktarılan giriş XML yükü hatalı 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üştürme politikası tarafından değerlendirilemeyen XSL dosyasını tanımlayın daha iyi anlamanızı sağlayabilir. Giriş XML yükü hatalıysa başarısızlığın nedeni, beklenmeyen bir karakter olduğunu gösterir. Tüm bunları faultstring öğesindeki bilgilerdir. Örneğin, faultstring, XSL dosyası XSL-Transform.xsl ve hata için: 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ğine sahip olup olmadığını kontrol edin. Giriş yükü geçerli XML değilse hata bununla ilgilidir.

    Aşağıdaki örnek istekte, giriş yükü (yani istek gövdesi) geçersiz olduğunu fark edebilirsiniz.

    Örneğin:

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

    city.xml burada:

    {
       "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ı, içeriği aşağıdaki gibi XML biçiminde olacak şekilde 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 şekilde, 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ımlanmayan bir öğe içeriyor.

Ö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üştürme politikası tarafından değerlendirilemeyen XSL dosyasını tanımlayın daha iyi anlamanızı sağlayabilir. Bu durumda, başarısızlığın nedeni, giriş XML'sindeki belirli bir satır numarasında çözümlenmemiş bir ön ek bulunduğunu yük. Bu bilgilerin tümünü şu öğenin faultstring öğesinde bulabilirsiniz: hata yanıtı. Örneğin, aşağıdaki faultstring öğesinde XSL dosyası XSL-Transform.xsl; hatanın nedeni Unresolved Prefix ve satır numara 1.

    "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. Ön ek, giriş XML yükü, XSL dosyasında mevcut değil; 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>
    

    XML Yükleyicisi

    <?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 olmadığına dikkat edin. 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>