Fehlerbehebung bei der Laufzeit von XSL-Transformationsrichtlinien

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

XSLSourceMessageNotAvailable

Fehlercode

steps.xsl.XSLSourceMessageNotAvailable

Fehlerantworttext

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

Beispiel für Fehlermeldung

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

Ursache

Dieser Fehler tritt auf, wenn die Nachricht oder Stringvariable, die im Element <Source> der XSL-Transformationsrichtlinie angegeben ist, einen der folgenden Werte hat:

  • Wert liegt außerhalb des Bereichs (nicht in dem spezifischen Ablauf verfügbar, in dem die Richtlinie ausgeführt wird)
  • Der Wert kann nicht aufgelöst werden kann (nicht definiert ist)

Dieser Fehler tritt beispielsweise auf, wenn die XSL-Transformationsrichtlinie im Anfrageablauf ausgeführt werden soll, aber das Element <Source> auf die Antwortvariable gesetzt ist, die im Anfrageablauf nicht vorhanden ist.

Diagnose

  1. Ermitteln Sie die XSL-Transformationsrichtlinie, in der der Fehler aufgetreten ist, sowie den Namen der nicht verfügbaren Variablen. Sie finden beide Elemente im Element faultstring der Fehlerantwort. Beispiel: Im folgenden faultstring lautet der Richtlinienname xslt und die Variable response:

    faultstring": "response message is not available for XSL: xslt
    
  2. Prüfen Sie im XML der fehlgeschlagenen XSL-Transformationsrichtlinie, ob der Name der Variablen, die im Element <Source> festgelegt ist, dem Variablennamen im Fehlerstring entspricht (Schritt 1). Beispiel: Die folgende XSL-Transformationsrichtlinie gibt eine Variable mit dem Namen response im Element <Source> an, die mit dem Namen im Fehlerstring übereinstimmt:

    <?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. Prüfen Sie, ob die im Element <Source> verwendete Variable definiert ist, und ob sie in dem Ablauf verfügbar ist, in dem die XSL-Transformationsrichtlinie ausgeführt wird.

  4. Wenn die Variable entweder:

    • außerhalb des Geltungsbereichs (nicht im spezifischen Ablauf verfügbar, in dem die Richtlinie ausgeführt wird) liegt oder
    • kann nicht gelöst werden (ist nicht definiert)

    Dann ist dies die Ursache des Fehlers.

    Nehmen wir beispielsweise an, dass die oben gezeigte XSL-Transformationsrichtlinie im Anfrageablauf ausgeführt werden soll. Wie bereits erwähnt, wird die Variable response im Element <Source> der Beispielrichtlinie verwendet. Die Variable response ist nur im Antwortablauf verfügbar.

    Da die Variable response nicht im Anfrageablauf vorhanden ist, erhalten Sie den Fehlercode:

    steps.xsl.XSLSourceMessageNotAvailable
    

Auflösung

Achten Sie darauf, dass die im Element <Source> der fehlgeschlagenen XSL-Transformationsrichtlinie festgelegte Variable definiert ist und in dem Ablauf vorhanden ist, in dem die Richtlinie ausgeführt wird.

Um die oben gezeigte XSL-Transformationsrichtlinie zu korrigieren, können Sie das Element <Source> ändern, um die Variable request zu verwenden, da sie im Anfragefluss vorhanden ist:

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

Fehlercode

steps.xsl.XSLEvaluationFailed

Fehlerantworttext

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

Beispiel für Fehlermeldung

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

Mögliche Ursachen

Dieser Fehler tritt in folgenden Fällen auf:

  • Die XML-Nutzlast der Eingabe ist nicht verfügbar/fehlerhaft.
  • Die XSLTransform-Richtlinie schlägt fehl bzw. kann die XML-Eingabedatei anhand der in der XSL-Datei angegebenen Transformationsregeln nicht transformieren. Es sind viele verschiedene Gründe dafür denkbar, dass die XSLTransform-Richtlinie fehlschlägt. Der in der Fehlermeldung angegebene Fehlerursache enthält weitere Informationen zum Grund. In der folgenden Tabelle ist eine solche Ursache für diesen Fehler aufgeführt – ungültiges Präfix – mit einem Beispiel.
Ursache Beschreibung
Eingabe-XML-Nutzlast nicht verfügbar Die Eingabe-XML-Nutzlast wird nicht übergeben oder ist leer.
Fehlerhafte Eingabe-XML Die XML-Nutzlast der Eingabe ist fehlerhaft oder ungültig.
Ungültiges Präfix Die XML-Nutzlast der Eingabe hat ein Präfix, das in der XSL-Datei nicht definiert ist.

Ursache: XML-Eingabenutzlast ist nicht verfügbar

Dieser Fehler tritt auf, wenn die XML-Eingabenutzlast nicht übergeben wird oder die als Teil der API-Anfrage an den API-Proxy übergebene XML-Nutzlast leer ist und eine XSL-Transformationsrichtlinie vorliegt.

Beispiel für Fehlermeldung

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

