Rozwiązywanie problemów związanych z błędem zasad przekształcania XSL w czasie działania

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

XSLSourceMessageNotAvailable

Kod błędu

steps.xsl.XSLSourceMessageNotAvailable

Treść odpowiedzi o błędzie

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

Przykładowy komunikat o błędzie

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

Przyczyna

Ten błąd występuje, jeśli zmienna komunikatu lub ciągu znaków określona w elemencie <Source> zasady przekształcania XSL ma jeden z tych stanów:

  • Poza zakresem (niedostępne w konkretnym procesie, w którym jest wykonywana zasada)
  • Nie można rozwiązać (nie określono)

Ten błąd występuje np. wtedy, gdy zasada przekształcania XSL powinna być wykonywana w przepływie żądania, ale element <Source> jest ustawiony na zmienną odpowiedzi, której nie ma w przepływie żądania.

Diagnostyka

  1. Wskaż zasadę transformacji XSL, w której wystąpił błąd, oraz nazwę niedostępnej zmiennej. Oba te elementy znajdziesz w elemencie faultstring odpowiedzi o błędzie. Na przykład w poniższym elemencie faultstring nazwa zasady to xslt, a zmienna to response:

    faultstring": "response message is not available for XSL: xslt
    
  2. W pliku XML zasady przekształcania XSL, którego nie udało się przetworzyć, sprawdź, czy nazwa zestawu zmiennych w elemencie <Source> odpowiada nazwie zmiennej określonej w ciągu błędu (krok 1 powyżej). Na przykład ta zasada przekształcenia XSL określa w elemencie <Source> zmienną o nazwie response, która odpowiada zawartości ciągu błędu:

    <?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. Sprawdź, czy zmienna używana w elemencie <Source> jest zdefiniowana i dostępna w procesie, w którym wykonywana jest zasada przekształcenia XSL.

  4. Jeśli zmienna to:

    • Wykracza poza zakres (niedostępne w konkretnym procesie, w którym jest wykonywana zasada) lub
    • Nie można rozwiązać (nie określono)

    to jest jego przyczyna.

    Załóżmy na przykład, że pokazana powyżej zasada przekształcenia XSL powinna być zrealizowana w ramach przepływu żądania. Pamiętaj, że zmienna response jest używana w elemencie <Source> przykładowej zasady. Zmienna response jest dostępna tylko w procesie odpowiedzi.

    Ponieważ w przepływie żądań nie ma zmiennej response, pojawia się kod błędu:

    steps.xsl.XSLSourceMessageNotAvailable
    

Rozdzielczość

Upewnij się, że zmienna ustawiona w elemencie <Source> nieudanej zasady przekształcenia XSL jest zdefiniowana i istnieje w procesie, w którym jest wykonywana.

Aby poprawić pokazaną powyżej przykładową zasadę przekształcania XSL, możesz zmodyfikować element <Source> tak, aby używał zmiennej request, ponieważ występuje on w przepływie żądania:

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

Kod błędu

steps.xsl.XSLEvaluationFailed

Treść odpowiedzi o błędzie

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

Przykładowy komunikat o błędzie

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

Możliwe przyczyny

Ten błąd występuje, jeśli:

  • Wejściowy ładunek XML jest niedostępny lub błędnie sformatowany.
  • Zasada XSLTransform nie lub nie może przekształcić wejściowego pliku XML na podstawie reguł przekształcania podanych w pliku XSL. Przyczyn niepowodzenia zasady XSLTransform może być wiele. Komunikat o przyczynie błędu będzie zawierał więcej informacji na temat przyczyny niepowodzenia. W tabeli poniżej znajdziesz jedną z przyczyn tego błędu – nieprawidłowy prefiks – oraz objaśniono ją na przykładzie.
Przyczyna Opis
Wejściowy ładunek XML niedostępny Wejściowy ładunek XML nie jest przekazywany lub jest pusty.
Nieprawidłowy format XML wejściowego Wejściowy ładunek XML jest zniekształcony lub nieprawidłowy.
Nieprawidłowy prefiks Wejściowy ładunek XML ma prefiks, który nie został zdefiniowany w pliku XSL.

Przyczyna: wejściowy ładunek XML jest niedostępny

Ten błąd występuje, jeśli ładunek XML nie zostanie przekazany lub ładunek XML przekazany w ramach żądania interfejsu API do serwera proxy interfejsu API z zasadą XSLTransform jest pusty.

Przykładowy komunikat o błędzie

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

Diagnostyka

  1. Wskaż plik XSL, którego nie udało się ocenić za pomocą zasady przekształcania XML, oraz wskaż przyczynę niepowodzenia. Jeśli wejściowy ładunek XML nie zostanie przekazany lub będzie pusty, przyczyna błędu będzie wskazywać, że podczas analizy dokument miał przedwczesny koniec. Wszystkie te informacje znajdziesz w elemencie faultstring odpowiedzi o błędzie. Na przykład w poniższym przykładzie faultstring plik XSL to XSL-Transform.xsl, a przyczyną niepowodzenia jest Premature end of document while parsing at line 1 (possibly around char 0). Ten błąd oznacza, że ładunek XML nie został przekazany lub jest pusty.

        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\""
    
  2. Określ, czy wejściowy ładunek XML, który został przekazany w ramach żądania, jest pusty. Jeśli ładunek wejściowy nie został przekazany lub jest pusty, jest to przyczyna błędu.

    W przykładowym żądaniu poniżej ładunek żądania (tj. treść żądania) wysłany przez użytkownika był pusty.

    Na przykład:

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

    Ponieważ ładunek wejściowy XML jest pusty, pojawia się błąd:

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

