Dépannage des erreurs d'exécution de la règle XSLTransform

Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Consultez la documentation d'Apigee Edge.

XSLSourceMessageNotAvailable

Code d'erreur

steps.xsl.XSLSourceMessageNotAvailable

Corps de la réponse d'erreur

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

Exemple de message d'erreur

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

Cause

Cette erreur se produit si la variable de chaîne ou le message spécifié dans l'élément <Source> de la règle XSLTransform est soit :

  • est hors de portée (non disponible dans le flux spécifique où la règle est exécutée)
  • impossible à résoudre (non définie).

Par exemple, cette erreur se produit si la règle XSLTransform doit être exécutée dans le flux de requête, mais que l'élément <Source> est défini sur la variable de réponse, qui n'existe pas dans le flux de requête.

Diagnostic

  1. Identifiez la règle XSLTransform dans laquelle l'erreur s'est produite et le nom de la variable qui n'est pas disponible. Vous pouvez trouver ces deux informations dans l'élément faultstring de la réponse d'erreur. Par exemple, dans le fichier faultstring suivant, le nom de la règle est xslt et la variable est response :

    faultstring": "response message is not available for XSL: xslt
    
  2. Dans le XML de la règle XSLTransform ayant échoué, vérifiez que le nom de la variable définie dans l'élément <Source> correspond au nom de la variable identifiée dans la chaîne d'erreur (étape 1 ci-dessus). Par exemple, la règle XSLTransform suivante spécifie une variable nommée response dans l'élément <Source>, qui correspond au contenu de la chaîne d'erreur :

    <?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. Déterminez si la variable utilisée dans l'élément <Source> est définie et disponible dans le flux dans lequel la règle XSLTransform s'exécute.

  4. Si la variable est :

    • hors du champ d'application (non disponible dans le flux spécifique où la règle est exécutée) ; ou
    • impossible à résoudre (non définie).

    alors il s'agit de la cause de l'erreur.

    Par exemple, supposons que la règle XSLTransform présentée ci-dessus soit censée être exécutée dans le flux de requête. Rappelez-vous que la variable response est utilisée dans l'élément <Source> de l'exemple de règle. La variable response n'est disponible que dans le flux de réponse.

    Comme la variable response n'existe pas dans le flux de requête, vous recevez le code d'erreur :

    steps.xsl.XSLSourceMessageNotAvailable
    

Solution

Vérifiez que la variable définie dans l'élément <Source> de la règle XSLTransform ayant échoué est définie et qu'elle existe dans le flux où la règle s'exécute.

Pour corriger l'exemple de règle XSLTransform présenté ci-dessus, vous pouvez modifier l'élément <Source> afin d'utiliser la variable request, car elle existe dans le flux de requête :

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

Code d'erreur

steps.xsl.XSLEvaluationFailed

Corps de la réponse d'erreur

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

Exemple de message d'erreur

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

Causes possibles

Cette erreur se produit dans les cas suivants :

  • La charge utile du fichier XML d'entrée est indisponible/mal rédigée.
  • La règle de transformation XSL échoue/ne parvient pas à transformer le fichier XML d'entrée en fonction des règles de transformation fournies dans le fichier XSL. Plusieurs raisons peuvent expliquer l'échec de la règle de transformation XSL. Le motif de l'échec dans le message d'erreur fournira davantage d'informations sur la cause de l'échec. Le tableau suivant répertorie l'une des causes de cet échec (préfixe incorrect) et l'explique à l'aide d'un exemple.
Cause Description
Charge utile du fichier XML d'entrée indisponible La charge utile du fichier XML d'entrée n'est ni transmise, ni vide.
Fichier XML d'entrée mal rédigé La charge utile du fichier XML d'entrée est mal rédigée ou non valide.
Préfixe non valide La charge utile du fichier XML d'entrée comporte un préfixe qui n'est pas défini dans le fichier XSL.

Cause : La charge utile du fichier XML d'entrée n'est pas disponible

Cette erreur se produit si la charge utile du fichier XML d'entrée n'est pas transmise ou si elle est transmise vide dans le cadre de la requête API au proxy d'API sur lequel la règle de transformation XSL est appliquée.

Exemple de message d'erreur

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

Diagnostic

  1. Identifiez le fichier XSL qui n'a pas pu être évalué par la règle de transformation XML et le motif de l'échec. Si la charge utile XML d'entrée n'est pas transmise ou est vide, le motif de l'échec indique une fin prématurée du document durant d'analyse. Vous trouverez toutes ces informations dans l'élément faultstring de la réponse d'erreur. Par exemple, dans le faultstring suivant, le fichier XSL est XSL-Transform.xsl et le motif de l'échec est Premature end of document while parsing at line 1 (possibly around char 0). Cette erreur signifie que la charge utile XML n'est pas transmise ou est vide.

        "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Premature end of document while parsing at line 1(possibly  around char 0)\""
    
  2. Déterminez si la charge utile du fichier XML d'entrée transmise dans le cadre de la requête est vide. Si la charge utile d'entrée n'est pas transmise ou est vide, il s'agit de la cause de l'erreur.

    Dans l'exemple de requête ci-dessous, la charge utile de la requête (c'est-à-dire le corps de la requête) envoyée par l'utilisateur était vide.

    Exemple :

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

    your_host_alias est un domaine public utilisé pour accéder à vos API, tel que configuré dans la propriété virtualhosts.hostAliases de votre fichier de remplacement. Consultez la section Spécifier des remplacements de configuration.

    Comme la charge utile du fichier XML d'entrée est vide, vous recevez l'erreur :

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

