Solución de problemas de errores de entorno de ejecución de la política de XML a JSON

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

SourceUnavailable

Código de error

steps.xml2json.SourceUnavailable

Cuerpo de la respuesta de error

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Source [source_variable] is not available",
        "detail": {
            "errorcode": "steps.xmltojson.SourceUnavailable"
        }
    }
}

Ejemplo de mensaje de error

{
    "fault": {
        "faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available",
        "detail": {
            "errorcode": "steps.xml2json.SourceUnavailable"
        }
    }
}

Causa

Este error se produce si el mensaje o la variable de string especificada en el elemento <Source> de la política de XML a JSON es la siguiente:

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

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

Diagnóstico

  1. Identifica la política de XML a JSON en la que se generó el error y el nombre de la variable que no está disponible. Puedes encontrar ambos elementos en el elemento faultstring de la respuesta de error. Por ejemplo, en el siguiente valor faultstring, el nombre de la política es Convert-XMLToJSON y la variable es response:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available"
    
  2. En el archivo XML de políticas de XML a JSON con errores, verifica que el nombre de la variable establecida en el elemento <Source> coincida con el nombre de la variable identificado en la string con errores (paso n.º 1 anterior). Por ejemplo, la siguiente política de XML a JSON especifica una variable llamada response en el elemento <Source>, que coincide con lo que hay en la faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>response</OutputVariable>
        <Source>response</Source>
    </XMLToJSON>
    
  3. Determina si la variable que se usa en el elemento <Source> está definida y disponible en el flujo en el que se ejecuta la política de XML a JSON.

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

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

    entonces esa es la causa del error.

    Como ejemplo, supongamos que la política de XML a JSON anterior se debe ejecutar en el flujo de la solicitud. Recuerda que la variable response se usa en el elemento <Source> de la política de XML a JSON. La variable de respuesta solo está disponible en el flujo de respuesta.

    Debido a que la variable de respuesta no existe en el flujo de solicitud, recibes el siguiente código de error:

    steps.xml2json.SourceUnavailable
    

Resolución

Asegúrate de que la variable establecida en el elemento <Source> del archivo XML de políticas de XML a JSON con errores esté definida y exista en el flujo en el que se ejecuta la política.

A fin de corregir el ejemplo de la política de XML a JSON anterior, puedes modificar el elemento <Source> para usar la variable request como se encuentra en el flujo de solicitud:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
    <DisplayName>Convert-XMLToJSON</DisplayName>
    <Properties/>
    <Format>google</Format>
    <OutputVariable>response</OutputVariable>
    <Source>request</Source>
</XMLToJSON>

ExecutionFailed

Código de error

steps.xml2json.ExecutionFailed

Cuerpo de la respuesta del error

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Execution failed. reason: Premature end of document while parsing at line [line_number](possibly  around char [character_number])",
        "detail": {
            "errorcode": "steps.xml2json.ExecutionFailed"
        }
    }
}

Causas posibles

Las siguientes son las posibles causas de este error:

Causa Descripción
Falta la carga útil de entrada La carga útil de entrada (XML) está vacía.
Entrada no válida o con formato incorrecto La entrada (XML) que se pasó a la política de XML a JSON no es válida o tiene errores de formato.

Causa: Carga útil de entrada faltante

En la política de XML a JSON si el contenido (carga útil) de la variable especificada en el elemento <Source> está vacío, se produce este error.

Por ejemplo, si el elemento <Source> de la política XML a JSON se establece como una variable request o response y se supone que contiene una carga útil XML, este error se genera si la carga útil está vacía.

Diagnóstico

  1. Identifica la política de XML a JSON en la que se produjo el error. Puedes encontrar esta información en el elemento faultstring de la respuesta de error. Por ejemplo, en el siguiente faultstring, el nombre de la política es Convert-XMLToJSON:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 1(possibly  around char 0)"
    
  2. Examina el elemento <Source> en el archivo XML de políticas de XML a JSON con errores y determina la variable especificada. Por ejemplo, la siguiente política de XML a JSON tiene configurado el elemento <Source>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Options>
            <RecognizeNumber>true</RecognizeNumber>
            <RecognizeBoolean>true</RecognizeBoolean>
            <RecognizeNull>true</RecognizeNull>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>request</Source>
    </XMLToJSON>
    
  3. Comprueba si la variable especificada para el elemento <Source> en la política de XML a JSON está vacía. Si está vacía, esa es la causa del error.

    En la política de XML a JSON de ejemplo anterior, la carga útil de la solicitud (es decir, el cuerpo de la solicitud) que envió el cliente estaba vacía.

    Por ejemplo:

    curl -v "http://<org>-<env>.apigee.net/v1/testxmltojson" -H "Content-Type: application/xml"
    

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

    steps.xml2json.ExecutionFailed
    

    Este error también puede ocurrir si el elemento <Source> está configurado como respuesta, pero el servidor de backend pasa una carga útil vacía.

