Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.
SourceUnavailable
Código do 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
Esse erro ocorre se a variável message ou string especificada no elemento <Source>
da política XML para JSON for:
- fora do escopo (não disponível no fluxo específico em que a política está sendo executada) ou
- Não é possível resolver (não está definida)
Por exemplo, esse erro ocorrerá se a política XML para JSON for executada no fluxo de solicitação, mas o elemento <Source>
for definido como a variável response
, que não existe no fluxo de solicitação.
Diagnóstico
Identifique a política XML para JSON em que o erro ocorreu e o nome da variável que não está disponível. É possível encontrar os dois itens no elemento
faultstring
da resposta de erro. Por exemplo, nofaultstring
a seguir, o nome da política éConvert-XMLToJSON
e a variável éresponse
:"faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available"
No XML da política XML para JSON com falha, verifique se o nome da variável definida no elemento
<Source>
corresponde ao nome da variável identificada na string de falha (etapa 1 acima). Por exemplo, a seguinte política XML para JSON especifica uma variável chamadaresponse
no elemento<Source>
, que corresponde ao que está emfaultstring
:<?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>
Determine se a variável usada no elemento
<Source>
está definida e disponível no fluxo em que a política XML para JSON está sendo executada.Se a variável for:
- fora do escopo (não disponível no fluxo específico em que a política está sendo executada) ou
- não é possível resolver (não está definida)
essa será a causa do erro.
Como exemplo, digamos que a política XML para JSON mostrada acima seja executada no fluxo request. Lembre-se de que a variável
response
é usada no elemento<Source>
da política XML para JSON. A variável de resposta está disponível apenas no fluxo de resposta.Como a variável response não existe no fluxo de solicitação, você recebe o código do erro:
steps.xml2json.SourceUnavailable
Resolução
Verifique se a variável definida no elemento <Source>
da política com falha de XML para JSON está definida e existe no fluxo em que a política é executada.
Para corrigir o exemplo de política XML para JSON mostrada acima, modifique o elemento <Source>
para usar a variável request
no fluxo de solicitação:
<?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 do 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
Veja a seguir as possíveis causas para esse erro:
Causa | Descrição |
Payload de entrada ausente | O payload de entrada (XML) está vazio. |
Entrada inválida ou malformada | A entrada (XML) passada para a política XML para JSON é inválida ou está incorreta. |
Causa: payload de entrada ausente
Na política XML para JSON, se o conteúdo (payload) da variável especificada no elemento <Source>
estiver vazio, esse erro ocorrerá.
Por exemplo, se o elemento <Source>
na política XML para JSON estiver definido como uma variável request
ou response
e ele precisar conter um payload XML, esse erro ocorrerá se o payload estiver vazio.
Diagnóstico
Identifique a política de XML para JSON em que ocorreu o erro. Você encontra essas informações no elemento
faultstring
da resposta de erro. Por exemplo, nofaultstring
a seguir, 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)"
Examine o elemento
<Source>
no XML da política XML para JSON com falha e determine a variável especificada. Por exemplo, a seguinte política XML para JSON tem o elemento<Source>
definido para solicitar:<?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>
Verifique se a variável especificada para o elemento
<Source>
na política XMLToJSON está vazia. Se estiver vazia, essa será a causa do erro.No exemplo de política XML para JSON mostrado acima, o payload da solicitação (isto é, o corpo da solicitação) enviado pelo cliente estava vazio.
Exemplo:
curl -v "http://your_host_alias/v1/testxmltojson" -H "Content-Type: application/xml"
Em que your_host_alias é um domínio aberto ao público usado para acessar suas APIs, conforme configurado na propriedade
virtualhosts.hostAliases
do arquivo de modificações. Consulte Especificar substituições de configuração.Como o payload da solicitação XML está vazio, você recebe o código do erro:
steps.xml2json.ExecutionFailed
Esse erro também poderá ocorrer se o elemento
<Source>
estiver definido como resposta, mas um payload vazio for transmitido pelo servidor de back-end.
Resolução
Verifique se a entrada passada para a política XML para JSON por meio do elemento <Source>
é um payload XML válido e não está vazio.
Para corrigir o problema com a política XML para JSON de exemplo, passe um payload XML válido. Exemplo:
Crie um arquivo chamado 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>
Faça a chamada de API usando um comando curl da seguinte maneira:
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 aberto ao público usado para acessar suas APIs, conforme configurado na propriedade
virtualhosts.hostAliases
do arquivo de modificações. Consulte Especificar substituições de configuração.
Causa: entrada inválida ou malformada
Se a política XML para JSON analisar uma entrada inválida ou incorreta, você verá esse 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>
você receberá o erro:
"faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 6(possibly around char 0)"
Diagnóstico
Identifique a política de XML para JSON em que ocorreu o erro. Você encontra essas informações no elemento
faultstring
da resposta de erro. Por exemplo, nofaultstring
a seguir, 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)"
Examine o elemento
<Source>
especificado no XML da política XML para JSON com falha. Por exemplo, a política XML para JSON a seguir tem o elemento<Source>
definido como a variávelrequest
:<?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>
Valide se a entrada especificada no elemento
<Source>
para a política XML para JSON é um payload XML válido. Se a entrada for inválida ou estiver malformada, essa será a causa do erro.No exemplo de política XML para JSON mostrado acima, o seguinte XML inválido foi transmitido à política "Extrair variáveis" por meio do arquivo
city.xml
:<?xml version="1.0" encoding="UTF-8"?> <root> <City>Bengaluru</City> <Name>Apigee</Name> <Pincode>560016</Pincode>
Veja o exemplo de uma chamada de API que mostra como a solicitação foi passada:
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 aberto ao público usado para acessar suas APIs, conforme configurado na propriedade
virtualhosts.hostAliases
do arquivo de modificações. Consulte Especificar substituições de configuração.O payload XML transmitido para a API é inválido, porque o XML não tem uma tag final para o elemento
<root>
. Você recebe o código do erro:steps.xml2json.ExecutionFailed
Esse erro também poderá ocorrer se o elemento
<Source>
tiver sido definido para responder, mas o payload de resposta XML do servidor de back-end for inválido ou estiver incorreto.
Resolução
Verifique se a entrada passada para a política XML para JSON por meio do elemento <Source>
é válida e não está malformada.
Para corrigir o problema com a política de XML para JSON de exemplo discutida acima, passe uma solicitação de payload XML válida da seguinte forma:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<City>Bengaluru</City>
<Name>Apigee</Name>
<Pincode>560016</Pincode>
</root>
OutputVariableIsNotAvailable
Código do 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
Esse erro ocorre se a variável especificada no elemento <Source>
da política 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
Identifique a política de XML para JSON em que ocorreu o erro. É possível encontrar isso no elemento
faultstring
da resposta de erro. Por exemplo, nofaultstring
a seguir, o nome da política éConvert-XMLToJSON
:"faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available."
Na política XML para JSON com falha, valide se o
<OutputVariable>
está ausente.Veja um exemplo de política XML para JSON que tem o elemento
<OutputVariable>
ausente.<?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>
Determine o tipo da variável especificado no elemento
<Source>
:- Localize o código no pacote do proxy de API em que a variável foi definida primeiro.
- Depois de descobrir a política em que a variável é definida e preenchida primeiro, você precisará determinar o tipo dessa variável da seguinte forma:
- Verifique o valor do atributo de tipo (se houver).
- Se o atributo de tipo não estiver presente, a variável será considerada uma string.
- Se o tipo da variável for
string
, essa será a causa do erro. Saiba mais sobre as variáveis comuns e os tipos delas na Referência de variáveis.
Por exemplo, observe a variável "TrackingNumber" na política XML para JSON acima. É do tipo string. Agora, considere uma política "Atribuir mensagem" usada para definir o valor de uma variável chamada
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>
Observe que o tipo de variável definido por meio de
<AssignVariable>
é uma string. Portanto, a variávelTrackingNumber
é do tipo string.Agora, lembre-se de que a variável
TrackingNumber
é usada no elemento<Source>
da política XML para JSON:<Source>TrackingNumber</Source>
Como
TrackingNumber
é do tipo string e<OutputVariable>
está ausente na política, você recebe o código do erro:steps.xml2json.OutputVariableIsNotAvailable
Resolução
Verifique se a variável especificada no elemento <Source>
da política XMLToJSON é do tipo string, o elemento <OutputVariable>
é obrigatório nesse caso.
Para corrigir a política XML para JSON discutida 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 do 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
Esse erro ocorrerá se o tipo da variável definido no elemento <Source>
e o elemento <OutputVariable>
não forem os mesmos. É obrigatório que o tipo das variáveis contidas no elemento <Source>
e no elemento <OutputVariable>
seja igual.
The valid types are message and string.
Diagnóstico
Identifique a política de XML para JSON em que ocorreu o erro. É possível encontrar isso no elemento
faultstring
da resposta de erro. Por exemplo, nofaultstring
a seguir, o nome da política éXMLToJSON_CheckType
:"faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type."
Na política XML para JSON com falha, observe os valores especificados em
<OutputVariable>
.Veja abaixo um exemplo de política XMLToJSON que não tem o elemento
<OutputVariable>
.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType"> <DisplayName>XMLToJSON_CheckType</DisplayName> <Properties/> <Format>google</Format> <OutputVariable>request</OutputVariable> <Source>TrackingNumber</Source> </XMLToJSON>
Determine o tipo de variável especificado nos elementos
<Source>
e<OutputVariable>
:- Localize o código no pacote do proxy de API, em que cada uma dessas variáveis foi definida primeiro.
- Depois de descobrir a política em que a variável é definida e preenchida primeiro, você precisará determinar o tipo dessa variável da seguinte forma:
- Verifique o valor do atributo de tipo (se houver).
- Se o atributo de tipo não estiver presente, a variável será considerada uma string.
- Se o tipo da variável especificada em
<Source>
forstring
e o tipo de<OutputVariable>
for mensagem ou vice-versa, essa será a causa do erro. Saiba mais sobre as variáveis comuns e os tipos delas na Referência de variáveis.
Por exemplo, considere uma política "Atribuir mensagem" usada para definir um valor como uma variável chamada
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>
Observe que o tipo de variável definido por meio de
<AssignVariable>
é uma string. Portanto, a variávelTrackingNumber
é do tipo string.Agora, lembre-se de que a variável
TrackingNumber
é usada no elemento<Source>
da política XMLToJSON:<Source>TrackingNumber</Source>
Da mesma forma, lembre-se de que a variável
request
é usada no elemento<OutputVariable>
da política XML para JSON:<OutputVariable>request</OutputVariable>
Como
TrackingNumber
é do tipostring
enquanto a variávelresponse
é do tipomessage
, eles são incompatíveis, então você recebe o código do erro:steps.xml2json.InCompatibleTypes
O erro acima também poderá ocorrer se a variável no elemento
<Source>
for do tipomessage
, mas a variável no elemento<OutputVariable>
for do tipo string.
Resolução
Garanta que o tipo da variável definido no elemento <Source>
e no elemento <OutputVariable>
seja sempre o mesmo. É obrigatório que o tipo das variáveis contidas no elemento <Source>
e no elemento <OutputVariable>
seja igual.
Para corrigir a política XML para JSON discutido acima, é possível declarar outra variável TrackingNumber_output
do tipo string
usando a política "Atribuir mensagem" e usar essa variável no elemento <OutputVariable>
da política XML para JSON.
Política "Atribuir mensagem" 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>
Modificação da política XMLToJSON:
<?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 do 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 ocorrerá se o tipo da variável usado para definir o elemento <Source>
for inválido. Os tipos válidos de variável são message
e string
.
Diagnóstico
Identifique o tipo de origem inválido usado na política XML para JSON. Você encontra essas informações a partir da mensagem de erro. Por exemplo, no erro a seguir, o tipo inválido é "Inteiro".
"faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
Examine todas as políticas XML para JSON no proxy de API específico em que a falha ocorreu. Na política XML para JSON com falha, anote o 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>
Determine o tipo de variável especificado no elemento
<Source>
:- Localize o código no pacote do proxy de API em que essa variável foi definida primeiro.
- Depois de descobrir a política em que a variável é definida e preenchida primeiro, você precisará determinar o tipo dessa variável da seguinte forma:
- Verifique o valor do atributo de tipo (se houver).
- Se o atributo de tipo não estiver presente, a variável será considerada uma string.
- Se o tipo da variável especificada em
<Source>
não formessage
nemstring
, essa será a causa do erro. Saiba mais sobre as variáveis comuns e os tipos delas na Referência de variáveis.
Como exemplo, considere uma política ExtractVariables usada para extrair o valor de um payload XML e definir o valor da variável
BookCode
comointeger
, 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, lembre-se de que a variável
BookCode
é usada no elemento<Source>
da política XML para JSON:<Source>BookCode</Source>
Como o tipo dessa variável é
Integer
, que não é um tipo<Source>
válido, a API Proxy falha com o erro:steps.xml2json.InvalidSourceType
Resolução
Verifique se o tipo da variável usado para especificar o elemento <Source>
é válido. Os tipos válidos de <Source>
são message
e string
.
Para evitar o erro acima com a política XML para JSON, é possível usar a variável request
, que é do tipo message
, ou qualquer outra string que seja um payload XML válido.