Esta é a documentação do Apigee Edge.
Acesse a
documentação da
Apigee X. info
SourceMessageNotAvailable
Código do erro
steps.extractvariables.SourceMessageNotAvailable
Corpo da resposta de erro
{ "fault": { "faultstring": "[variable_name] message is not available for ExtractVariable: [policy_name]", "detail": { "errorcode": "steps.extractvariables.SourceMessageNotAvailable" } } }
Causa
Esse erro ocorrerá se a variável message especificada no elemento <Source>
da política Extrair variáveis 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 de variáveis de extração for executada no
fluxo da solicitação, mas o elemento <Source>
estiver definido como a variável response
ou error
que não existe no fluxo da solicitação.
Diagnóstico
Identifique a política de extração de variáveis 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, na seguinte string de falha, o nome da política éExtractVariables-1
e a variável éresponse
:"faultstring": "response message is not available for ExtractVariable: ExtractVariables-1"
Na política XML com extração de variáveis com falha, verifique se o nome da variável no elemento corresponde ao nome da variável identificado na string de falha (etapa 1 acima). Por exemplo, a seguinte política de variáveis de extração especifica uma variável chamada
response
no elemento, que corresponde ao que está na string de falha:<ExtractVariables name="ExtractVariables-1"> <Source>response</Source> <URIPath> <Pattern ignoreCase="true">/a/{pathSeg}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> </ExtractVariables>
Determine se a variável usada no elemento
<Source>
está definida e disponível no fluxo em que a política de extração de variáveis 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 de extração de variáveis mostrada acima é executada no fluxo de solicitação. Lembre-se de que a variável
response
é usada no elemento<Source>
da política de variáveis de extração. A variávelresponse
está disponível somente no fluxo de resposta.Como a variável
response
não existe no fluxo de solicitação, você recebe o código de erro:steps.extractvariables.SourceMessageNotAvailable
.
Resolução
Verifique se a variável definida no elemento <Source>
da política com falha de extração está definida e existe no fluxo em que a política é executada.
Para corrigir a política de extração de variáveis de exemplo mostrada acima, você pode modificar o elemento <Source>
para usar a variável request
como ela existe no fluxo de solicitação:
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
</ExtractVariables>
SetVariableFailed
Código do erro
steps.extractvariables.SetVariableFailed
Corpo da resposta de erro
{ "fault": { "faultstring": "Failed to set variable [variable_name] value [variable_value] from ExtractVariables: [policy_name]", "detail": { "errorcode": "steps.extractvariables.SetVariableFailed" } } }
Causa
Esse erro ocorre quando a política de extração de variáveis não pode definir o valor como uma variável. Isso geralmente acontece quando você tenta atribuir valores a diversas variáveis cujos nomes começam com as mesmas palavras em um formato separado por pontos aninhado.
Por exemplo, digamos que você criou/atribua um valor a uma variável var.color
. Nesse caso, color
é alocado como um nó de objeto. Se você tentar atribuir um valor a outra variável var.color.next
, ela falhará porque color
já está alocado e não está permitida a alocar outra variável para ela.
Diagnóstico
Identifique a política de extração de variáveis em que o erro ocorreu e o nome da variável para a qual o valor não pode ser definido. É possível encontrar os dois itens no elemento
faultstring
da resposta de erro. Por exemplo, na seguinte string de falha, o nome da política éExtractColors
e a variável évar.color.next
:"faultstring": "Failed to set variable var.color.next value red from ExtractVariables: ExtractColors"
Na política XML de extração com falha, verifique se o nome da variável corresponde ao nome identificado na string de falha (etapa 1 acima). Por exemplo, a seguinte política tenta atribuir um valor de um parâmetro de consulta de solicitação a uma variável chamada
var.color.next
(o valor que aparece na string de falha):<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractColors"> <DisplayName>ExtractColors</DisplayName> <Source>request</Source> <QueryParam name="color"> <Pattern ignoreCase="true">{color}</Pattern> </QueryParam> <QueryParam name="nextcolor"> <Pattern ignoreCase="true">{color.next}</Pattern> </QueryParam> <VariablePrefix>var</VariablePrefix> </ExtractVariables>
Examine todos os nomes de variáveis usados na política Extract Variables. Se você atribuiu um valor a outra variável cujo nome começa com o mesmo nome identificado na string de falha (etapa 1 acima), essa é a causa do erro.
No exemplo de política de extração de variáveis mostrado acima, observe que:
- O valor do parâmetro de consulta chamado
color
é atribuído primeiro a uma variávelvar.color
. Observação:var
é o prefixo de todas as variáveis, conforme definido no elemento<VariablePrefix>
) - Na próxima atribuição, o valor do parâmetro de consulta
nextcolor
é atribuído a outra variávelvar.color.next
. - Como o
var.color
já está alocado, a política de variáveis de extração não pode alocar outra variável aninhadavar.color.next
. Você recebe o código do erro:steps.extractvariables.SetVariableFailed
- O valor do parâmetro de consulta chamado
Resolução
Garanta que você não tenha vários nomes de variáveis com nomes que começam com as mesmas palavras aninhadas em formato separado por pontos.
Para corrigir a política de variáveis de extração mostradas acima, modifique o nome da variável
var.color.next
para usarvar.nextcolor.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractColors"> <DisplayName>ExtractColors</DisplayName> <Source>request</Source> <QueryParam name="color"> <Pattern ignoreCase="true">{color}</Pattern> </QueryParam> <QueryParam name="nextcolor"> <Pattern ignoreCase="true">{nextcolor}</Pattern> </QueryParam> <VariablePrefix>var</VariablePrefix> </ExtractVariables>
Mais informações
Veja mais detalhes nesta postagem da comunidade.
InvalidJSONPath
Código do erro
steps.extractvariables.InvalidJSONPath
Corpo da resposta de erro
{ "fault": { "faultstring": "Invalid JSON path [path_name] in policy [policy_name].", "detail": { "errorcode": "steps.extractvariables.InvalidJSONPath" } } }
Causa
Esse erro ocorrerá se um caminho JSON inválido for usado no elemento <JSONPath>
da política de variáveis de extração. Por exemplo, se um payload JSON não tiver
o objeto Name
, mas você especificar Name
como o caminho na política de variáveis de extração,
esse erro ocorrerá.
Diagnóstico
Identifique a política de variáveis de extração em que o erro ocorreu e o caminho JSON inválido. É possível encontrar os dois itens no elemento
faultstring
da resposta de erro. Por exemplo, na string de falha a seguir, o nome da política éExtractJSONVariables
e o caminho JSON inválido é$.Name
:"faultstring": "Invalid JSON path $.Name in policy ExtractJSONVariables."
No XML de política de extração de variáveis com falha, verifique se o caminho JSON definido no elemento
<JSONPath>
corresponde ao caminho identificado na string de falha (etapa 1 acima). Por exemplo, a seguinte política de variáveis de extração especifica o caminho JSON$.Name
, que corresponde ao que está na string de falha:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables"> <Source>response</Source> <JSONPayload> <Variable name="name" type="string"> <JSONPath>$.Name</JSONPath> </Variable> </JSONPayload> <VariablePrefix>employee</VariablePrefix> </ExtractVariables>
Analise o elemento
<Source>
e determine de qual payload JSON você está tentando extrair a variável. Por exemplo, se o elemento<Source>
estiver definido comorequest
, a política extrairá o payload JSON do objeto de solicitação. Se estiver definido comoresponse
, seria um objeto de resposta.No exemplo de política de extração de variáveis mostrado acima, o elemento
<Source>
é definido comoresponse
, de modo que as variáveis estão sendo extraídas do payload JSON da resposta.<Source>response</Source>
Examine o payload JSON apropriado (determinado da etapa 3) e confirme se ele tem o objeto especificado no elemento
<JSONPath>
. Se o payload JSON não tiver esse objeto, essa será a causa do erro.Por exemplo, considere que você está tentando extrair variáveis do seguinte payload de resposta JSON:
{ "firstName":"John", "lastName":"Doe", "city":"San Jose", "state":"CA" }
Como a carga útil da resposta JSON não tem o objeto
Name
, a política de variáveis de extração falha com o erro que você recebeu o código de erro:steps.extractvariables.InvalidJSONPath
.
Resolução
Verifique se somente os objetos que fazem parte do payload JSON de onde as variáveis estão sendo extraídas são especificados no elemento
<JSONPath>
da política de variáveis de extração.Para corrigir a política de extração de variáveis de exemplo mostrada acima, você pode modificar o elemento
<JSONPath>
para especificar um dos objetos disponíveis no exemplo de payload de resposta JSON (por exemplo, os objetosfirstName
elastName
são válidos):<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables"> <Source>response</Source> <JSONPayload> <Variable name="name" type="string"> <JSONPath>$.firstName</JSONPath> </Variable> </JSONPayload> <VariablePrefix>employee</VariablePrefix> </ExtractVariables>
ExecutionFailed
Código do erro
steps.extractvariables.ExecutionFailed
Corpo da resposta de erro
{ "fault": { "faultstring": "Failed to execute the ExtractVariables: [policy_name]", "detail": { "errorcode": "steps.extractvariables.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 (JSON, XML) está vazio. |
Entrada inválida ou malformada | A entrada (JSON, XML etc.) passada para a política é inválida ou está incorreta. |
Causa: payload de entrada ausente
Se a política de extração de variáveis tiver que extrair as variáveis de um payload JSON ou XML, mas 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 "Extract Variables" estiver definido como request
ou response
e eles tiverem que conter payload em JSON ou XML, mas esse payload estiver vazio, o erro ocorrerá.
Diagnóstico
Identifique a política de variáveis de extração em que o erro ocorreu. É possível encontrar essas informações no elemento failurestring da resposta de erro. Por exemplo, na seguinte string de falha, o nome da política é
ExtractJSONVariables
:"faultstring": "Failed to execute the ExtractVariables: ExtractXMLVariables"
Examine o elemento
<Source>
no XML com falha de variáveis de extração e determine o tipo de entrada a partir da qual as variáveis estão sendo extraídas. Por exemplo, a política de extração de variáveis a seguir tem o elemento<Source>
definido comoresponse
e extrai as variáveis do payload XML:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractXMLVariables" async="false" continueOnError="false" enabled="true"> <XMLPayload> <Namespaces/> <Variable name="City" type="string"> <XPath>/city</XPath> </Variable> </XMLPayload> <Source clearPayload="false">response</Source> </ExtractVariables>
Verifique se a entrada que está sendo analisada pela política de variáveis de extração está vazia. Se a entrada estiver vazia, essa é a causa do erro.
No exemplo de política de extração de variáveis mostrado acima, a carga útil de resposta (ou seja, o corpo da resposta) enviada pelo servidor de back-end estava vazia.
Como o payload da resposta XML está vazio, você recebe o código do erro:
steps.extractvariables.ExecutionFailed
Esse erro também poderá ocorrer se o elemento
<Source>
estiver definido comorequest
, mas nenhum payload for passado na solicitação de proxy da API. Exemplo:curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/xml"
A política de extração de variáveis só executa a extração XML quando o cabeçalho
Content-Type
da mensagem éapplication/xml
,text/xml
ouapplication/*+xml
. Você precisará passar o cabeçalho Content-Type comoapplication/xml
,text/xml
ouapplication/*+xml
se quiser que a política de variáveis de extração analise um payload de solicitação XML.
Resolução
Verifique se a entrada passada para a política de extração de variáveis é válida e não está vazia.
Para corrigir o problema com a política de exemplo de variáveis de extração mostrada acima, transmita um payload XML válido. Exemplo:
Crie um arquivo chamado
city.xml
com o seguinte conteúdo:<city>Bengaluru</city> <area>Sanjaynagar</area>
Faça a chamada de API usando um comando curl da seguinte maneira:
curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/xml" -X POST -d @city.xml
Causa: entrada inválida ou malformada
Se a política Extract Variables analisar uma entrada inválida ou incorreta, você receberá esse erro.
Por exemplo, se o JSON inválido a seguir for fornecido como entrada para a política de variáveis de extração, você receberá esse erro.
[
"args": ["name" : "amar" ]
]
Diagnóstico
Identifique a política de variáveis de extração em que o erro ocorreu. Você encontra essas informações no elemento
faultstring
da resposta de erro. Por exemplo, nofaultstring
a seguir, o nome da política éExtractJSONVariables
:"faultstring": "Failed to execute the ExtractVariables: ExtractJSONVariables"
Examine o elemento
<Source>
no XML com falha de variáveis de extração e determine o tipo de entrada a partir da qual as variáveis estão sendo extraídas. Por exemplo, a política de extração de variáveis a seguir tem o elemento<Source>
definido comorequest
e extrai as variáveis do payload JSON:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="Name" type="string"> <JSONPath>$.args.name</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">request</Source> </ExtractVariables>
Verifique se a entrada que está sendo analisada pela política de variáveis de extração é válida. Se a entrada for inválida ou estiver malformada, essa será a causa do erro.
No exemplo de política de extração de variáveis mostrado acima, o seguinte JSON inválido foi passado à política de extração de variáveis
[ "args": ["name" : "amar" ] ]
Veja o exemplo de uma chamada de API que mostra como a solicitação foi passada:
curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "amar" ]]'
O payload JSON transmitido à API é inválido porque contém uma matriz com colchetes (
[ ]
). Portanto, você recebe o código de erro:steps.extractvariables.ExecutionFailed
Esse erro também poderá ocorrer se o elemento
<Source>
tiver sido definido comoresponse
, mas o payload de resposta JSON for inválido ou estiver incorreto.
Resolução
Verifique se a entrada passada para a política de extração de variáveis é válida e não está malformada.
Para corrigir o problema com a política de exemplo de variáveis de extração discutida acima, passe uma solicitação de payload JSON válida da seguinte maneira:
{
"args":{
"name":"amar"
}
}
UnableToCast
Código do erro
steps.extractvariables.UnableToCast
Corpo da resposta de erro
{ "fault": { "faultstring": "Unable to cast value [value] as [type].", "detail": { "errorcode": "steps.extractvariables.UnableToCast" } } }
Causa
Esse erro ocorrerá se a política de variáveis de extração não conseguir transmitir o valor extraído em uma variável. Normalmente, isso ocorre quando você tenta definir o valor de um tipo de dados para uma variável de outro tipo de dados.
Por exemplo, se a política "Extrair variável" tentar definir um valor que tenha sido extraído de uma variável "String" para uma variável "Inteiro", você verá esse erro.
Diagnóstico
Identifique o tipo de dados da variável em que a política de variáveis de extração está tentando transmitir e falhará. Você encontra essas informações no elemento
faultstring
da resposta de erro. Por exemplo, nofaultstring
a seguir, o tipo de objeto éBOOLEAN
:"faultstring":"Unable to cast value 36.231 as BOOLEAN."
Identifique a política de extração de variáveis em que você está tentando definir o valor como uma variável do tipo determinada na etapa 1.
Por exemplo, a política de variáveis de extração a seguir extrai o valor de um JSONPath
$.latitude
para uma variável do tipoboolean
, que corresponde ao que está na string de falha:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="latitude" type="boolean"> <JSONPath>$.latitude</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">response</Source> </ExtractVariables>
Examine o tipo de dados do valor que está sendo extraído. Os dados podem estar na forma de cabeçalhos, caminhos de URI, payloads JSON/XML, parâmetros de formulário e parâmetros de consulta.
Verifique se o tipo de dados determinado na etapa 3 e o tipo de dados da variável a que os dados estão sendo atribuídos (determinado na etapa 2) são iguais.
Se o tipo de dados das variáveis de origem e destino não for o mesmo, então essa é a causa do erro.
No exemplo de política de extração de variáveis mostrado acima, considere o payload da solicitação JSON:
{ "latitude":36.2312 }
O tipo de dados do valor extraído do
<JSONPath>
,‘$.latitude’
, é um número inteiro, que está sendo atribuído a uma variável do tipo de dados booleano.Como o tipo de dados do valor extraído e o tipo de dados da variável a que o valor está sendo atribuído não são iguais, você recebe o código do erro:
steps.extractvariables.UnableToCast
.
Resolução
Verifique se o tipo de dados do valor extraído e a variável a que o conteúdo está sendo atribuído são do mesmo tipo.
Para corrigir a política de extração de variáveis de exemplo, é preciso modificar o tipo da variável para inteiro:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
<JSONPayload>
<Variable name="latitude" type="integer">
<JSONPath>$.latitude</JSONPath>
</Variable>
</JSONPayload>
<Source clearPayload="false">response</Source>
</ExtractVariables>
JsonPathParsingFailure
Código do erro
steps.extractvariables.JsonPathParsingFailure
Corpo da resposta de erro
{ "fault": { "faultstring": "ExtractVariables [policy_name]: Json path parsing failed for flow variables [variable_name]", "detail": { "errorcode": "steps.extractvariables.JsonPathParsingFailure" } } }
Causa
Esse erro ocorre quando a política de extração de variáveis
não consegue analisar um caminho JSON e extrair dados da variável de fluxo
especificada no elemento <Source>
. Normalmente, isso acontece se a variável de fluxo
especificada no elemento <Source>
não existir no fluxo atual.
Por exemplo, esse erro ocorrerá se a política de variáveis de extração for executada no
fluxo de resposta e espera analisar um caminho JSON, mas o elemento <Source>
especifica a variável de fluxo request.content
, que não existem no fluxo de respostas.
Diagnóstico
Identifique a política de variáveis de extração em que o erro ocorreu e o nome da variável de fluxo em que os dados não foram extraídos. É possível encontrar esses dois itens no elemento de string de falha da resposta de erro. Por exemplo, na seguinte string de falha, o nome da política é
ExtractVariables-1
e a variável érequest.content
:"faultstring": "ExtractVariables ExtractJSONVariabes: Json path parsing failed for flow variables request.content"
No XML de política de extração de variáveis com falha, verifique se o nome da variável definida no elemento
<Source>
corresponde ao nome da variável identificado na string com falha (etapa 1 acima). Por exemplo, a seguinte política de variáveis de extração especifica uma variável chamadarequest.content
, que corresponde ao que está na string de falha:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="Name" type="string"> <JSONPath>$.args.name</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">request.content</Source> </ExtractVariables>
Valide se a variável de fluxo usada no elemento
<Source>
está definida e disponível no fluxo em que a política de extração de variáveis 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 ExtractVariables exibida acima deve ser executada no fluxo de resposta. A variável de fluxo
request.content
é usada no elemento<Source>
da política de variáveis de extração. A variável de fluxorequest.content
está disponível apenas no fluxo de solicitação.Como a variável
response
não existe no fluxo de solicitação, você recebe o código de erro:steps.extractvariables.JsonPathParsingFailure
.
Resolução
Verifique se a variável de fluxo usada no elemento <Source>
da política de variáveis
de extração está disponível no fluxo em que a política de variáveis de extração é
executada.
Por exemplo, suponha que uma variável chamada response.content
exista no fluxo de
resposta e, na verdade, contenha o JSON que você quer extrair. Para corrigir a política de variáveis
de extração mostradas acima, você pode modificar o elemento <Source>
da seguinte maneira:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
<JSONPayload>
<Variable name="Name" type="string">
<JSONPath>$.args.name</JSONPath>
</Variable>
</JSONPayload>
<Source clearPayload="false">response.content</Source>
</ExtractVariables>