Fehlerbehebung bei der Laufzeit von XSLTransform-Richtlinien

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen.

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 für die message- oder Stringvariable, die im <Source>-Element der XSLTransform-Richtlinie angegeben ist, Folgendes gilt:

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

Dieser Fehler tritt beispielsweise auf, wenn die XSLTransform-Richtlinie 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 XSLTransform-Richtlinie, in der der Fehler aufgetreten ist, sowie den Namen der nicht verfügbaren Variable. 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 XSLTransform-Richtlinie, ob der Name der Variablen, die im Element <Source> festgelegt ist, dem Variablennamen im Fehlerstring entspricht (Schritt 1 oben). Beispiel: Die folgende XSLTransform-Richtlinie 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 XSLTransform-Richtlinie 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 das die Ursache des Fehlers.

    Nehmen wir beispielsweise an, dass die oben gezeigte XSLTransform-Richtlinie 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
    

Lösung

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

Zum Korrigieren der oben gezeigten XSLTransform-Richtlinie können Sie das Element <Source> ändern, um die Variable request zu verwenden, da sie im Anfrageablauf 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
XML-Eingabenutzlast nicht verfügbar Die XML-Eingabenutzlast wird nicht übergeben oder ist leer.
Falsch formatierte XML-Eingabe 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://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml"
    

    Dabei ist your_host_alias eine öffentlich zugängliche Domain, die für den Zugriff auf Ihre APIs verwendet wird, wie im Attribut virtualhosts.hostAliases in Ihrer Überschreibungsdatei konfiguriert. Siehe Konfigurationsüberschreibungen festlegen.

    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 den API-Aufruf mit einem curl-Befehl so aus:

    curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

    Dabei ist your_host_alias eine öffentlich zugängliche Domain, die für den Zugriff auf Ihre APIs verwendet wird, wie im Attribut virtualhosts.hostAliases in Ihrer Überschreibungsdatei konfiguriert. Siehe Konfigurationsüberschreibungen festlegen.

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://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

    Dabei ist your_host_alias eine öffentlich zugängliche Domain, die für den Zugriff auf Ihre APIs verwendet wird, wie im Attribut virtualhosts.hostAliases in Ihrer Überschreibungsdatei konfiguriert. Siehe Konfigurationsüberschreibungen festlegen.

    In diesem Beispiel ist city.xml so definiert:

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

Lö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 so aus:

    curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml" -X POST -d @city.xml
    

    Dabei ist your_host_alias eine öffentlich zugängliche Domain, die für den Zugriff auf Ihre APIs verwendet wird, wie im Attribut virtualhosts.hostAliases in Ihrer Überschreibungsdatei konfiguriert. Siehe Konfigurationsüberschreibungen festlegen.

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)\""
    

Lö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>