Resolução de problemas de erro de tempo de execução da política de JSON para XML

Está a ver a documentação do Apigee e do Apigee Hybrid.
Ver documentação do Apigee Edge.

SourceUnavailable

Código de erro

steps.json2xml.SourceUnavailable

Corpo da resposta de erro

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

Exemplo de erro

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

Causa

Este erro ocorre se a variável message especificada no elemento <Source> da política de JSON para XML for:

  • Fora do âmbito (não disponível no fluxo específico onde a política está a ser executada) ou
  • Não é possível resolver (não está definido)

Por exemplo, este erro ocorre se a política de JSON para XML for suposta ser executada no fluxo de pedidos, mas o elemento <Source> estiver definido para a variável response, que não existe no fluxo de pedidos.

Diagnóstico

  1. Identifique a política de JSON para XML onde ocorreu o erro e o nome da variável que não está disponível. Pode encontrar ambos os itens no elemento faultstring da resposta de erro. Por exemplo, no seguinte faultstring, o nome da política é Convert-JSONToXML e a variável é response:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. No XML da política de JSON para XML com falha, verifique se o nome da variável definido no elemento <Source> corresponde ao nome da variável identificado na string de falha (passo n.º 1 acima). Por exemplo, a seguinte política de JSON para XML especifica uma variável denominada response no elemento <Source>, que corresponde ao que está em 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. Determine se a variável usada no elemento <Source> está definida e disponível no fluxo no qual a política de JSON para XML está a ser executada.

  4. Se a variável for:

    • Fora do âmbito (não disponível no fluxo específico onde a política está a ser executada) ou
    • Não é possível resolver (não está definido)

    Nesse caso, essa é a causa do erro.

    Por exemplo, suponhamos que a política de JSON para XML apresentada acima se destina a ser executada no fluxo de pedido. Recorde que a variável response é usada no elemento <Source> da política de JSON para XML. A variável de resposta só está disponível no fluxo de resposta.

    Uma vez que a variável response não existe no fluxo de pedidos, recebe o código de erro:

    steps.json2xml.SourceUnavailable
    

Resolução

Certifique-se de que a variável definida no elemento <Source> da política JSON para XML com falha está definida e existe no fluxo onde a política é executada.

Para corrigir o exemplo de política JSON para XML apresentado acima, pode modificar o elemento <Source> para usar a variável request, porque existe no fluxo de pedidos:

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

steps.json2xml.ExecutionFailed

Corpo da resposta de erro

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

Causas possíveis

As possíveis causas deste erro são:

Causa Descrição
Payload de entrada em falta O payload de entrada (JSON) está vazio.
Entrada inválida ou com formato incorreto A entrada (JSON) transmitida à política de JSON para XML é inválida ou tem um formato incorreto.

Causa: payload de entrada em falta

Na política de JSON para XML, se o conteúdo (payload) da variável especificada no elemento <Source> estiver vazio, ocorre este erro.

Por exemplo, se o elemento <Source> na política de JSON para XML estiver definido como uma variável request ou response e se destinarem a conter um payload JSON, mas o payload estiver vazio, ocorre o erro.

Diagnóstico

  1. Identifique a política de JSON para XML onde ocorreu o erro. Pode encontrar estas informações no elemento faultstring da resposta de erro. Por exemplo, no seguinte faultstring, o nome da política é Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Examine o elemento <Source> no XML da política de JSON para XML com falhas e determine a variável especificada. Por exemplo, a seguinte política de JSON para XML tem o 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. Verifique se a variável especificada para o elemento <Source> na política está vazia. Se estiver vazio, é esse o motivo do erro.

    No exemplo de política JSON para XML apresentado acima, o payload do pedido (ou seja, o corpo do pedido) enviado pelo cliente está vazio.

    Por exemplo:

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

    Em que your_host_alias é um domínio público usado para aceder às suas APIs, conforme configurado na propriedade virtualhosts.hostAliases no ficheiro de substituições. Consulte Especifique substituições de configuração.

    Uma vez que o payload da resposta JSON está vazio, recebe o código de erro:

    steps.json2xml.ExecutionFailed
    

    Este erro também pode ocorrer se o elemento <Source> estiver definido como resposta, mas o servidor de back-end transmitir uma carga útil vazia.

Resolução

Certifique-se de que a entrada transmitida à política JSON para XML no elemento <Source> é uma carga útil JSON válida e não está vazia.

Para corrigir o problema com a política de JSON para XML de exemplo, transmita um payload JSON válido. Por exemplo:

  1. Crie um ficheiro denominado city.json com o seguinte conteúdo:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. Faça a chamada da API através de um comando curl da seguinte forma:

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

    Em que your_host_alias é um domínio público usado para aceder às suas APIs, conforme configurado na propriedade virtualhosts.hostAliases no ficheiro de substituições. Consulte Especifique substituições de configuração.