Rozdzielczość

Sprawdź, czy dane wejściowe przekazywane do zasady XSLTransform są prawidłowym ładunkiem XML i nie są puste.

Aby rozwiązać problem z przykładową zasadą XSLTransform, przekaż prawidłowy ładunek XML. Na przykład:

  1. Utwórz plik o nazwie city.xml z tą zawartością:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Wywołaj interfejs API za pomocą polecenia cURL w ten sposób:

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

Przyczyna: nieprawidłowy format danych wejściowych XML

Wejściowy ładunek XML przekazany w ramach żądania interfejsu API do zasady XSLTransform jest uszkodzony lub nieprawidłowy.

Przykładowy komunikat o błędzie

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

Diagnostyka

  1. Wskaż plik XSL, którego nie udało się ocenić przez zasadę przekształcania XML, oraz wskaż przyczynę niepowodzenia. Jeśli wejściowy ładunek XML ma nieprawidłowy format, przyczyna niepowodzenia będzie wskazywać na nieoczekiwany znak. Wszystkie te informacje znajdziesz w elemencie faultstring odpowiedzi błędu. Na przykład w polu faultstring plik XSL to XSL-Transform.xsl, a przyczyna niepowodzenia to Unexpected char while looking for open tag ('&lt;') character. Oznacza to, że w ładunku XML brakuje elementu „<”.

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    
  2. Sprawdź wejściowe dane XML przekazane do zasady XSLTransform i upewnij się, że zawierają prawidłowe treści w formacie XML. Jeśli ładunek wejściowy nie jest prawidłowym kodem XML, to właśnie jest przyczyną błędu.

    W przykładowym żądaniu poniżej ładunek wejściowy (czyli treść żądania), który został wysłany przez użytkownika, był nieprawidłowy.

    Na przykład:

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

    Gdzie city.xml to:

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

    Ponieważ ładunek wejściowy jest w formacie JSON, a nie jest prawidłowym kodem XML, pojawia się błąd:

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

Rozdzielczość

Upewnij się, że dane wejściowe przekazywane do zasady XSLTransform są prawidłowym ładunkiem XML i nie są puste.

Aby rozwiązać problem z przykładową zasadą XSLTransform, przekaż prawidłowy ładunek XML. Na przykład:

  1. Zmodyfikuj plik city.xml tak, aby jego zawartość była podana w formacie XML, jak pokazano poniżej:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Wywołaj interfejs API za pomocą polecenia cURL w ten sposób:

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

Przyczyna: nieprawidłowy prefiks

Wejściowy ładunek XML przekazany do zasady XSLTransform zawiera element, który nie jest zdefiniowany jako prefiks w pliku XSL określonym w zasadzie.

Przykładowy komunikat o błędzie

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

Diagnostyka

  1. Wskaż plik XSL, którego nie udało się ocenić za pomocą zasady transformacji XML, oraz podaj przyczynę niepowodzenia. W tym przypadku przyczyna niepowodzenia wskazuje, że w określonym numerze wiersza w wejściowym ładunku XML występuje nierozstrzygnięty prefiks. Wszystkie te informacje znajdziesz w elemencie faultstring odpowiedzi o błędzie. Na przykład w poniższym przykładzie faultstring plik XSL to XSL-Transform.xsl, a przyczyną błędu jest Unresolved Prefix, a numer wiersza to 1.

    "faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\""
    
  2. Sprawdź zawartość pliku XSL (określonego w kroku 1 powyżej) i wejściowy ładunek XML. Jeśli prefiksu używanego w numerze wiersza (zidentyfikowanym w kroku 1 powyżej) wejściowego ładunku XML nie ma w pliku XSL, to jest przyczyną błędu.

    Oto przykładowy plik XSL i odpowiedni ładunek XML, który spowodował błąd:

    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>
    

    Wejściowy ładunek 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>
    

    Przykładowy ładunek XML pokazany powyżej zawiera element <Life:Books>. Zwróć uwagę, że kod XSL nie ma tego prefiksu. Zamiast tego ma prefiks <xsl:text>&lt;Life&gt;</xsl:text>. W związku z tym pojawia się błąd:

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

Rozdzielczość

Upewnij się, że wejściowy ładunek XML przekazany do zasady XSLTransform zawiera wszystkie formaty elementów zdefiniowane jako prefiksy w pliku XSL używanym w zasadzie.

Aby poprawić przykładowy plik XML pokazany powyżej, możesz zmodyfikować plik w następujący sposób:

Zaktualizowano ładunek wejściowego kodu XML

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