Solution

Assurez-vous que l'entrée transmise à la règle de transformation XSL est une charge utile XML valide et non vide.

Pour résoudre le problème avec l'exemple de règle de tranformation XSL, transmettez une charge utile XML valide. Exemple :

  1. Créez un fichier nommé city.xml avec le contenu suivant :

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Effectuez l'appel d'API à l'aide d'une commande curl comme suit :

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

    your_host_alias est un domaine public utilisé pour accéder à vos API, tel que configuré dans la propriété virtualhosts.hostAliases de votre fichier de remplacement. Consultez la section Spécifier des remplacements de configuration.

Cause : Le fichier XML d'entrée est mal rédigé

La charge utile du fichier XML d'entrée transmise dans le cadre de la requête API à la règle de transformation XSL est mal formulée ou non valide.

Exemple de message d'erreur

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

Diagnostic

  1. Identifiez le fichier XSL qui n'a pas pu être évalué par la règle de transformation XML et le motif de l'échec. Si la charge utile XML d'entrée est mal rédigée, le motif de l'échec indique un caractère inattendu. Vous trouverez toutes ces informations dans l'élément faultstring de la réponse d'erreur. Par exemple, dans le faultstring suivant, le fichier XSL est XSL-Transform.xsl et le motif de l'échec est Unexpected char while looking for open tag ('&lt;') character. En d'autres termes, "<" est manquant dans la charge utile XML.

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    
  2. Examinez la charge utile du fichier XML d'entrée transmise à la règle de transformation XSL et voyez si elle comporte un contenu XML valide ou non. Si la charge utile d'entrée n'est pas un fichier XML valide, il s'agit de la cause de l'erreur.

    Dans l'exemple de requête ci-dessous, la charge utile d'entrée (c'est-à-dire le corps de la requête) envoyée par l'utilisateur était non valide.

    Exemple :

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

    your_host_alias est un domaine public utilisé pour accéder à vos API, tel que configuré dans la propriété virtualhosts.hostAliases de votre fichier de remplacement. Consultez la section Spécifier des remplacements de configuration.

    Dans cet exemple, city.xml est défini comme suit :

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

    Comme la charge utile d'entrée est au format JSON et non un fichier XML valide, vous obtenez l'erreur suivante :

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

Solution

Assurez-vous que l'entrée transmise à la règle de transformation XSL est une charge utile XML valide et non vide.

Pour résoudre le problème avec l'exemple de règle de tranformation XSL, transmettez une charge utile XML valide. Exemple :

  1. Modifiez le fichier city.xml pour qu'il présente le contenu en XML, comme illustré ci-dessous :

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Effectuez l'appel d'API à l'aide de la commande curl comme suit :

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

    your_host_alias est un domaine public utilisé pour accéder à vos API, tel que configuré dans la propriété virtualhosts.hostAliases de votre fichier de remplacement. Consultez la section Spécifier des remplacements de configuration.

Cause : Le préfixe n'est pas valide

La charge utile du fichier d'entrée XML transmise à la règle de transformation XSL comporte un élément qui n'est pas défini en tant que préfixe dans le fichier XSL spécifié dans la règle.

Exemple de message d'erreur

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

Diagnostic

  1. Identifiez le fichier XSL qui n'a pas pu être évalué par la règle de transformation XML et le motif de l'échec. Dans ce cas, le motif de l'échec indique qu'il existe un préfixe non résolu à un numéro de ligne spécifique dans la charge utile XML d'entrée. Vous trouverez toutes ces informations dans l'élément faultstring de la réponse d'erreur. Par exemple, dans le faultstring suivant, le fichier XSL est XSL-Transform.xsl, le motif de l'échec est Unresolved Prefix et le numéro de ligne est 1.

    "faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\""
    
  2. Examinez le contenu du fichier XSL (identifié à l'étape 1 ci-dessus) et la charge utile du fichier XML d'entrée. Si le préfixe utilisé au numéro de ligne (identifié à l'étape 1 ci-dessus) de la charge utile du fichier XML d'entrée n'existe pas dans le fichier XSL, alors il s'agit de la cause de l'erreur.

    Voici l'exemple XSL et la charge utile XML correspondante à l'origine de l'erreur :

    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>
    

    Charge utile du fichier XML d'entrée

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

    L'exemple de charge utile XML présenté ci-dessus contient un élément <Life:Books>. Notez que le XSL ne comporte pas ce préfixe. À la place, il porte le préfixe <xsl:text>&lt;Life&gt;</xsl:text>. Par conséquent, vous obtenez l'erreur suivante :

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

Solution

Assurez-vous que la charge utile du fichier XML d'entrée transmise à la règle de transformation XSL possède tous les formats d'élément définis en tant que préfixes dans le fichier XSL utilisé dans la règle.

Pour corriger l'exemple de fichier XML présenté ci-dessus, vous pouvez modifier le fichier comme indiqué ci-dessous :

Charge utile du fichier XML d'entrée mise à jour

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