Causa: entrada inválida ou com formato incorreto

Se a política de JSON para XML analisar uma entrada inválida ou com formato incorreto, recebe este erro.

Por exemplo, se o seguinte JSON inválido for fornecido como entrada para a política JSON para XML:

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

recebe o erro:

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

Diagnóstico

  1. Identifique a política de JSON para XML onde ocorreu o erro. Pode encontrar estas informações no elemento faultstring da resposta de erro. Por exemplo, no seguinte faultstring, o nome da política é Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Examine o elemento <Source> especificado no XML da política de JSON para XML com falha. Por exemplo, a seguinte política de JSON para XML tem o elemento <Source> definido como a variável 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. Valide se a entrada especificada no elemento <Source> é um payload JSON válido. Se a entrada for inválida ou tiver um formato incorreto, essa é a causa do erro.

    Suponha que o seguinte JSON inválido foi transmitido à política

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

    Segue-se o exemplo de chamada da API que mostra como o pedido foi transmitido:

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

    Em que your_host_alias é um domínio público usado para aceder às suas APIs, conforme configurado na propriedade virtualhosts.hostAliases no ficheiro de substituições. Consulte Especifique substituições de configuração.

    O payload JSON transmitido no pedido é inválido porque o objeto JSON começa e termina com parênteses retos ([ ]). Por este motivo, recebe o código de erro:

    steps.json2xml.ExecutionFailed

    Este erro também pode ocorrer se o elemento <Source> tiver sido definido como resposta, mas a carga útil da resposta JSON for inválida ou tiver um formato incorreto.

Resolução

Certifique-se de que a entrada transmitida à política de JSON para XML no elemento <Source> é válida e não tem um formato incorreto.

Para corrigir o problema com a política de JSON para XML abordada acima, transmita um pedido de payload JSON válido da seguinte forma:

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

Código de erro

steps.json2xml.OutputVariableIsNotAvailable

Corpo da resposta de erro

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

Exemplo de erro

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

Causa

Este erro ocorre se a variável especificada no elemento <Source> da política de JSON para XML for do tipo string e o elemento <OutputVariable> não estiver definido. O elemento <OutputVariable> é obrigatório quando a variável definida no elemento <Source> é do tipo string.

Diagnóstico

  1. Identifique a política de JSON para XML onde ocorreu o erro. Pode encontrá-lo no elemento faultstring da resposta de erro. Por exemplo, no seguinte faultstring, o nome da política é Check-JSONToXML:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. No JSON com falha, valide se o elemento <OutputVariable> está em falta.

    A seguinte política JSONToXML de exemplo tem um elemento <OutputVariable> em falta:

    <?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. Determine o tipo de variável especificada no elemento <Source>:

    1. Localize o código no proxy de API onde a variável foi definida primeiro.
    2. Depois de descobrir a política na qual a variável é definida e preenchida primeiro, tem de determinar o tipo dessa variável da seguinte forma:
      1. Verifique o valor do atributo type (se estiver presente).
      2. Se o atributo type não estiver presente, a variável é considerada uma string.
    3. Se o tipo da variável for string, essa é a causa do erro. Pode saber mais sobre as variáveis comuns e os respetivos tipos na referência de variáveis.

    Por exemplo, veja a variável PostalCode no JSON para a política XML acima.

    Por exemplo, considere que é usada uma política Assign Message para atribuir um valor a uma variável denominada PostalCode, conforme mostrado abaixo:

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

    Tenha em atenção que o tipo de variável definido em <AssignVariable> é string. Assim, a variável PostalCode é do tipo string.

    Agora, recorde que a variável PostalCode é usada no elemento <Source> da política JSONToXML:

    <Source>PostalCode</Source>
    

    Uma vez que PostalCode é do tipo string e o elemento <OutputVariable> está em falta, recebe o código de erro:

    steps.json2xml.OutputVariableIsNotAvailable
    

Resolução

Certifique-se de que, se a variável especificada no elemento <Source> da política JSONToXML for do tipo string, o elemento <OutputVariable> é definido na política.

Para corrigir a política JSONToXML abordada acima, inclua um elemento <OutputVariable>, conforme mostrado abaixo.

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

steps.json2xml.InCompatibleTypes

Corpo da resposta de erro

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

Exemplo de erro

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

Causa

Este erro ocorre se o tipo da variável definida no elemento <Source> e no elemento <OutputVariable> não for o mesmo. É obrigatório que o tipo das variáveis contidas no elemento <Source> e no elemento <OutputVariable> corresponda.

Os tipos válidos são message e string.

