Solución de problemas de entorno de ejecución de políticas JSON to XML

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

SourceUnavailable

Código de error

steps.json2xml.SourceUnavailable

Cuerpo de la respuesta de error

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

Ejemplo de error

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

Causa

Este error ocurre si la variable message especificada en el elemento <Source> de la política JSON to XML tiene una de las siguientes características:

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

Por ejemplo, este error ocurre si se supone que la política JSON to XML 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 JSON to XML 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 de error. Por ejemplo, en el siguiente valor faultstring, el nombre de la política es Convert-JSONToXML y la variable es response:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. En el archivo XML de la política JSON to XML, verifica que el nombre de la variable establecida en el elemento <Source> coincida con el nombre de la variable identificado en la string de error (paso n.° 1 anterior). Por ejemplo, la siguiente política JSON to XML 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"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
        <DisplayName>Convert-JSONToXML</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>response</Source>
    </JSONToXML>
    
  3. Determina si la variable utilizada en el elemento <Source> está definida y disponible en el flujo en el que se ejecuta la política JSON to XML.

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

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

    entonces esa es la causa del error.

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

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

    steps.json2xml.SourceUnavailable
    

Resolución

Asegúrate de que la variable establecida en el elemento <Source> de la política JSON to XML con error se haya definido y exista en el flujo en el que se ejecuta la política.

Para corregir la política JSON to XML de ejemplo que se muestra arriba, puedes modificar el elemento <Source> para usar la variable request, porque existe en el flujo de la solicitud:

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
      <DisplayName>Convert-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>request</OutputVariable>
      <Source>request</Source>
  </JSONToXML>

ExecutionFailed

Código de error

steps.json2xml.ExecutionFailed

Cuerpo de la respuesta del error

