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

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

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 aşağıdaki durumlarda oluşur:

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

Örneğin bu hata, 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 ayarlanırsa ortaya çıkar.

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 içinde 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üşümü politikası XML'inde, <Source> öğesinde ayarlanan değişken adının, hata dizesinde belirtilen 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 ve bu değişken, hata dizesindeki değerle 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ımlanmış olup olmadığını ve XSL Dönüşümü politikasının yürütülmekte olduğu akışta kullanılabilir olup olmadığını belirleyin.

  4. Değişken şunlardan biriyse:

    • Kapsam dışında (politikanın uygulandığı belirli akışta kullanılamaz) veya
    • Çözümlenemiyor (tanımlanmadı)

    hatanın nedeni budur.

    Örneğin, yukarıda gösterilen XSL Dönüştürme politikasının istek akışında yürütülmesi gerektiğini varsayalım. Örnek politikanın <Source> öğesinde response değişkeninin 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ığı için şu 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 tanımlandığından ve politikanın uygulandığı akışta bulunduğundan emin olun.

Yukarıda gösterilen örnek XSL Dönüşümü politikasını düzeltmek için <Source> öğesini, istek akışında mevcut olduğundan 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 biçimlendirilmiş.
  • XSLTransform politikası başarısız oluyor/XSL dosyasında sağlanan dönüştürme kurallarına göre giriş XML dosyasını dönüştüremiyor. 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 nedenlerinden biri "Geçersiz Önek" yer almaktadır ve bir örnekle açıklamaktadır.
Neden Açıklama
Giriş XML yükü kullanılamıyor Girilen XML yükü geçilmedi veya boş.
Yanlış Biçimlendirilmiş Giriş XML'i Girilen XML yükü hatalı veya geçersiz.
Geçersiz ön ek Girilen XML yükü, XSL dosyasında tanımlanmayan bir ön eke sahip.

Neden: Girilen XML yükü kullanılamıyor

Bu hata, girilen XML yükü iletilmezse veya XSLTransform politikasına sahip API Proxy'sine API isteğinin bir parçası olarak iletilen XML yükü boşsa 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ü iletilmezse veya boş bırakılırsa hatanın nedeni ayrıştırma sırasında belgenin erken sona erdiği anlamına gelir. Tüm bu bilgileri, hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring öğesinde XSL dosyası XSL-Transform.xsl, hatanın nedeni ise Premature end of document while parsing at line 1 (possibly around char 0). Bu hata, XML yükünün ya iletilmediği ya da 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 parçası olarak iletilen giriş XML yükünün boş olup olmadığını belirleyin. Giriş yükü iletilmezse veya boş bırakılırsa hatanın nedeni budur.

    Aşağıdaki örnek istekte, 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ş olmadığından emin olun.

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

  1. Şu içeriğe sahip city.xml adında 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ını yapın:

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

Neden: Hatalı Giriş XML'i

API isteğinin bir parçası olarak XSLTransform politikasına iletilen 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ı ve hatanın nedenini belirleyin. Girilen XML yükü hatalıysa hata 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 öğesinde 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ğine sahip olup olmadığına bakın. Giriş yükü geçerli XML değilse hatanın nedeni budur.

    Aşağıdaki örnek istekte, 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
    

    Burada city.xml:

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

    Giriş yükü JSON olduğundan ve geçerli XML olmadığından ş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ü iletin. Örneğin:

  1. city.xml dosyasını, içeriği XML biçiminde olacak şekilde aşağıda gösterildiği gibi değiştirin:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. cURL komutunu kullanarak aşağıdaki gibi 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 önek

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üştürme 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ümlenmemiş bir önek olduğunu gösterir. Tüm bu bilgileri, hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring öğesinde XSL dosyası XSL-Transform.xsl. Hatanın nedeni Unresolved Prefix ve satır numarası 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ımlanır) ve giriş XML yükünü inceleyin. Giriş XML yükünün satır numarasında kullanılan ön ek (yukarıdaki 1. adımda tanımlanır) XSL dosyasında yoksa hatanın nedeni budur.

    Aşağıda, örnek XSL ve hataya neden olan ilgili XML yükü 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ükü

    <?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çeriyor. XSL'de bu ön eke sahip olmadığına dikkat edin. Bunun yerine <xsl:text>&lt;Life&gt;</xsl:text> önekine sahiptir. 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ımlanmış 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 şekilde değiştirebilirsiniz:

Güncellenen Giriş XML Yükü

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