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 şu durumlarda oluşur:

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

Örneğin, XSL Dönüşümü politikasının istek akışında yürütülmesi gerekirken <Source> öğesi istek akışında bulunmayan yanıt değişkenine ayarlanırsa bu hata oluşur.

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, değişken ise response'dir:

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

    <?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, XSL Dönüşümü politikasının yürütüldüğü akışta tanımlanıp tanımlanmadığını ve kullanılabilir olup olmadığını belirleyin.

  4. Değişken şu durumlarda:

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

    Bu durumda hatanın nedeni budur.

    Örneğin, yukarıda gösterilen XSL Dönüşümü 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ı hatırlayın. response değişkeni yalnızca yanıt akışında kullanılabilir.

    response değişkeni istek akışında mevcut olmadığından ş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, 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 ortaya çıkar:

  • 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üremiyor. XSLTransform politikasının başarısız olmasının birçok farklı nedeni olabilir. Hata mesajındaki hata nedeni, neden hakkında daha fazla bilgi sağlar. Aşağıdaki tabloda, bu hatanın nedenlerinden biri olan "Geçersiz Önek" listelenmekte ve bir örnekle açıklanmaktadır.
Neden Açıklama
Giriş XML yükü kullanılamıyor Giriş XML yükü iletilmiyor veya boş.
Hatalı biçimlendirilmiş giriş XML'si Giriş XML yükü hatalı biçimlendirilmiş veya geçersiz.
Geçersiz önek Giriş XML yükünde, XSL dosyasında tanımlanmamış bir önek var.

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

Bu hata, giriş XML yükü iletilmediğinde veya XSLTransform politikasına sahip API Proxy'sine API isteğinin bir parçası olarak iletilen XML yükü boş olduğunda 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ü iletilmezse veya boşsa hata nedeni, ayrıştırma sırasında belgenin erken sonlandırıldığını gösterir. Tüm bu bilgileri hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring içinde 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ünün iletilmediği 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 istekte, kullanıcının gönderdiği 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ü ve boş olmayan bir giriş olduğundan emin olun.

Örnek XSLTransform politikasıyla ilgili sorunu düzeltmek için geçerli bir XML yükü iletin. Ö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'si

XSLTransform politikasına API isteğinin bir parçası olarak iletilen giriş XML yükü hatalı 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üştürme politikası tarafından değerlendirilemeyen XSL dosyasını ve hatanın nedenini belirleyin. Giriş XML yükü hatalı biçimlendirilmişse 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 içinde XSL dosyası XSL-Transform.xsl, başarısızlık nedeni ise Unexpected char while looking for open tag ('&lt;') character'dir. 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ığını kontrol edin. Giriş yükü geçerli bir XML değilse hatanın nedeni budur.

    Aşağıdaki örnek istekte, kullanıcının gönderdiği giriş yükü (yani istek gövdesi) geçersizdir.

    Örneğin:

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

    city.xml şu durumlarda kullanılabilir:

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

    Giriş yükü JSON olduğu ve geçerli XML olmadığı 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ü 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. Dosyayı city.xml aşağıdaki gibi XML biçiminde içerik içerecek şekilde değiştirin:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. API çağrısını aşağıdaki gibi cURL komutunu kullanarak 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ünde, politikada belirtilen XSL dosyasında önek olarak tanımlanmamış bir öğe var.

Ö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, başarısızlık nedeni, giriş XML yükünde belirli bir satır numarasında çözümlenmemiş bir önek olduğunu gösterir. Tüm bu bilgilere hata yanıtının faultstring öğesinden ulaşabilirsiniz. Örneğin, aşağıdaki faultstring içinde XSL dosyası XSL-Transform.xsl, hatanın nedeni Unresolved Prefix ve satır numarası 1'dı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 (yukarıdaki 1. adımda belirtilen) ve giriş XML yükünün içeriğini inceleyin. Giriş XML yükünün satır numarasında (yukarıdaki 1. adımda tanımlanmıştır) kullanılan önek XSL dosyasında yoksa hatanın nedeni budur.

    Aşağıda, hataya neden olan örnek XSL ve karşılık gelen 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çerir. XSL'de bu önek bulunmadığı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 ön ek olarak tanımlanan tüm öğe biçimlerine sahip olduğundan emin olun.

Yukarıda gösterilen örnek XML dosyasını düzeltmek için dosyayı aşağıdaki gibi 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>