Solución de problemas de errores del entorno de ejecución de la política XSLTransform

Estás viendo la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.

XSLSourceMessageNotAvailable

Código de error

steps.xsl.XSLSourceMessageNotAvailable

Cuerpo de la respuesta de error

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

Ejemplo de mensaje de error

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

Causa

Este error ocurre si el message o la variable de string especificada en el elemento <Source> de la política XSLTransform es la siguiente:

  • Está fuera del alcance (no está disponible en el flujo específico en el que se ejecuta la política) o
  • No se puede resolver (no está definida)

Por ejemplo, este error ocurre si se supone que la política XSLTransform se ejecutará en el flujo de solicitudes, pero el elemento <Source> se establece en la variable de respuesta, que no existe en el flujo de la solicitud.

Diagnóstico

  1. Identifica la política XSLTransform en la que se produjo el error y el nombre de la variable que no está disponible. Puedes encontrar ambos elementos en el elemento faultstring de la respuesta con error. Por ejemplo, en el siguiente valor faultstring, el nombre de la política es xslt y la variable es response:

    faultstring": "response message is not available for XSL: xslt
    
  2. En el archivo XML de la política XSLTransform, verifica que el nombre de la variable establecida en el elemento <Source> coincida con el nombre de la variable identificado en la string con error (paso 1 anterior). Por ejemplo, la siguiente política XSLTransform especifica una variable llamada response en el elemento <Source>, que coincide con lo que contiene la string con error:

    <?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 si la variable que se usó en el elemento <Source> está definida y disponible en el flujo en el que se ejecuta la política XSLTransform.

  4. Verifica si la variable tiene una de las siguientes características:

    • está fuera del alcance (no está disponible en el flujo específico en el que se ejecuta la política) o
    • no se puede resolver (no está definida)

    entonces esa es la causa del error.

    A modo de ejemplo, supongamos que la política XSLTransform anterior se tiene que ejecutar en el flujo de solicitud. Recuerda que la variable response se usa en el elemento <Source> de la política de ejemplo. La variable response solo está disponible en el flujo de respuesta.

    Dado que la variable response no existe en el flujo de solicitud, recibes el código de error:

    steps.xsl.XSLSourceMessageNotAvailable
    

Solución

Asegúrate de que la variable establecida en el elemento <Source> de la política XSLTransform con errores se defina y exista en el flujo en el que se ejecuta la política.

Para corregir la política XSLTransform de ejemplo que se mostró antes, puedes modificar el elemento <Source> a fin de usar la variable request, ya que existe en el flujo de la solicitud:

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

Código de error

steps.xsl.XSLEvaluationFailed

Cuerpo de la respuesta de error

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

Ejemplo de mensaje de error

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

Causas posibles

Este error se produce si se produce una de las siguientes situaciones:

  • La carga útil XML de entrada no está disponible o tiene un formato incorrecto.
  • La política XSLTransform falla o no puede transformar el archivo XML de entrada según las reglas de transformación proporcionadas en el archivo XSL. Puede haber muchas causas diferentes por las cuales la política XSLTransform puede fallar. El motivo de la falla en el mensaje de error proporcionará más información sobre la causa. En la siguiente tabla, se muestra una causa de esa falla: prefijo no válido, y se explica con un ejemplo.
Causa Descripción
La carga útil de XML de entrada no está disponible La carga útil de XML de entrada no se pasa o está vacía.
XML de entrada con formato incorrecto La carga útil de XML de entrada presenta errores o no es válida.
Prefijo no válido La carga útil de XML de entrada tiene un prefijo que no se define en el archivo XSL.

Causa: la carga útil XML de entrada no está disponible

Este error se produce si no se pasa la carga útil XML de entrada o la carga útil de XML como parte de la solicitud a la API al proxy de la API con la política XSLTransform está vacía.

Ejemplo de mensaje de error

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

Diagnóstico

  1. Identifica el archivo XSL que no pudo evaluarse mediante la política de transformación de XML y el motivo del error. Si la carga útil XML de entrada no se pasa o está vacía, el motivo de la falla indica que hay un final de preparación del documento durante el análisis. Puedes encontrar esta información en el elemento faultstring de la respuesta de error. Por ejemplo, en la siguiente faultstring, el archivo XSL es XSL-Transform.xsl y el motivo del error es Premature end of document while parsing at line 1 (possibly around char 0). Ese error significa que la carga útil de XML no se pasa o está vacía.

        "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 si la carga útil de XML de entrada que se pasó como parte de la solicitud está vacía. Si la carga útil de entrada no se pasa o está vacía, esa es la causa del error.

    En la solicitud de ejemplo a continuación, la carga útil de la solicitud (es decir, el cuerpo de la solicitud) que envió el usuario estaba vacía.

    Por ejemplo:

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

    En el que your_host_alias es un dominio público que se usa para acceder a tus API, como se configura en la propiedad virtualhosts.hostAliases en tu archivo de anulaciones. Consulta la página Especifica anulaciones de configuración.

    Debido a que la carga útil de entrada XML está vacía, recibirás el siguiente error:

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

