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

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

SourceUnavailable

Código de erro

steps.xml2json.SourceUnavailable

Corpo da resposta de erro

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

Exemplo de mensagem de erro

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

Causa

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

  • Fora do âmbito (não disponível no fluxo específico em que 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 XML para JSON 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 XML para JSON 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-XMLToJSON e a variável é response:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available"
    
  2. No XML da política de XML para JSON 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 XML para JSON 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"?>
    <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. Determine se a variável usada no elemento <Source> está definida e disponível no fluxo no qual a política de XML para JSON está a ser executada.

  4. Se a variável for:

    • Fora do âmbito (não disponível no fluxo específico em que 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 XML para JSON 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 XML para JSON. A variável de resposta só está disponível no fluxo de resposta.

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

    steps.xml2json.SourceUnavailable
    

Resolução

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

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

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

steps.xml2json.ExecutionFailed

Corpo da resposta de erro

{
    "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 possíveis

As possíveis causas deste erro são:

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

Causa: payload de entrada em falta

Na política de XML para JSON, 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 XML para JSON estiver definido como uma variável request ou response e se destinar a conter um payload XML, este erro ocorre se o payload estiver vazio.

Diagnóstico

  1. Identifique a política de XML para JSON 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-XMLToJSON:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 1(possibly  around char 0)"
    
  2. Examine o elemento <Source> no XML da política de XML para JSON com falhas e determine a variável especificada. Por exemplo, a seguinte política de XML para JSON tem o elemento <Source> definido como pedido:

    <?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. Verifique se a variável especificada para o elemento <Source> na política XMLToJSON está vazia. Se estiver vazio, é esse o motivo do erro.

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

    Por exemplo:

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

    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 a carga útil do pedido XML está vazia, recebe o código de erro:

    steps.xml2json.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 de XML para JSON através do elemento <Source> é uma carga útil XML válida e não está vazia.

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

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

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  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/xml" -X POST -d @company.xml
    

    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 XML para JSON analisar uma entrada inválida ou com formato incorreto, recebe este erro.

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

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

recebe o erro:

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

Diagnóstico

  1. Identifique a política de XML para JSON 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-XMLToJSON:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 6(possibly  around char 0)"
    
  2. Examine o elemento <Source> especificado no XML da política XML para JSON com falhas. Por exemplo, a seguinte política de XML para JSON tem o elemento <Source> definido para a variável 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. Valide se a entrada especificada no elemento <Source> para a política XML para JSON é uma carga útil XML válida. Se a entrada for inválida ou tiver um formato incorreto, essa é a causa do erro.

    No exemplo de política de XML para JSON apresentado acima, o seguinte XML inválido foi transmitido à política Extract Variables através do ficheiro city.xml:

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

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

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

    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.

    A carga útil XML transmitida à API é inválida, uma vez que o XML não tem uma etiqueta final para o elemento <root>. Assim, recebe o código de erro:

    steps.xml2json.ExecutionFailed
    

    Este erro também pode ocorrer se o elemento <Source> estiver definido como resposta, mas a carga útil da resposta XML do servidor de back-end for inválida ou tiver um formato incorreto.

Resolução

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

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

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

OutputVariableIsNotAvailable

Código de erro

steps.xml2json.OutputVariableIsNotAvailable

Corpo da resposta de erro

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

Exemplo de mensagem de erro

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

Causa

Este erro ocorre se a variável especificada no elemento <Source> da política de XML para JSON 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 XML para JSON onde ocorreu o erro. Pode encontrá-lo no elemento faultstring da resposta de erro. Por exemplo, no seguinte faultstring, o nome da política é Convert-XMLToJSON:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available."
    
  2. No XML com falhas, valide se o elemento <OutputVariable> está em falta.

    Segue-se um exemplo de uma política de XML para JSON que tem o elemento <OutputVariable> em falta.

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

    1. Localize o código no pacote do proxy de API, onde a 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 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 TrackingNumber na política de XML para JSON acima. É do tipo string. Agora, considere uma política de atribuição de mensagens que é usada para definir o valor de uma variável denominada TrackingNumber, conforme mostrado abaixo:

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

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

    Agora, recorde que a variável TrackingNumber é usada no elemento <Source> da política XML para JSON:

    <Source>TrackingNumber</Source>
    

    Uma vez que TrackingNumber é do tipo string e <OutputVariable> está em falta na política, recebe o código de erro:

    steps.xml2json.OutputVariableIsNotAvailable
    

Resolução

Certifique-se de que, se a variável especificada no elemento <Source> da política XMLToJSON for do tipo string, o elemento <OutputVariable> é obrigatório neste caso.

Para corrigir a política de XML para JSON abordada acima, inclua o elemento <OutputVariable>, conforme mostrado abaixo.

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

steps.xml2json.InCompatibleTypes

Corpo da resposta de erro

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

Exemplo de mensagem de erro

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

The valid types are message and string.

Diagnóstico

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

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

    Segue-se um exemplo de uma política XMLToJSON que tem o elemento <OutputVariable> em falta

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

    1. Localize o código no pacote do proxy da API, onde cada uma destas variáveis 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 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 definir um valor para uma variável denominada TrackingNumber, conforme mostrado abaixo:

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

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

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

    <Source>TrackingNumber</Source>
    

    Da mesma forma, recorde que a variável request é usada no elemento <OutputVariable> da política de XML para JSON:

    <OutputVariable>request</OutputVariable>
    

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

    steps.xml2json.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.

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

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

Política XMLToJSON modificada:

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

steps.xml2json.InvalidSourceType

Corpo da resposta de erro

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

Exemplo de mensagem de erro

{
    "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 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 XML para JSON. Pode encontrar estas informações na mensagem de erro. Por exemplo, no erro seguinte, o tipo inválido é o número inteiro.

    "faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Examine todas as políticas de XML para JSON no proxy de API específico onde ocorreu a falha. Na nota da política de XML para JSON com falha, tome nota do nome da variável especificada em <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. Determine o tipo de variável especificada no elemento <Source>:

    1. Localize o código no pacote do 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 message nem 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, considere uma política ExtractVariables que é usada para extrair o valor de um payload XML e define o valor da variável BookCode como sendo do tipo integer, conforme mostrado abaixo:

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

    Agora, recorde que a variável BookCode é usada no elemento <Source> da política XML para JSON:

    <Source>BookCode</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.xml2json.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 XML para JSON, pode usar a variável request, que é do tipo message, ou qualquer outra string que seja um payload XML válido.