Solución de problemas de errores del entorno de ejecución de políticas de JSON a XML

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

SourceUnavailable

Código de error

steps.json2xml.SourceUnavailable

Cuerpo de 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 se produce si la variable message especificada en el elemento <Source> de la política JSON a XML es:

  • Fuera del ámbito (no disponible en el flujo específico en el que se está ejecutando la política) o
  • No se puede resolver (no está definido)

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

Diagnóstico

  1. Identifica la política de JSON a XML en la que se ha producido 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 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 XML de la política JSON a XML fallida, compruebe que el nombre de la variable definida en el elemento <Source> coincida con el nombre de la variable identificada en la cadena de error (paso 1 anterior). Por ejemplo, la siguiente política de JSON a XML especifica una variable llamada response en el elemento <Source>, que coincide con lo que hay en 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 de JSON a XML.

  4. Si la variable es:

    • Fuera del ámbito (no disponible en el flujo específico en el que se está ejecutando la política) o
    • No se puede resolver (no está definido)

    entonces, esa es la causa del error.

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

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

    steps.json2xml.SourceUnavailable
    

Resolución

Asegúrate de que la variable definida en el elemento <Source> de la política JSON a XML fallida se haya definido y exista en el flujo en el que se ejecuta la política.

Para corregir la política de ejemplo de JSON a XML que se muestra arriba, puedes modificar el elemento <Source> para usar la variable request, ya que 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 respuesta de error

{
   "fault": {
        "faultstring": "JSONToXML[policy_name]: Execution failed due to reason: Expecting { or [ at line 1",
        "detail": {
            "errorcode": "steps.json2xml.ExecutionFailed"
        }
    }
}

Posibles motivos

Estas 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 ha enviado a la política JSON a XML no es válida o tiene un formato incorrecto.

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 de JSON a XML se define como una variable request o response y se supone que contiene una carga útil JSON, pero la carga útil está vacía, se produce el error.

Diagnóstico

  1. Identifica la política de JSON a XML en la que se ha producido el error. Puede 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> del XML de la política de JSON a XML que ha fallado y determina la variable especificada. Por ejemplo, la siguiente política de JSON a XML tiene el elemento <Source> definido como 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> de la política está vacía. Si está vacío, ese es el motivo del error.

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

    Por ejemplo:

    curl -v "http://your_host_alias/v1/testjsontoxml" -H "Content-Type: application/json"
    

    Donde your_host_alias es un dominio público que se usa para acceder a tus APIs, tal como se ha configurado en la propiedad virtualhosts.hostAliases de tu archivo de anulaciones. Consulta Especificar anulaciones de configuración.

    Como la carga útil de la respuesta JSON está vacía, recibes el código de error:

    steps.json2xml.ExecutionFailed
    

    Este error también puede producirse si el elemento <Source> se define como respuesta, pero el servidor backend envía una carga útil vacía.

Resolución

Asegúrate de que la entrada que se ha pasado a la política JSON a XML en el elemento <Source> sea una carga útil JSON válida y no esté vacía.

Para solucionar el problema con la política de JSON a XML de muestra, envía 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. Haz la llamada a la API con un comando curl de la siguiente manera:

    curl -v "http://your_host_alias/v1/testxmltojson" -H "Content-Type: application/json" -X POST -d @company.json
    

    Donde your_host_alias es un dominio público que se usa para acceder a tus APIs, tal como se ha configurado en la propiedad virtualhosts.hostAliases de tu archivo de anulaciones. Consulta Especificar anulaciones de configuración.

Causa: entrada no válida o con formato incorrecto

Si la política de JSON a XML analiza una entrada no válida o con errores de formato, se produce este error.

Por ejemplo, si se proporciona el siguiente JSON no válido como entrada a la política JSON a 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 de JSON a XML en la que se ha producido el error. Puede 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 la política de JSON a XML que ha fallado. Por ejemplo, la siguiente política de JSON a XML tiene el elemento <Source> definido 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 tiene un formato incorrecto, ese será el motivo del error.

    Supongamos que se ha enviado el siguiente JSON no válido a la política

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

    A continuación, se muestra una llamada de API de ejemplo que muestra cómo se ha enviado la solicitud:

    curl -v "http://your_host_alias/v1/testjsontoxml" -H "Content-Type:
    application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
    

    Donde your_host_alias es un dominio público que se usa para acceder a tus APIs, tal como se ha configurado en la propiedad virtualhosts.hostAliases de tu archivo de anulaciones. Consulta Especificar anulaciones de configuración.

    La carga útil JSON enviada en la solicitud no es válida porque el objeto JSON empieza y termina con corchetes ([ ]). Por este motivo, recibes el código de error:

    steps.json2xml.ExecutionFailed

    Este error también puede producirse si el elemento <Source> se ha definido como respuesta, pero la carga útil de la respuesta JSON no es válida o tiene un formato incorrecto.

Resolución

Comprueba que la entrada que se ha enviado a la política JSON a XML en el elemento <Source> sea válida y no esté mal formada.

Para solucionar el problema con la política de JSON a XML de ejemplo que hemos comentado anteriormente, envía 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 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 a XML es de tipo cadena y el elemento <OutputVariable> no está definido. El elemento <OutputVariable> es obligatorio cuando la variable definida en el elemento <Source> es de tipo cadena.

