Risoluzione dei problemi relativi agli errori di runtime dei criteri XSLTransform

Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.

XSLSourceMessageNotAvailable

Codice di errore

steps.xsl.XSLSourceMessageNotAvailable

Corpo della risposta di errore

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

Esempio di messaggio di errore

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

Causa

Questo errore si verifica se il valore message o la variabile stringa specificata nell'elemento <Source> del criterio XSLTransform è:

  • Al di fuori dell'ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio)
  • Non può essere risolto (non è definito)

Ad esempio, questo errore si verifica se il criterio XSLTransform deve essere eseguito nel flusso di richieste, ma l'elemento <Source> è impostato sulla variabile di risposta, che non esiste nel flusso di richieste.

Diagnosi

  1. Identifica il criterio XSLTransform in cui si è verificato l'errore e il nome della variabile non disponibile. Puoi trovare entrambi questi elementi nell'elemento faultstring della risposta all'errore. Ad esempio, nel seguente faultstring, il nome del criterio è xslt e la variabile è response:

    faultstring": "response message is not available for XSL: xslt
    
  2. Nel file XML del criterio XSLTransform non riuscito, verifica che il nome della variabile impostata nell'elemento <Source> corrisponda al nome della variabile identificato nella stringa di errore (passaggio 1 sopra). Ad esempio, il seguente criterio XSLTransform specifica una variabile denominata response nell'elemento <Source>, che corrisponde a quanto riportato nella stringa di errore:

    <?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. Determina se la variabile utilizzata nell'elemento <Source> è definita e disponibile nel flusso in cui viene eseguito il criterio XSLTransform.

  4. Se la variabile è:

    • Al di fuori dell'ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio) o
    • Non può essere risolto (non è definito)

    allora è la causa dell'errore.

    Ad esempio, supponiamo che il criterio XSLTransform mostrato sopra debba essere eseguito nel flusso di richieste. Ricorda che la variabile response viene utilizzata nell'elemento <Source> delle norme di esempio. La variabile response è disponibile solo nel flusso di risposta.

    Poiché la variabile response non esiste nel flusso di richiesta, ricevi il codice di errore:

    steps.xsl.XSLSourceMessageNotAvailable
    

Risoluzione

Assicurati che la variabile impostata nell'elemento <Source> del criterio XSLTransform che ha avuto esito negativo sia definita ed esista nel flusso in cui viene eseguito il criterio.

Per correggere il criterio XSLTransform di esempio mostrato sopra, puoi modificare l'elemento <Source> in modo da utilizzare la variabile request, poiché esiste nel flusso della richiesta:

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

Codice di errore

steps.xsl.XSLEvaluationFailed

Corpo della risposta di errore

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

Esempio di messaggio di errore

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

Cause possibili

Questo errore si verifica se:

  • Il payload XML di input non è disponibile/non è in formato corretto.
  • Il criterio XSLTransform non riesce/non è in grado di trasformare il file XML di input in base alle regole di trasformazione fornite nel file XSL. Potrebbero esserci molte cause diverse per cui il criterio XSLTransform non va a buon fine. Il motivo dell'errore riportato nel messaggio fornirà ulteriori informazioni sulla causa. Nella tabella seguente è elencata una di queste cause dell'errore, Prefisso non valido, ed è spiegata con un esempio.
Causa Descrizione
Payload XML di input non disponibile Il payload XML di input non viene passato o è vuoto.
Input XML non valido Il payload XML inserito non è valido o ha un formato non corretto.
Prefisso non valido Il payload XML di input ha un prefisso non definito nel file XSL.

Causa: il payload XML di input non è disponibile

Questo errore si verifica se il payload XML di input non viene passato o se il payload XML passato come parte della richiesta API all'API Proxy con il criterio XSLTransform è vuoto.

Esempio di messaggio di errore

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

Diagnosi

  1. Identifica il file XSL che non è stato possibile valutare dal criterio di trasformazione XML e il motivo dell'errore. Se il payload XML di input non viene passato o è vuoto, il motivo dell'errore indica che si è verificato un termine prematuro del documento durante l'analisi. Puoi trovare tutte queste informazioni nell'elemento faultstring della risposta all'errore. Ad esempio, nel seguente faultstring, il file XSL è XSL-Transform.xsl e il motivo dell'errore è Premature end of document while parsing at line 1 (possibly around char 0). Questo errore significa che il payload XML non viene passato o è vuoto.

        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\""
    
  2. Determina se il payload XML di input che è stato passato nell'ambito della richiesta è vuoto. Se il payload di input non viene passato o è vuoto, è la causa dell'errore.

    Nella richiesta di esempio riportata di seguito, il payload della richiesta (ovvero il corpo della richiesta) inviato dall'utente era vuoto.

    Ad esempio:

    curl -v "http://your_host_alias/v1/xsltransform" -H "Content-Type: application/xml"
    

    dove your_host_alias è un dominio pubblico utilizzato per accedere alle API, come configurato nella proprietà virtualhosts.hostAliases del file delle sostituzioni. Consulta Specificare le sostituzioni della configurazione.

    Poiché il payload di input XML è vuoto, viene visualizzato l'errore:

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