Resolución

Asegúrate de que la entrada que se pasa a la política de XML a JSON a través del elemento <Source> sea una carga útil de XML válida y no esté vacía.

Para corregir el problema con la política de XML a JSON, 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://<org>-<env>.apigee.net/v1/testxmltojson" -H "Content-Type: application/xml" -X POST -d @company.xml
    

Causa: La entrada no es válida o tiene un formato incorrecto

Si la política de XML a JSON analiza una entrada que no es válida o tiene un formato incorrecto, aparecerá este error.

Por ejemplo, si se proporciona el siguiente XML no válido como entrada a la política de XML a JSON,

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <City>Bengaluru</City>
   <Name>Apigee</Name>
   <Pincode>560016</Pincode>

aparecerá el siguiente error:

"faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 6(possibly  around char 0)"

Diagnóstico

  1. Identifica la política de XML a JSON en la que se produjo el error. Puedes encontrar esta información en el elemento faultstring de la respuesta de error. Por ejemplo, en el siguiente faultstring, el nombre de la política es Convert-XMLToJSON:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 6(possibly  around char 0)"
    
  2. Examina el elemento <Source> especificado en el archivo XML de política de XML a JSON con errores. Por ejemplo, la siguiente política de XML a JSON tiene el elemento <Source> configurado en la variable request:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Options>
            <RecognizeNumber>true</RecognizeNumber>
            <RecognizeBoolean>true</RecognizeBoolean>
            <RecognizeNull>true</RecognizeNull>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>request</Source>
    </XMLToJSON>
    
  3. Valida si la entrada especificada en el elemento <Source> en la política de XML a JSON es una carga útil de XML válida. Si la entrada no es válida o incorrecto, esa es la causa del error.

    En el ejemplo de política de XML a JSON anterior, el siguiente XML no válido se pasó a la política para extraer variables a través del archivo city.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    

    A continuación, la llamada a la API de muestra que muestra cómo se pasó la solicitud:

    curl -v "http://<org>-<env>.apigee.net/v1/testxmltpjson" -H "Content-Type: application/xml" -X POST -d @city.xml
    

    La carga útil XML que se pasa a la API no es válida, ya que el XML no tiene una etiqueta final para el elemento <root>. Recibirás el siguiente código de error:

    steps.xml2json.ExecutionFailed
    

    Este error también se puede generar si el elemento <Source> está configurado como respuesta, pero la carga útil de la respuesta XML del servidor de backend no es válida o tiene un formato incorrecto.

Resolución

Asegúrate de que la entrada que se pasa a la política de XML a JSON mediante el elemento <Source> sea válida y no tenga formato incorrecto.

Para corregir el problema con la política de XML a JSON de ejemplo que se mencionó antes, pasa una solicitud de carga útil de XML válida de la siguiente manera:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <City>Bengaluru</City>
   <Name>Apigee</Name>
   <Pincode>560016</Pincode>
</root>

OutputVariableIsNotAvailable

Código de error

steps.xml2json.OutputVariableIsNotAvailable

Cuerpo de la respuesta de error

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.xml2json.OutputVariableIsNotAvailable"
        }
    }
}

Ejemplo de mensaje de error

{
    "fault": {
        "faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.xml2json.OutputVariableIsNotAvailable"
        }
    }
}

Causa

Este error se genera si la variable especificada en el elemento <Source> de la política de XML a JSON es de tipo string y no se define el elemento <OutputVariable>. El elemento <OutputVariable> es obligatorio cuando la variable definida en el elemento <Source> es del tipo string.