Diagnóstico

  1. Identifique a política de JSON para XML onde ocorreu o erro. Pode encontrá-lo no elemento faultstring da resposta de erro. Por exemplo, no seguinte faultstring, o nome da política é JSONToXML_checktype:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. Na nota da política de JSON para XML com falha, tome nota dos valores especificados em <OutputVariable> e <Source>.

    Considere a seguinte política de exemplo:

    <?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. Determine o tipo de variável especificado nos elementos <Source> e <OutputVariable>:

    1. Localize primeiro o código no proxy da API onde cada uma destas variáveis foi definida.
    2. Depois de descobrir a política na qual a variável é definida e preenchida primeiro, tem de determinar o tipo dessa variável da seguinte forma:
      1. Verifique o valor do atributo type (se estiver presente).
      2. Se o atributo type não estiver presente, a variável é considerada uma string.
    3. Se o tipo da variável especificada em <Source> for string, enquanto o tipo de <OutputVariable> for message, ou vice-versa, essa é a causa do erro. Pode saber mais sobre as variáveis comuns e os respetivos tipos na referência de variáveis.

    Por exemplo, considere uma política Assign Message que é usada para atribuir um valor a uma variável denominada PostalCode, conforme mostrado abaixo:

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

    Tenha em atenção que o tipo de variável definido em <AssignVariable> é string. Por conseguinte, a variável PostalCode é do tipo string.

    Agora, recorde que a variável PostalCode é usada no elemento <Source> da política JSONToXML:

    <Source>PostalCode</Source>
    

    Da mesma forma, lembre-se de que a variável response é usada no elemento <OutputVariable> da política JSONToXML:

    <OutputVariable>response</OutputVariable>
    

    Uma vez que PostalCode é do tipo string, enquanto a variável response é do tipo de mensagem, são tipos incompatíveis, pelo que recebe o código de erro:

    steps.json2xml.InCompatibleTypes
    

    O erro acima também pode ocorrer se a variável no elemento <Source> for do tipo message, mas a variável no elemento <OutputVariable> for do tipo string.

Resolução

Certifique-se de que o tipo da variável definida no elemento <Source> e no elemento <OutputVariable> é sempre o mesmo. É obrigatório que o tipo das variáveis contidas no elemento <Source> e no elemento <OutputVariable> corresponda. Ou seja, certifique-se de que o tipo de <Source> e os elementos <OutputVariable> são ambos do tipo string ou mensagem.

Para corrigir a política JSON para XML abordada acima, pode declarar outra variável PostalCode_output do tipo string através da política Assign Message e usar esta variável no elemento <OutputVariable> da política JSON para XML.

Política de atribuição de mensagens 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 erro

steps.json2xml.InvalidSourceType

Corpo da resposta de erro

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

Exemplo de erro

{
    "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 erro ocorre se o tipo da variável usada para definir o elemento <Source> for inválido.Os tipos válidos de variável são message e string.

Diagnóstico

  1. Identifique o tipo de origem inválido usado na política de JSON para XML. Pode encontrar estas informações na mensagem de erro. Por exemplo, no erro seguinte, o tipo inválido é Integer.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Examine todas as políticas de JSON para XML no proxy de API específico onde ocorreu a falha. Na política de JSON para XML com falha, anote o nome da variável especificada em <Source>.

    Segue-se um exemplo de uma política que tem a variável denominada EmployeeID especificada no 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. Determine o tipo de variável especificado no elemento <Source>:

    1. Localize o código no proxy de API onde esta variável foi definida pela primeira vez.
    2. Depois de descobrir a política na qual a variável é definida e preenchida primeiro, tem de determinar o tipo dessa variável da seguinte forma:
      1. Verifique o valor do atributo type (se estiver presente).
      2. Se o atributo type não estiver presente, a variável é considerada uma string.
    3. Se o tipo da variável especificada em <Source> não for do tipo de mensagem nem de string, essa é a causa do erro. Pode saber mais sobre as variáveis comuns e os respetivos tipos na referência de variáveis.

    Por exemplo, vamos considerar que a política ExtractVariables é usada para extrair o valor de uma carga útil JSON e define o valor para a variável EmployeeID do tipo inteiro, conforme mostrado abaixo:

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

    Agora, recorde que a variável EmployeeID é usada no elemento <Source> da política JSONToXML:

    <Source>EmployeeID</Source>
    

    Uma vez que o tipo desta variável é Integer, que não é um tipo <Source> válido, o proxy de API falha com o erro:

    steps.json2xml.InvalidSourceType
    

Resolução

Certifique-se de que o tipo da variável usada para especificar o elemento <Source> é válido. Os tipos de <Source> válidos são message e string.

Para evitar o erro acima com a política JSONToXML, pode usar a variável request que é do tipo message ou qualquer outra string que seja um payload JSON válido.