Risoluzione

Assicurati che l'input passato al criterio XSLTransform sia un payload XML valido e non vuoto.

Per risolvere il problema relativo al criterio XSLTransform di esempio, passa un payload XML valido. Ad esempio:

  1. Crea un file denominato city.xml con i seguenti contenuti:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Esegui la chiamata all'API utilizzando un comando curl come segue:

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

    dove your_host_alias è un dominio pubblico utilizzato per accedere alle API, come configurato nella proprietà virtualhosts.hostAliases del file delle sostituzioni. Consulta Specificare le sostituzioni della configurazione.

Causa: XML di input non valido

Il payload XML di input passato come parte della richiesta API al criterio XSLTransform è non valido o non corretto.

Esempio di messaggio di errore

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

Diagnosi

  1. Identifica il file XSL che non è stato possibile valutare dal criterio di trasformazione XML e il motivo dell'errore. Se il payload XML di input non è formattato correttamente, il motivo dell'errore indica che è presente un carattere imprevisto. Puoi trovare tutte queste informazioni nell'elemento faultstring della risposta all'errore. Ad esempio, nel seguente faultstring, il file XSL è XSL-Transform.xsl e il motivo dell'errore è Unexpected char while looking for open tag ('&lt;') character. In altre parole, "<" non è presente nel payload XML.

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    
  2. Esamina il payload XML di input passato al criterio XSLTransform e controlla se contiene contenuti XML validi. Se il payload di input non è XML valido, è la causa dell'errore.

    Nella richiesta di esempio riportata di seguito, il payload di input (ovvero il corpo della richiesta) inviato dall'utente non era valido.

    Ad esempio:

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

    dove your_host_alias è un dominio pubblico utilizzato per accedere alle API, come configurato nella proprietà virtualhosts.hostAliases del file delle sostituzioni. Consulta Specificare le sostituzioni della configurazione.

    In questo esempio, city.xml è definito come:

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

    Poiché il payload di input è JSON e non XML valido, viene visualizzato l'errore:

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

Risoluzione

Assicurati che l'input passato al criterio XSLTransform sia un payload XML valido e non vuoto.

Per risolvere il problema relativo al criterio XSLTransform di esempio, passa un payload XML valido. Ad esempio:

  1. Modifica il file city.xml in modo che i contenuti siano in XML come mostrato di seguito:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Esegui la chiamata all'API utilizzando il comando curl come segue:

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

    dove your_host_alias è un dominio pubblico utilizzato per accedere alle API, come configurato nella proprietà virtualhosts.hostAliases del file delle sostituzioni. Consulta Specificare le sostituzioni della configurazione.

Causa: prefisso non valido

Il payload XML di input passato al criterio XSLTransform contiene un elemento che non è definito come prefisso nel file XSL specificato nel criterio.

Esempio di messaggio di errore

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

Diagnosi

  1. Identifica il file XSL che non è stato possibile valutare dal criterio di trasformazione XML e il motivo dell'errore. In questo caso, il motivo dell'errore indica che esiste un prefisso irrisolto in un numero di riga specifico nel payload XML di input. Puoi trovare tutte queste informazioni nell'elemento faultstring della risposta all'errore. Ad esempio, nel seguente faultstring, il file XSL è XSL-Transform.xsl, il motivo dell'errore è Unresolved Prefix e il numero di riga è 1.

    "faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\""
    
  2. Esamina i contenuti del file XSL (identificato nel passaggio 1 sopra) e il payload XML di input. Se il prefisso utilizzato nel numero di riga (identificato nel passaggio 1 sopra) del payload XML di input non esiste nel file XSL, è la causa dell'errore.

    Di seguito sono riportati l'XSL di esempio e il payload XML corrispondente che hanno generato l'errore:

    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>
    

    Payload XML di input

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

    Il payload XML di esempio mostrato sopra contiene un elemento <Life:Books>. Tieni presente che il file XSL non ha questo prefisso. ma ha il prefisso <xsl:text>&lt;Life&gt;</xsl:text>. Di conseguenza, viene visualizzato l'errore:

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

Risoluzione

Assicurati che il payload XML di input passato al criterio XSLTransform contenga tutti i formati degli elementi definiti come prefissi nel file XSL utilizzato nel criterio.

Per correggere il file XML di esempio mostrato sopra, puoi modificarlo come mostrato di seguito:

Payload XML di input aggiornato

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