Diagnóstico

  1. Identifica la política de XML a JSON en la que se produjo el error. Puedes encontrarla en el elemento faultstring de la respuesta de error. Por ejemplo, en el siguiente faultstring, el nombre de la política es Convert-XMLToJSON:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available."
    
  2. En la política de XML a JSON con errores, valida si falta la <OutputVariable>.

    A continuación, se muestra un ejemplo de la política de XML a JSON que contiene un elemento <OutputVariable>.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Format>google</Format>
        <Source>TrackingNumber</Source>
    </XMLToJSON>
    
    
  3. Determina el tipo de variable especificado en el elemento <Source>:

    1. Localiza el código dentro del paquete del proxy de API, en el que la variable se definió primero.
    2. Una vez que determinas la política en la que se define y propaga la variable primero, debes determinar el tipo de esa variable de la siguiente manera:
      1. Comprueba el valor del atributo del tipo (si está presente).
      2. Si el atributo de tipo no está presente, la variable se considera una string.
    3. Si el tipo de variable es string, esa es la causa del error. Puedes obtener información sobre las variables comunes y sus tipos en la referencia de variables.

    Por ejemplo, observa la variable TrackingNumber en la política de XML a JSON anterior. Es de tipo string. Ahora, considera una política de mensaje asignado que se usa para establecer el valor en una variable llamada TrackingNumber, como se muestra a continuación:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
        <DisplayName>Assign_TrackingNumber</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>TrackingNumber</Name>
            <Value><![CDATA[<Code>560075393539898</Code>]]></Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    Ten en cuenta que el tipo de variable establecido mediante <AssignVariable> es una string. Entonces, la variable TrackingNumber es de tipo string.

    Ahora, recuerda que la variable TrackingNumber se usa en el elemento <Source> de la política de XML a JSON:

    <Source>TrackingNumber</Source>
    

    Dado que TrackingNumber es de tipo string y falta el <OutputVariable> en la política, recibirás el siguiente código de error:

    steps.xml2json.OutputVariableIsNotAvailable
    

Resolución

Asegúrate de que, si la variable especificada en el elemento <Source> de la política de XML a JSON es de tipo string, el elemento <OutputVariable> es obligatorio en este caso.

Para corregir la política de XML a JSON anterior, incluye el elemento <OutputVariable> como se muestra a continuación.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
    <DisplayName>Convert-XMLToJSON</DisplayName>
    <Properties/>
    <Format>google</Format>
    <OutputVariable>response</OutputVariable>
    <Source>TrackingNumber</Source>
</XMLToJSON>

InCompatibleTypes

Código de error

steps.xml2json.InCompatibleTypes

Cuerpo de la respuesta de error

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.xml2json.InCompatibleTypes"
        }
    }
}

Ejemplo de mensaje de error

{
    "fault": {
        "faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.xml2json.InCompatibleTypes"
        }
    }
}

Causa

Este error se genera si el tipo de variable definida en el elemento <Source> y el elemento <OutputVariable> no son iguales. Es obligatorio que el tipo de variables incluidas dentro del elemento <Source> y el elemento <OutputVariable> coincidan.

The valid types are message and string.

Diagnóstico

  1. Identifica la política de XML a JSON en la que se produjo el error. Puedes encontrarla en el elemento faultstring de la respuesta de error. Por ejemplo, en el siguiente faultstring, el nombre de la política es XMLToJSON_CheckType:

    "faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type."
    
  2. En la política de XML a JSON con errores, ten en cuenta los valores especificados en <OutputVariable>.

    A continuación, se muestra una política de XML a JSON de ejemplo que no tiene el elemento <OutputVariable>

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
        <DisplayName>XMLToJSON_CheckType</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>request</OutputVariable>
        <Source>TrackingNumber</Source>
    </XMLToJSON>
    
  3. Determina el tipo de variable especificada en los elementos <Source> y <OutputVariable>:

    1. Ubica el código en el paquete del proxy de API, en el que se definió primero cada una de estas variables.
    2. Una vez que determinas la política en la que se define y propaga la variable primero, debes determinar el tipo de esa variable de la siguiente manera:
      1. Comprueba el valor del atributo del tipo (si está presente).
      2. Si el atributo de tipo no está presente, la variable se considera una string.
    3. Si el tipo de variable especificada en <Source> es string mientras que el tipo de <OutputVariable> es mensaje o viceversa, esa es la causa del error. Puedes obtener información sobre las variables comunes y sus tipos en la referencia de variables.

    A modo de ejemplo, política de mensaje asignado que se usa para establecer un valor en una variable llamada TrackingNumber como se muestra a continuación:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
        <DisplayName>Assign_TrackingNumber</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>TrackingNumber</Name>
            <Value><![CDATA[<Code>560075393539898</Code>]]></Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    Ten en cuenta que el tipo de variable establecido mediante <AssignVariable> es una string. Entonces, la variable TrackingNumber es de tipo string.

    Ahora, recuerda que la variable TrackingNumber se usa en el elemento <Source> de la política de XML a JSON:

    <Source>TrackingNumber</Source>
    

    Del mismo modo, recuerda que la variable request se usa en el elemento <OutputVariable> de la política de XML a JSON:

    <OutputVariable>request</OutputVariable>
    

    Debido a que TrackingNumber es de tipo string, mientras que la variable response es de tipo message, son tipos incompatibles, por lo que recibes el siguiente código de error:

    steps.xml2json.InCompatibleTypes
    

    El error anterior también se puede generar si la variable en el elemento <Source> es de tipo message, pero la variable en el elemento <OutputVariable> es de tipo string.

