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

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

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

  • Poza zakresem (niedostępne w ramach konkretnego procesu, w którym jest wykonywana zasada)
  • Nie można rozwiązać (niezdefiniowana)

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 nazwę zmiennej, która jest niedostępna. Oba te elementy znajdziesz w elemencie faultstring 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 zasada przekształcania XSL określa zmienną o nazwie response w elemencie <Source>, 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 przepływie, w którym jest wykonywana zasada XSL Transform.

  4. Jeśli zmienna to:

    • poza zakresem (niedostępne w konkretnym procesie, w którym są wykonywane zasady) lub
    • Nie można rozwiązać (niezdefiniowana)

    to jest przyczyna błędu.

    Załóżmy, że zasada transformacji XSL, która jest widoczna powyżej, ma być wykonywana w przepływie żądania. Pamiętaj, że zmienna response jest używana w elemencie <Source> w przykładowych zasadach. Zmienna response jest dostępna tylko w przepływie odpowiedzi.

    Ponieważ zmienna response nie istnieje w przepływie żądania, otrzymasz kod błędu:

    steps.xsl.XSLSourceMessageNotAvailable
    

Rozdzielczość

Upewnij się, że zmienna ustawiona w elemencie <Source> nieprawidłowej zasady przekształcenia XSL jest zdefiniowana i istnieje w przepływie, w którym jest wykonywana zasada.

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:

  • Dane wejściowe XML są niedostępne lub zniekształcone.
  • Zasada XSLTransform nie może przekształcić wejściowego pliku XML na podstawie reguł przekształcania podanych w pliku XSL. Niepowodzenie reguły XSLTransform może mieć wiele różnych przyczyn. Wyjaśnienie przyczyny niepowodzenia w komunikacie o błędzie zawiera więcej informacji na temat przyczyny. W tabeli poniżej znajdziesz jedną z przyczyn tego błędu – nieprawidłowy prefiks – i objaśniono ją na przykładzie.
Przyczyna Opis
Dane wejściowe w formacie XML niedostępne Dane wejściowe XML nie zostały przekazane lub są puste.
Nieprawidłowy plik XML z danymi wejściowymi Dane wejściowe XML są nieprawidłowe lub błędnie sformatowane.
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. Wskaż plik XSL, który nie mógł zostać oceniony przez zasadę przekształcania XML, oraz przyczynę błędu. Jeśli wejściowy ładunek XML nie został przekazany lub jest pusty, przyczyna błędu będzie wskazywać, że podczas analizy występuje przedwczesny koniec dokumentu. Wszystkie te informacje znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w poniższym faultstring plik XSL ma XSL-Transform.xsl, a przyczyna błędu to 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 dane wejściowe XML przekazane jako część żądania są puste. 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 danych wejściowych 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ść

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

Aby rozwiązać problem z przykładową polityką XSLTransform, prześlij 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

Wejściowy ładunek XML przekazywany jako część żądania do interfejsu API do zasady XSLTransform jest nieprawidłowy lub niedozwolony.

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óry nie mógł zostać oceniony przez zasadę przekształcania XML, oraz przyczynę niepowodzenia. Jeśli kod XML jest nieprawidłowy, przyczyna błędu będzie wskazywać na nieoczekiwany znak. Wszystkie te informacje znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w poniższym faultstring plik XSL ma XSL-Transform.xsl, a przyczyna błędu to Unexpected char while looking for open tag ('&lt;') character. Oznacza to, że w pliku danych XML brakuje elementu „<”.

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    
  2. Sprawdź dane wejściowe XML przekazane do reguły XSLTransform, aby się przekonać, czy zawierają one prawidłowe treści XML. Jeśli ładunek wejściowy nie ma prawidłowego kodu XML, to właśnie jest przyczyną błędu.

    W przykładowym żądaniu poniżej ładunek wejściowy (tj. 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 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. 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 prefiks

Wejściowy ładunek XML przekazany do zasady XSLTransform zawiera element, który nie jest zdefiniowany jako prefiks pliku XSL określony 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óry nie mógł zostać oceniony przez zasadę przekształcania XML, oraz przyczynę 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 (określony w kroku 1 powyżej) wejściowego ładunku XML nie istnieje w pliku XSL, jest to przyczyna błędu.

    Oto przykładowy plik XSL i odpowiadający mu ł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 XML do wprowadzenia

    <?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>. Pamiętaj, że plik XSL nie ma tego prefiksu. Zamiast tego ma prefiks <xsl:text>&lt;Life&gt;</xsl:text>. Dlatego 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 dane wejściowe XML przekazane do zasad XSLTransform zawierają wszystkie formaty elementów zdefiniowane jako prefiksy w pliku XSL używanym w zasadach.

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

Zaktualizowany kod XML danych wejściowych

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