Diagnóstico

  1. Identifica la política de JSON a XML en la que se ha producido el error. Puedes encontrarlo 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 validación de la política de JSON a XML fallida, comprueba si falta el <OutputVariable>.

    A la siguiente política de JSON a XML 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. Busca el código del proxy de API en el que se definió la variable por primera vez.
    2. Una vez que sepas en qué política se define y se rellena la variable por primera vez, debes determinar el tipo de esa variable de la siguiente manera:
      1. Compruebe el valor del atributo type (si está presente).
      2. Si no se incluye el atributo type, se considera que la variable es una cadena.
    3. Si el tipo de variable es una cadena, ese es el motivo del error. Puede consultar información sobre las variables comunes y sus tipos en la referencia de variables.

    Por ejemplo, fíjate en la variable PostalCode del JSON anterior para la política XML.

    Por ejemplo, supongamos que se usa una política Assign Message 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 definido en <AssignVariable> es una cadena. Por lo tanto, la variable PostalCode es de tipo cadena.

    Recuerde que la variable PostalCode se usa en el elemento <Source> de la política JSONToXML:

    <Source>PostalCode</Source>
    

    Como PostalCode es de tipo cadena y falta el elemento <OutputVariable>, recibe 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 cadena, el elemento <OutputVariable> se defina en la política.

Para corregir la política JSONToXML descrita anteriormente, incluya 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 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 produce si el tipo de la variable definida en el elemento <Source> y el elemento <OutputVariable> no son el mismo. Es obligatorio que el tipo de las variables contenidas en el elemento <Source> y en el elemento <OutputVariable> coincida.

Los tipos válidos son message y string.

Diagnóstico

  1. Identifica la política de JSON a XML en la que se ha producido el error. Puedes encontrarlo 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 nota de la política JSON a XML fallida, anota los valores especificados en <OutputVariable> y <Source>.

    Veamos un ejemplo de política:

    <?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 especificado en los elementos <Source> y <OutputVariable>:

    1. Busca el código del proxy de API en el que se haya definido cada una de estas variables.
    2. Una vez que sepas en qué política se define y se rellena la variable por primera vez, debes determinar el tipo de esa variable de la siguiente manera:
      1. Compruebe el valor del atributo type (si está presente).
      2. Si no se incluye el atributo type, se considera que la variable es una cadena.
    3. Si el tipo de la variable especificada en <Source> es una cadena, mientras que el tipo de <OutputVariable> es un mensaje (o viceversa), ese es el motivo del error. Puede consultar información sobre las variables comunes y sus tipos en la referencia de variables.

    Por ejemplo, considera una política de asignación de mensajes que se usa 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>
    

    Tenga en cuenta que el tipo de variable definido en <AssignVariable> es una cadena, por lo que la variable PostalCode es de tipo cadena.

    Recuerde que la variable PostalCode se usa en el elemento <Source> de la política JSONToXML:

    <Source>PostalCode</Source>
    

    Del mismo modo, recuerda que la variable response se usa en el elemento <OutputVariable> de la política JSONToXML:

    <OutputVariable>response</OutputVariable>
    

    Como PostalCode es de tipo cadena y 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 puede producirse si la variable del elemento <Source> es de tipo message, pero la variable del elemento <OutputVariable> es de tipo cadena.

Resolución

Asegúrate de que el tipo de variable definido en el elemento <Source> y en el elemento <OutputVariable> sea siempre el mismo. Es obligatorio que el tipo de las variables contenidas en el elemento <Source> y en el elemento <OutputVariable> coincida. Es decir, asegúrate de que el tipo de los elementos <Source> y <OutputVariable> sea de cadena o de mensaje.

Para corregir la política de JSON a XML que se ha descrito anteriormente, puedes declarar otra variable PostalCode_output de tipo string mediante la política Asignar mensaje y usar esta variable en el elemento <OutputVariable> de la política de JSON a XML.

Política de asignación de mensajes modificada:

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

Política JSONToXML modificada:

<?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 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 produce si el tipo de la variable usada 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 origen no válido que se ha usado en la política de JSON a XML. Puede encontrar esta información en el mensaje de error. Por ejemplo, en el siguiente error, el tipo no válido es Integer.

    "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 de JSON a XML del proxy de API específico en el que se ha producido el error. En la política JSON a XML fallida, anota el nombre de la variable especificada en <Source>.

    A continuación, se muestra un ejemplo de política que tiene la variable 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. Busca el código del proxy de API en el que se definió esta variable por primera vez.
    2. Una vez que sepas en qué política se define y se rellena la variable por primera vez, debes determinar el tipo de esa variable de la siguiente manera:
      1. Compruebe el valor del atributo type (si está presente).
      2. Si no se incluye el atributo type, se considera que la variable es una cadena.
    3. Si el tipo de variable especificado en <Source> no es de mensaje ni de cadena, esa es la causa del error. Puede consultar información sobre las variables comunes y sus tipos en la referencia de variables.

    Por ejemplo, supongamos que la política ExtractVariables se usa para extraer el valor de una carga útil JSON y asigna el valor a la variable EmployeeID de tipo entero, tal 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>
    

    Recuerde que la variable EmployeeID se usa en el elemento <Source> de la política JSONToXML:

    <Source>EmployeeID</Source>
    

    Como el tipo de esta variable es Integer, que no es un tipo <Source> válido, el proxy de API falla y muestra el siguiente error:

    steps.json2xml.InvalidSourceType
    

Resolución

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

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