Solución

Asegúrate de que la entrada que se pase a la política XSLTransform sea una carga útil de XML válida y que no esté vacía.

Para solucionar el problema con la política XSLTransform de muestra, pasa una carga útil de XML válida. Por ejemplo:

  1. Crea un archivo llamado city.xml con el siguiente contenido:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Realiza la llamada a la API con un comando cURL de la siguiente manera:

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

    En el que your_host_alias es un dominio público que se usa para acceder a tus API, como se configura en la propiedad virtualhosts.hostAliases en tu archivo de anulaciones. Consulta la página Especifica anulaciones de configuración.

Causa: XML de entrada con formato incorrecto

La carga útil de XML de entrada que se pasó como parte de la solicitud a la API a la política XSLTransform tiene un formato incorrecto o no es válida.

Ejemplo de mensaje de error

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

Diagnóstico

  1. Identifica el archivo XSL que no pudo evaluarse mediante la política de transformación de XML y el motivo del error. Si la carga útil de XML de entrada presenta errores de formato, el motivo de la falla indica que hay un carácter inesperado. Puedes encontrar esta información en el elemento faultstring de la respuesta de error. Por ejemplo, en la siguiente faultstring, el archivo XSL es XSL-Transform.xsl y el motivo del error es Unexpected char while looking for open tag ('&lt;') character. Es decir, falta el valor “<” en la carga útil de XML.

    "faultstring": "Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unexpected char while looking for open tag ('&lt;') character\""
    
  2. Examina la carga útil de XML de entrada que se pasó a la política XSLTransform y verifica si tiene contenido XML válido o no. Si la carga útil de entrada no es un XML válido, esa es la causa del error.

    En la solicitud de ejemplo a continuación, la carga útil de la solicitud (es decir, el cuerpo de la solicitud) que envió el usuario estaba vacía.

    Por ejemplo:

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

    En el que your_host_alias es un dominio público que se usa para acceder a tus API, como se configura en la propiedad virtualhosts.hostAliases en tu archivo de anulaciones. Consulta la página Especifica anulaciones de configuración.

    En este ejemplo, city.xml se define de la siguiente manera:

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

    Debido a que la carga útil de entrada es JSON y no es un XML válido, recibirás el error:

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

Solución

Asegúrate de que la entrada que se pase a la política XSLTransform sea una carga útil de XML válida y que no esté vacía.

Para solucionar el problema con la política XSLTransform de muestra, pasa una carga útil de XML válida. Por ejemplo:

  1. Modifica el archivo city.xml para que el contenido esté en XML, como se muestra a continuación:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. Realiza la llamada a la API con un comando cURL de la siguiente manera:

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

    En el que your_host_alias es un dominio público que se usa para acceder a tus API, como se configura en la propiedad virtualhosts.hostAliases en tu archivo de anulaciones. Consulta la página Especifica anulaciones de configuración.

Causa: prefijo inválido

La carga útil de XML de entrada que se pasa a la política XSLTransform tiene un elemento que no se define como un prefijo en el archivo XSL especificado en la política.

Ejemplo de mensaje de error

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

Diagnóstico

  1. Identifica el archivo XSL que no pudo evaluarse mediante la política de transformación de XML y el motivo del error. En este caso, el motivo de la falla indicaría que hay un prefijo sin resolver en un número de línea específico en la carga útil de XML de entrada. Puedes encontrar esta información en el elemento faultstring de la respuesta de error. Por ejemplo, en el siguiente faultstring, el archivo XSL es XSL-Transform.xsl, el motivo del error es Unresolved Prefix y el número de línea es 1.

    "faultstring":"Evaluation of XSL XSL-Transform.xsl failed with reason: \"Unresolved Prefix at line 1(possibly  around char 270)\""
    
  2. Examina el contenido del archivo XSL (identificado en el paso 1 anterior) y la carga útil de XML de entrada. Si el prefijo que se usa en el número de línea (identificado en el paso 1) de la carga útil de XML de entrada no existe en el archivo XSL, entonces es la causa del error.

    A continuación, se muestra el XSL de muestra y la carga útil de XML correspondiente que conducen al error:

    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>
    

    Carga útil de XML de entrada

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

    La carga útil de XML de ejemplo anterior contiene un elemento <Life:Books>. Ten en cuenta que XSL no tiene este prefijo. En su lugar, tiene el prefijo como <xsl:text>&lt;Life&gt;</xsl:text>. Por lo tanto, verá el siguiente error:

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

Solución

Asegúrate de que la carga útil de XML de entrada que se pasa a la política XSLTransform tenga todos los formatos de elementos definidos como prefijos en el archivo XSL que se usa en la política.

Para corregir el ejemplo de archivo XML anterior, puedes modificar el archivo como se muestra a continuación:

Carga útil XML de entrada actualizada

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