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

Wyświetlasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

XSLSourceMessageNotAvailable

Kod błędu

steps.xsl.XSLSourceMessageNotAvailable

Treść odpowiedzi na błąd

{
    "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 wiadomość lub zmienna ciągu podana w elemencie <Source> zasady przekształcania XSL to:

  • Poza zakresem (niedostępne w konkretnym procesie, w którym są realizowane zasady)
  • Nie można go rozwiązać (nie jest zdefiniowany)

Ten błąd występuje na przykład, gdy w przepływie żądania ma być wykonana zasada transformacji XSL, ale element <Source> jest ustawiony na zmienną odpowiedzi, która nie istnieje w przepływie żądania.

Diagnostyka

  1. Wskaż zasadę transformacji XSL, w której wystąpił błąd, oraz podaj jej nazwę zmiennej, która jest niedostępna. Oba te elementy znajdziesz w faultstring element odpowiedzi na błąd. Na przykład w tym wyrażeniu faultstring nazwa zasad to xslt, a zmienna to response:

    faultstring": "response message is not available for XSL: xslt
    
  2. W pliku XML zasad przekształcenia XSL, które nie przeszło weryfikacji, sprawdź, czy nazwa zmiennej w elemencie <Source> odpowiada nazwie zmiennej wskazanej w ciągu znaków błędu (krok 1 powyżej). Na przykład ta polityka transformacji XSL określa w elemencie <Source> zmienną o nazwie response, która odpowiada wartości w ciągu błędów:

    <?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 przepływie, w którym jest wykonywana zasada XSL Transform.

  4. Jeśli zmienna jest:

    • Poza zakresem (niedostępne w konkretnym procesie, w którym obowiązują zasady) wykonano) lub
    • Nie można rozwiązać (niezdefiniowana)

    to jest jego przyczyną.

    Na przykład załóżmy, że przedstawiona powyżej zasada przekształcenia XSL powinna wykonywać w przepływie żądania. Pamiętaj, że zmienna response jest używana w elementu <Source> przykładowej zasady. Zmienna response ma postać są dostępne tylko w przepływie odpowiedzi.

    Zmienna response nie występuje w przepływie żądania, więc otrzymujesz kod błędu:

    steps.xsl.XSLSourceMessageNotAvailable
    

Rozdzielczość

Upewnij się, że zmienna określona w elemencie <Source> w zasadach, w których nie udało się przekształcić kodu XSL, jest zdefiniowana i występuje w przepływie, w którym są wykonywane zasady.

Aby poprawić przykładową zasadę transformacji XSL pokazaną powyżej, możesz zmodyfikować element <Source>, aby używał zmiennej request, ponieważ występuje ona 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 na błąd

{
  "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/nieprawidłowo sformatowany.
  • Zasada XSLTransform kończy się niepowodzeniem lub nie można przekształcić wejściowego pliku XML na podstawie reguł przekształcania zawartych w pliku XSL. Niepowodzenie reguły XSLTransform może mieć wiele różnych przyczyn. powód niepowodzenia. zawiera więcej informacji o przyczynie. Poniżej tabela zawiera jedną z takich przyczyn tego błędu – Nieprawidłowy prefiks .
Przyczyna Opis
Wejściowa ładunek XML jest niedostępny Dane wejściowe XML nie zostały przekazane lub są puste.
Uszkodzony kod XML wejściowy Wejściowy ładunek XML jest uszkodzony lub nieprawidłowy.
Nieprawidłowy prefiks Dane wejściowe w pliku XML mają prefiks, który nie jest zdefiniowany w pliku XSL.

Przyczyna: dane wejściowe XML są niedostępne

Ten błąd występuje, gdy nie przekazano danych wejściowych w formacie XML lub gdy dane wejściowe w formacie XML przekazane w ramach żądania interfejsu API do interfejsu API Proxy z zasadami XSLTransform są puste.

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. Zidentyfikuj plik XSL, którego nie można było ocenić przez przekształcenie XML zasad i przyczyny niepowodzenia. Jeśli dane wejściowe XML nie zostaną przekazane lub są puste, przyczyna niepowodzenia będzie wskazywać na przedwczesne zakończenie dokumentu podczas analizowania. Wszystkie te informacje znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w tym elemencie faultstring atrybut Plik XSL ma format XSL-Transform.xsl, a przyczyna niepowodzenia to Premature end of document while parsing at line 1 (possibly around char 0). Ten błąd oznacza, że ż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 został przekazany w ramach żądania Element z 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 (czyli 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, występuje 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 to prawidłowy ładunek XML oraz niepuste.

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. Wykonaj wywołanie interfejsu 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 w formacie XML

Dane wejściowe XML przekazane jako część żądania interfejsu API do reguły XSLTransform są nieprawidłowe lub mają nieprawidłowy format.

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. Określ plik XSL, którego nie udało się przetworzyć na podstawie zasad dotyczących przetwarzania XML, oraz przyczynę niepowodzenia. Jeśli wejściowy ładunek XML ma nieprawidłowy format, przyczyną oznacza niespodziewany znak. Znajdziesz to wszystko informacje w elemencie faultstring odpowiedzi na błąd. Na przykład w następującym komunikacie faultstring plik XSL to XSL-Transform.xsl, a przyczyna błędu to Unexpected char while looking for open tag ('&lt;') character. Oznacza to, że „<” brakuje w ładunku XML.

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    
  2. Sprawdź wejściowy ładunek XML przekazany do zasady XSLTransform i zobacz, czy ma prawidłową treść XML. Jeśli ładunek wejściowy nie jest prawidłowym kodem XML, to informacje o przyczynie błędu.

    W przykładowym żądaniu poniżej ładunek wejściowy (czyli treść żądania) 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 nieprawidłowy 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 przekazane do reguły 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, aby zawierał zawartość 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łanie interfejsu API przy użyciu polecenia cURL w następujący 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

Dane wejściowe w formacie XML przekazane do reguły XSLTransform zawierają 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. Zidentyfikuj plik XSL, którego nie mogła ocenić zasada przekształcania XML i przyczynie niepowodzenia. W tym przypadku przyczyna błędu wskazuje, że w danym wierszu w danych wejściowych XML występuje nierozwiązany prefiks. Wszystkie te informacje znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w pliku faultstring plik XSL to XSL-Transform.xsl, a przyczyna błędu to 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 (zidentyfikowanego w kroku 1 powyżej) i wejściowy ładunek XML. Jeśli prefiks używany w numerze wiersza (podany w kroku 1 powyżej) wiersza ponieważ wejściowy ładunek XML nie istnieje w pliku XSL, to właśnie to jest przyczyną błędu.

    Oto przykładowy plik XSL i odpowiedni ładunek XML, który powoduje 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>
    

    Dane wejściowe w formacie 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 plik 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ść

Sprawdź, czy wejściowy ładunek XML przekazany do zasady XSLTransform ma wszystkie formaty elementów zdefiniowane jako prefiksy w pliku XSL używanym w zasadzie.

Aby naprawić powyższy przykładowy plik XML, możesz go zmodyfikować w ten sposób:

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