Diagnose

  1. Ermitteln Sie die XSL-Datei, die nicht durch die XML-Transformationsrichtlinie ausgewertet werden konnte, und den Grund für den Fehler. Wenn die XML-Nutzlast der Eingabe nicht übergeben wird oder leer ist, gibt der Fehler an, dass beim Parsen ein vorzeitiges Ende des Dokuments vorliegt. Alle diese Informationen finden Sie im Element faultstring der Fehlerantwort. Im folgenden faultstring ist z. B. XSL-Transform.xsl die XSL-Datei und die Fehlerursache ist Premature end of document while parsing at line 1 (possibly around char 0). Dieser Fehler bedeutet, dass die XML-Nutzlast entweder nicht übergeben wurde oder leer ist.

        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\""
    
  2. Ermitteln Sie, ob die XML-Eingabenutzlast, die als Teil der Anfrage übergeben wurde, leer ist. Wenn die Eingabenutzlast nicht übergeben wurde oder leer ist, ist dies die Ursache des Fehlers.

    In der folgenden Beispielanfrage war die vom Nutzer gesendete Anfragenutzlast (der Anfragetext) leer.

    Beispiel:

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

    Da die XML-Eingabenutzlast leer ist, erhalten Sie folgende Fehlermeldung:

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

Lösung

Achten Sie darauf, dass die an die XSL-Transformatiosnrichtlinie übergebene Eingabe eine gültige XML-Nutzlast und nicht leer ist.

Beheben Sie das Problem mit der Beispiel-XSL-Transformationsrichtlinie, indem Sie eine gültige XML-Nutzlast übergeben. Beispiel:

  1. Erstellen Sie eine Datei mit dem Namen city.xml und folgendem Inhalt:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Führen Sie folgenden API-Aufruf mit einem curl-Befehl aus:

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

Ursache: Falsch formatierte XML-Eingabe

Die XML-Eingabenutzlast, die als Teil der API-Anfrage an die XSLTransform-Richtlinie übergeben wird, ist fehlerhaft oder ungültig.

Beispiel für Fehlermeldung

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

Diagnose

  1. Ermitteln Sie die XSL-Datei, die nicht durch die XML-Transformationsrichtlinie ausgewertet werden konnte, und den Grund für den Fehler. Wenn die XML-Eingabenutzlast fehlerhaft ist, gibt die Fehlerursache an, dass ein unerwartetes Zeichen vorhanden ist. Alle diese Informationen finden Sie im Element faultstring der Fehlerantwort. Im folgenden faultstring ist z. B. XSL-Transform.xsl die XSL-Datei und die Fehlerursache ist Unexpected char while looking for open tag ('&lt;') character. Das heißt, "<" fehlt in der XML-Nutzlast.

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    
  2. Untersuchen Sie die XML-Eingabenutzlast, die an die XSL-Transformationsrichtlinie übergeben wurde, und prüfen Sie, ob der XML-Inhalt gültig ist oder nicht. Wenn die Eingabenutzlast keine gültige XML-Datei ist, ist dies die Ursache des Fehlers.

    In der folgenden Beispielanfrage war die vom Nutzer gesendete Eingabenutzlast (d. h. der Anfragetext) ungültig.

    Beispiel:

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

    Wo city.xml Folgendes ist:

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

    Da die Eingabenutzlast JSON ist und kein gültiges XML ist, erhalten Sie den Fehler:

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

Auflösung

Achten Sie darauf, dass die an die XSL-Transformationsrichtlinie übergebene Eingabe eine gültige XML-Nutzlast und nicht leer ist.

Beheben Sie das Problem mit der Beispiel-XSL-Transformationsrichtlinie, indem Sie eine gültige XML-Nutzlast übergeben. Beispiel:

  1. Ändern Sie die Datei city.xml so, dass der Inhalt in XML vorhanden ist, wie unten dargestellt:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Führen Sie den API-Aufruf mit dem cURL-Befehl wie folgt aus:

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

Ursache: Ungültiges Präfix

Die an die XSL-Transformationsrichtlinie übergebene XML-Eingabenutzlast enthält ein Element, das in der Richtlinie als Präfix in der XSL-Datei nicht definiert ist.

Beispiel für Fehlermeldung

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

Diagnose

  1. Identifizieren Sie die XSL-Datei, die nicht durch die XML-Transformationsrichtlinie ausgewertet werden konnte, sowie den Grund für den Fehler. In diesem Fall weist die Fehlerursache darauf hin, dass in der XML-Eingabenutzlast an einer bestimmten Zeilennummer ein nicht aufgelöstes Präfix vorhanden ist. Alle diese Informationen finden Sie im Element faultstring der Fehlerantwort. Im folgenden faultstring ist die XSL-Datei beispielsweise XSL-Transform.xsl, die Fehlerursache Unresolved Prefix und die Zeilennummer 1.

    "faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\""
    
  2. Untersuchen Sie den Inhalt der XSL-Datei (oben in Schritt 1 identifiziert) und die XML-Eingabenutzlast. Wenn das Präfix, das in der Zeilennummer (oben in Schritt 1 identifiziert) der XML-Eingabenutzlast verwendet wird, nicht in der XSL-Datei vorhanden ist, ist dies die Fehlerursache.

    Hier sehen Sie das Beispiel-XSL-Datei und die entsprechende XML-Eingabenutzlast, die zu dem Fehler geführt haben:

    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>
    

    XML-Eingabenutzlast

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

    Die oben dargestellte XML-Eingabenutzlast enthält ein Element <Life:Books>. Beachten Sie, dass die XSL dieses Präfix nicht hat. Stattdessen wird das Präfix <xsl:text>&lt;Life&gt;</xsl:text> verwendet. Daher erhalten Sie folgende Fehlermeldung:

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

Auflösung

Achten Sie darauf, dass die an die XSL-Transformationsrichtlinie übergebene XML-Eingabenutzlast alle Elementformate enthält, die als Präfixe in der XSL-Datei definiert sind, die in der Richtlinie verwendet wird.

Sie können die oben dargestellte Beispiel-XML-Datei so korrigieren:

Die XML-Eingabenutzlast wurde aktualisiert:

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