Risoluzione degli errori di runtime del criterio XSLTransform

Stai visualizzando la documentazione relativa a Apigee e Apigee ibrido.
Visualizza 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"
        }
    }
}

Messaggio di errore di esempio

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

Causa

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

  • Fuori ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio)
  • Impossibile risolvere (non è definito)

Ad esempio, questo errore si verifica se si suppone di eseguire il criterio XSLTransform nel flusso della richiesta, ma l'elemento <Source> è impostato sulla variabile di risposta, che non esiste nel flusso di richiesta.

Diagnosi

  1. Identifica il criterio XSLTransform in cui si è verificato l'errore e il nome della variabile che non è disponibile. Puoi trovare entrambi gli elementi nella Elemento faultstring della risposta di 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 con errore, verifica che il nome della variabile impostato nell'elemento <Source> corrisponde al nome della variabile identificato nell'errore (passaggio 1 sopra). Ad esempio, il seguente criterio XSLTransform specifica una variabile denominata response nell'elemento <Source>, che corrisponde al contenuto la 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 è:

    • Fuori ambito (non disponibile nel flusso specifico in cui viene applicato il criterio eseguito) o
    • Impossibile risolvere (non è definito)

    questa è la causa dell'errore.

    Per esempio, supponiamo che il criterio XSLTransform mostrato sopra debba vengono eseguite nel flusso della richiesta. Ricorda che la variabile response viene utilizzata l'elemento <Source> del criterio 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> dell'operazione XSLTransform non riuscita viene definito ed esiste nel flusso in cui viene eseguito il criterio.

Per correggere il criterio XSLTransform di esempio mostrato sopra, puoi modificare il valore Elemento <Source> per usare la variabile request, perché esiste nella 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"
      }
  }
}

Messaggio di errore di esempio

{
    "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 o ha un formato non valido.
  • Il criterio XSLTransform non riesce o non è in grado di trasformare il file XML di input in base alle regole di trasformazione fornite nel file XSL. Potrebbero esserci molte diverse cause di errore del criterio XSLTransform. Il motivo dell'errore nel messaggio di errore fornisce maggiori informazioni sulla causa. Le seguenti della tabella, una delle 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 è stato passato o vuoto.
XML di input non corretto Il payload XML di input non è valido o non è valido.
Prefisso non valido Il payload XML di input ha un prefisso che 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 il payload XML viene passato. come parte della richiesta API al proxy API con il criterio XSLTransform è vuoto.

Messaggio di errore di esempio

{
    "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 dalla trasformazione XML. e il motivo dell'errore. Se il payload XML di input non viene passato o è vuoto, il motivo dell'errore indica che è presente un'interruzione prematura del documento durante l'analisi. Puoi trovare tutte queste informazioni nel faultstring dell'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 venga passato o sia 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 è stato passato come parte della richiesta di è vuoto. Se il payload di input non viene passato o è vuoto, la causa è questa per l'errore.

    Nella richiesta di esempio riportata di seguito, il payload della richiesta (ossia 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 tue API, come configurato nella proprietà virtualhosts.hostAliases nel file degli override. Consulta Specificare la configurazione override.

    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 con il criterio XSLTransform di esempio, passa un payload XML valido. Ad esempio:

  1. Crea un file denominato city.xml con il seguente contenuto:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Effettua la chiamata 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 tue API, come configurato nella proprietà virtualhosts.hostAliases nel file degli override. Consulta Specificare la configurazione override.

Causa: formato XML di input non corretto

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

Messaggio di errore di esempio

{
    "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 è corretto, il motivo un errore indica la presenza di un carattere imprevisto. Puoi trovare tutto questo informazioni nell'elemento faultstring della risposta di errore. Ad esempio, nel il seguente faultstring, il file XSL è XSL-Transform.xsl e il motivo per errori è Unexpected char while looking for open tag ('&lt;') character. In altre parole, la "<" 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 verifica se abbia o meno contenuti XML validi. Se il payload di input non è un XML valido, la causa dell'errore.

    Nella richiesta di esempio riportata di seguito, il payload di input (ossia il corpo della richiesta) inviato dall'utente non è 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 tue API, come configurato nella proprietà virtualhosts.hostAliases nel file degli override. Consulta Specificare la configurazione override.

    In questo esempio, city.xml è definito come:

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

    Poiché il payload di input è in formato 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 con il 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. Effettua la chiamata 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 tue API, come configurato nella proprietà virtualhosts.hostAliases nel file degli override. Consulta Specificare la configurazione override.

Causa: prefisso non valido

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

Messaggio di errore di esempio

{
    "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 indicherà alla presenza di un prefisso non risolto in corrispondenza di un numero di riga specifico nel file XML di input. per il payload. Puoi trovare tutte queste informazioni nell'elemento faultstring della risposta di errore. Ad esempio, nel seguente faultstring, il file XSL è XSL-Transform.xsl, con motivo dell'errore Unresolved Prefix e riga è 1.

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

    Ecco il file XSL di esempio e il payload XML corrispondente che ha 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>. Nota che l'XSL non ha questo prefisso. Ha invece 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 abbia tutti i valori formati di 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>