{
   "fault": {
        "faultstring": "JSONToXML[policy_name]: Execution failed due to reason: Expecting { or [ at line 1",
        "detail": {
            "errorcode": "steps.json2xml.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 (JSON) está vacía.
Entrada no válida o con formato incorrecto La entrada (JSON) que se pasó a la política de JSON a XML no es válida o tiene errores de formato.

Causa: Falta la carga útil de entrada

En la política de JSON a XML, 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 JSON to XML se establece como una variable request o response y se supone que contendrá una carga útil JSON, pero la carga útil está vacía, ocurre el error.

Diagnóstico

  1. Identifica la política JSON to XML 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-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Examina el elemento <Source> en el archivo XML de política JSON to XML y determina la variable especificada. Por ejemplo, la siguiente política de JSON to XML tiene el elemento <Source> establecido en request:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
    <DisplayName>Convert-JSONToXML</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>request</OutputVariable>
    <Source>request</Source>
    </JSONToXML>
    
  3. Comprueba si la variable especificada para el elemento <Source> en la política está vacía. Si está vacía, esa es la causa del error.

    En el ejemplo de política JSON to XML que se muestra arriba, la carga útil de la solicitud (es decir, el cuerpo de la solicitud) que envió el cliente está vacía.

    Por ejemplo:

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

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

    steps.json2xml.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 pase a la política JSON to XML en el elemento <Source> sea una carga útil de JSON válida y no esté vacía.

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

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

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  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/json" -X POST -d @company.json
    

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

Si la política JSON to XML analiza entradas que no son válidas o tienen errores de formato, verás este error.

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

[
    "args": ["name" : "Google" ]
]

aparecerá el siguiente error:

"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"

Diagnóstico

  1. Identifica la política JSON to XML 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-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Examina el elemento <Source> especificado en el archivo XML de política JSON to XML con errores. Por ejemplo, la siguiente política JSON to XML tiene el elemento <Source> establecido en la variable request:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
      <DisplayName>Convert-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>request</OutputVariable>
      <Source>request</Source>
    </JSONToXML>
    
  3. Valida si la entrada especificada en el elemento <Source> es una carga útil de JSON válida. Si la entrada no es válida o incorrecto, esa es la causa del error.

    Supón que se pasó el siguiente JSON no válido a la política.

    [
        "args": ["name" : "Google" ]
    ]
    

    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/testjsontoxml" -H "Content-Type:
    application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
    

    La carga útil JSON que se pasa en la solicitud no es válida porque el objeto JSON inicia y termina con corchetes ([ ]). Por este motivo, recibirás el código de error:

    steps.json2xml.ExecutionFailed

    Este error también puede ocurrir si el elemento <Source> se configuró como respuesta, pero la carga útil de la respuesta JSON no es válida o presenta errores de formato.

Solución

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

Para solucionar el problema con la política JSON to XML de ejemplo analizada anteriormente, pasa una solicitud de carga útil de JSON válida de la siguiente manera:

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

Código de error

steps.json2xml.OutputVariableIsNotAvailable

Cuerpo de la respuesta de error

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

Ejemplo de error

{
    "fault": {
        "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
        }
    }
}

Causa

Este error se produce si la variable especificada en el elemento <Source> de la política JSON to XML es de string de tipo y el elemento <OutputVariable> no está definido. Este elemento <OutputVariable>es obligatorio cuando la variable definida en el elemento <Source> es de tipo de string.

Diagnóstico

  1. Identifica la política JSON to XML 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 Check-JSONToXML:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. En la política de JSON to XML con errores, valide si falta el <OutputVariable>.

    A la siguiente política de JSONToXML de ejemplo le falta el elemento <OutputVariable>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
        <DisplayName>Check-JSONToXML</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
            <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <Source>PostalCode</Source>
    </JSONToXML>
    
  3. Determina el tipo de variable especificado en el elemento <Source>:

    1. Ubica el código en el proxy de API, donde 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 una 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 PostalCode en la política JSON to XML anterior.

    A modo de ejemplo, considera que se usa una Política de Asignar mensaje para asignar un valor a una variable llamada PostalCode, como se muestra a continuación:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
        <DisplayName>Assign_PostalCode</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>PostalCode</Name>
            <Value>{"value":"56008"}</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 PostalCode es de tipo string.

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

    <Source>PostalCode</Source>
    

    Debido a que PostalCode es del tipo string y no se encuentra el elemento <OutputVariable>, recibirás el código de error:

    steps.json2xml.OutputVariableIsNotAvailable
    

Resolución

Asegúrate de que, si la variable especificada en el elemento <Source> de la política JSONToXML es de tipo string, el elemento <OutputVariable> se defina dentro de la política.

Para corregir la política JSONToXML antes mencionada, incluye un elemento <OutputVariable>, como se muestra a continuación.

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
      <DisplayName>Check-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>response</OutputVariable>
      <Source>PostalCode</Source>
  </JSONToXML>

InCompatibleTypes

Código de error

steps.json2xml.InCompatibleTypes

Cuerpo de la respuesta de error

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

Ejemplo de error

{
    "fault": {
        "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.json2xml.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.

Los tipos válidos son message y string.

Diagnóstico

  1. Identifica la política JSON to XML 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 JSONToXML_checktype:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. En la política JSON to XML con error, ten en cuenta los valores especificados en <OutputVariable> y <Source>.

    Considera la siguiente política de ejemplo:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML_checktype">
        <DisplayName>JSONToXML_checktype</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
            <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <OutputVariable>response</OutputVariable>
        <Source>PostalCode</Source>
    </JSONToXML>
    
    
  3. Determina el tipo de variable especificada en los elementos <Source> y <OutputVariable>:

    1. Ubica el código en el proxy de API donde primero se definió 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 una string, mientras el tipo de <OutputVariable> es un 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 asignar un valor en una variable llamada PostalCode como se muestra a continuación:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
        <DisplayName>Assign_PostalCode</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>PostalCode</Name>
            <Value>{"value":"56008"}</Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    Ten en cuenta que el tipo de variable establecido en <AssignVariable> es una string. Por lo tanto, la variable PostalCode es de tipo string.

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

    <Source>PostalCode</Source>
    

    De manera similar, recuerda que la variable response se usa en el elemento <OutputVariable> de la política de XMLToJSON:

    <OutputVariable>response</OutputVariable>
    

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

    steps.json2xml.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. Es decir, asegúrate de que el tipo de los elementos <Source> y <OutputVariable> sean de tipo string o mensaje.

Para corregir la política JSON to XML analizada anteriormente, puedes declarar otra variable PostalCode_output de tipo string con la política Asignar mensaje y usar esta variable en el elemento <OutputVariable> de la política JSON to XML.

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_PostalCode">
    <DisplayName>Assign_PostalCode</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name>PostalCode</Name>
        <Value>{"value":"56008"}</Value>
        <Ref/>
    </AssignVariable>
    <AssignVariable>
        <Name>PostalCode_output</Name>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Se modificó la política JSONToXML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
    <DisplayName>JSONToXML_checktype</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>PostalCode_output</OutputVariable>
    <Source>PostalCode</Source>
</JSONToXML>

InvalidSourceType

Código de error

steps.json2xml.InvalidSourceType

Cuerpo de la respuesta de error

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

Ejemplo de error

{
    "fault": {
        "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.json2xml.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 JSON to XML. 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": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Examina todas las políticas JSON to XML en el proxy de API específico en el que se produjo la falla. En la política JSON to XML con errores, toma nota del nombre de la variable especificada en <Source>.

    A continuación, se muestra una política de ejemplo que tiene la variable llamada EmployeeID especificada en el elemento <Source>:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
    <DisplayName>Check_SourceType</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>request</OutputVariable>
    <Source>EmployeeID</Source>
</JSONToXML>
  1. Determina el tipo de variable especificado en el elemento <Source>:

    1. Ubica el código en el proxy de API, donde 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 especificada en <Source> no es de tipo mensaje 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, supongamos que la política ExtractVariables se usa para extraer el valor de una carga útil JSON y se establece el valor en la variable EmployeeID de tipo de número entero, como se muestra a continuación:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractJSONVariables">
        <Source>request</Source>
        <JSONPayload>
            <Variable name="EmployeeID" type="integer">
                <JSONPath>$.ID</JSONPath>
            </Variable>
        </JSONPayload>
    </ExtractVariables>
    

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

    <Source>EmployeeID</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.json2xml.InvalidSourceType
    

Solució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 JSONToXML, puedes usar la variable de solicitud, que es del tipo mensaje, o cualquier otra string que sea una carga útil JSON válida.