Resolución

Asegúrate de que el tipo de variable que se define en el elemento <Source> y el elemento <OutputVariable> siempre sea el mismo. Es obligatorio que el tipo de variables incluidas dentro del elemento <Source> y el elemento <OutputVariable> coincidan.

Para corregir la política de XML a JSON anterior, puedes declarar otra variable TrackingNumber_output de tipo string mediante la política de mensaje asignado y usar esta variable en el elemento <OutputVariable> de la política de XML a JSON.

Se modificó la política de mensaje asignado:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
    <DisplayName>Assign_TrackingNumber</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name>TrackingNumber</Name>
        <Value><![CDATA[<Code>560098</Code>]]></Value>
        <Ref/>
    </AssignVariable>
    <AssignVariable>
        <Name>TrackingNumber_output</Name>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Se modificó la política de XML a JSON:

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
      <DisplayName>XMLToJSON_CheckType</DisplayName>
      <Properties/>
      <Format>google</Format>
      <OutputVariable>TrackingNumber_output</OutputVariable>
      <Source>TrackingNumber</Source>
  </XMLToJSON>

InvalidSourceType

Código de error

steps.xml2json.InvalidSourceType

Cuerpo de la respuesta de error

{
    "fault": {
        "faultstring": "XMLToJSON[class invalid_class]: Invalid source type class invalid_class. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.xml2json.InvalidSourceType"
        }
    }
}

Ejemplo de mensaje de error

{
    "fault": {
        "faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.xml2json.InvalidSourceType"
        }
    }
}

Causa

Este error se genera si el tipo de variable que se usa para definir el elemento <Source> no es válido. Los tipos de variable válidos son message y string.

Diagnóstico

  1. Identifica el tipo de fuente no válido que se usa en la política de XML a JSON. Puedes encontrar esta información en el mensaje de error. Por ejemplo, en el siguiente error, el tipo no válido es un número entero.

    "faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Examina todas las políticas de XML a JSON en el proxy de API específico en el que se produjo la falla. En la política de XML a JSON con errores, ten en cuenta el nombre de la variable especificada en <Source>.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
        <DisplayName>XMLToJSON_CheckType</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>response</OutputVariable>
        <Source>BookCode</Source>
    </XMLToJSON>
    
  3. Determina el tipo de variable especificado en el elemento <Source>:

    1. Ubica el código en el paquete del proxy de API, en el que esta variable se definió primero.
    2. Una vez que determinas la política en la que se define y propaga la variable primero, debes determinar el tipo de esa variable de la siguiente manera:
      1. Comprueba el valor del atributo del tipo (si está presente).
      2. Si el atributo de tipo no está presente, la variable se considera una string.
    3. Si el tipo de variable especificada en <Source> no es message ni string, esa es la causa del error. Puedes obtener información sobre las variables comunes y sus tipos en la referencia de variables.

    A modo de ejemplo, considera una política de ExtractVariables que se usa para extraer el valor de una carga útil XML y establece el valor en la variable BookCode como integer, como se muestra a continuación:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract_BookCode">
        <DisplayName>Extract_BookCode</DisplayName>
        <Properties/>
        <Source>request</Source>
        <XMLPayload stopPayloadProcessing="false">
            <Variable name="BookCode" type="integer">
                <XPath>/root/BookCode</XPath>
            </Variable>
        </XMLPayload>
    </ExtractVariables>
    

    Ahora, recuerda que la variable BookCode se usa en el elemento <Source> de la política de XML a JSON:

    <Source>BookCode</Source>
    

    Debido a que el tipo de esta variable es Integer, que no es un tipo <Source> válido, el proxy de API falla con el siguiente error:

    steps.xml2json.InvalidSourceType
    

Resolución

Asegúrate de que el tipo de variable que se usa para especificar el elemento <Source> sea válido. Los tipos <Source> válidos son message y string.

Para evitar el error anterior con la política de XML a JSON, puedes usar la variable request, que es del tipo message, o cualquier otra string que sea una carga útil XML válida.