Está a ver a documentação do Apigee e do Apigee Hybrid.
Ver documentação do
Apigee Edge.
SourceMessageNotAvailable
Código de 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
Este erro ocorre se a variável message especificada no elemento<Source> da política Extract Variables 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 Extract Variables for executada no fluxo de pedidos, mas o elemento <Source>
estiver definido para a variável response
ou error
, que não existe no fluxo de pedidos.
Diagnóstico
Identifique a política Extract Variables 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, na faultstring seguinte, o nome da política éExtractVariables-1
e a variável éresponse
:"faultstring": "response message is not available for ExtractVariable: ExtractVariables-1"
No XML da política de variáveis de extração com falha, verifique se o nome da variável definido no elemento corresponde ao nome da variável identificado na string de falha (passo n.º 1 acima). Por exemplo, a seguinte política Extract Variables especifica uma variável denominada
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>
Determinar se a variável usada no elemento
<Source>
está definida e disponível no fluxo no qual a política Extract Variables está a ser executada.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 Extract Variables apresentada acima é executada no fluxo de pedido. Recorde que a variável
response
é usada no elemento<Source>
da política Extrair variáveis. A variávelresponse
só está disponível no fluxo de respostas.Uma vez que a variável
response
não existe no fluxo de pedidos, recebe o código de erro:steps.extractvariables.SourceMessageNotAvailable
.
Resolução
Certifique-se de que a variável definida no elemento <Source>
da política Extract Variables com falha está definida e existe no fluxo onde a política é executada.
Para corrigir a política Extract Variables de exemplo apresentada acima, pode modificar o elemento <Source>
para usar a variável request
tal como existe no fluxo de pedidos:
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
</ExtractVariables>
SetVariableFailed
Código de 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
Este erro ocorre se a política Extract Variables não conseguir definir o valor para uma variável. Geralmente, isto acontece se tentar atribuir valores a várias variáveis cujos nomes começam pelas mesmas palavras num formato aninhado separado por pontos.
Por exemplo, suponhamos que cria/atribui um valor a uma variável var.color
. Neste caso, color
é atribuído como um nó de objeto. Se tentar atribuir um valor a outra variável var.color.next
, a atribuição falha porque color
já está alocada e não é permitido alocar outra variável à mesma.
Diagnóstico
Identifique a política Extract Variables onde ocorreu o erro e o nome da variável para a qual não foi possível definir o valor. Pode encontrar ambos os 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"
No XML da política Extract Variables com falha, verifique se o nome da variável corresponde ao nome da variável identificado na string de falha (passo n.º 1 acima). Por exemplo, a seguinte política tenta atribuir um valor de um parâmetro de consulta de pedido a uma variável denominada
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 com falha. Se tiver atribuído um valor a outra variável cujo nome comece pelo mesmo nome que o nome da variável identificado na string de falha (passo n.º 1 acima), essa é a causa do erro.
No exemplo da política Extract Variables apresentado acima, repare que:
- O valor do parâmetro de consulta denominado
color
é primeiro atribuído a uma variávelvar.color
(Nota:var
é o prefixo de todas as variáveis, conforme definido no elemento<VariablePrefix>
) - Na atribuição seguinte, o valor do parâmetro de consulta
nextcolor
é atribuído a outra variávelvar.color.next
. - Uma vez que o
var.color
já está atribuído, a política Extract Variables não pode atribuir outra variável aninhadavar.color.next
. Assim, recebe o código de erro:steps.extractvariables.SetVariableFailed
- O valor do parâmetro de consulta denominado
Resolução
Certifique-se de que não tem vários nomes de variáveis cujos nomes comecem pelas mesmas palavras aninhadas no formato separado por pontos.
Para corrigir a política Extract Variables apresentada acima, pode modificar o nome da variável var.color.next
para usar o nome da variável var.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
Para mais detalhes, consulte esta publicação da comunidade.
InvalidJSONPath
Código de 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
Este erro ocorre se for usado um caminho JSON inválido no elemento <JSONPath>
da política Extract Variables. Por exemplo, se um payload JSON não tiver o objeto Name
, mas especificar Name
como o caminho na política Extract Variables, ocorre este erro.
Diagnóstico
Identifique a política Extract Variables onde ocorreu o erro e o caminho JSON inválido. Pode encontrar ambos os itens no elemento
faultstring
da resposta de erro. Por exemplo, na seguinte string de falha, o nome da política éExtractJSONVariables
e o caminho JSON inválido é$.Name
:"faultstring": "Invalid JSON path $.Name in policy ExtractJSONVariables."
No XML da política Extract Variables com falha, verifique se o caminho JSON definido no elemento
<JSONPath>
corresponde ao caminho identificado na string de falha (passo n.º 1 acima). Por exemplo, a seguinte política Extract Variables 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>
Examine o elemento
<Source>
e determine de que payload JSON está a tentar extrair a variável. Por exemplo, se o elemento<Source>
estiver definido comorequest
, a política está a extrair o payload JSON do objeto de pedido. Se estiver definido comoresponse
, é o objeto de resposta.No exemplo da política Extract Variables apresentado acima, o elemento
<Source>
está definido comoresponse
, pelo que as variáveis estão a ser extraídas da carga útil JSON da resposta.<Source>response</Source>
Examine o payload JSON adequado (determinado no passo n.º 3) e valide se tem o objeto especificado no elemento
<JSONPath>
. Se o payload JSON não tiver esse objeto, essa é a causa do erro.Por exemplo, considere que está a tentar extrair variáveis do seguinte payload de resposta JSON:
{ "firstName":"John", "lastName":"Doe", "city":"San Jose", "state":"CA" }
Uma vez que o payload da resposta JSON não tem o objeto
Name
, a política Extract Variables falha com o erro que recebe o código de erro:steps.extractvariables.InvalidJSONPath
.
Resolução
Certifique-se de que apenas os objetos que fazem parte do payload JSON do qual as variáveis estão a ser extraídas são especificados no elemento <JSONPath>
da política Extract Variables.
Para corrigir a política Extract Variables de exemplo apresentada acima, pode modificar o elemento <JSONPath>
para especificar um dos objetos disponíveis no payload de resposta JSON de exemplo (por exemplo, os objetos firstName
e lastName
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 de 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
As possíveis causas deste erro são:
Causa | Descrição |
Payload de entrada em falta | O payload de entrada (JSON, XML) está vazio. |
Entrada inválida ou com formato incorreto | A entrada (JSON, XML, etc.) transmitida à política é inválida ou tem um formato incorreto. |
Causa: payload de entrada em falta
Este erro ocorre se a política Extract Variables (Extrair variáveis) se destinar a extrair as variáveis de um payload JSON ou XML, mas o conteúdo (payload) da variável especificada no elemento <Source>
estiver vazio.
Por exemplo, se o elemento <Source>
na política Extract Variables estiver definido como request
ou response
e se destinarem a conter uma carga útil JSON ou XML, mas a carga útil estiver vazia, ocorre o erro.
Diagnóstico
Identifique a política Extract Variables onde ocorreu o erro. Pode encontrar estas informações no elemento faultstring da resposta de erro. Por exemplo, na faultstring seguinte, o nome da política é
ExtractJSONVariables
:"faultstring": "Failed to execute the ExtractVariables: ExtractXMLVariables"
Examine o elemento
<Source>
no XML de variáveis de extração com falhas e determine o tipo de entrada a partir do qual as variáveis estão a ser extraídas. Por exemplo, a seguinte política Extract Variables tem o elemento<Source>
definido comoresponse
e está a extrair 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>
Verifica se a entrada que está a ser analisada pela política Extract Variables está vazia. Se a entrada estiver vazia, essa é a causa do erro.
No exemplo da política Extract Variables apresentado acima, a carga útil da resposta (ou seja, o corpo da resposta) enviada pelo servidor de back-end estava vazia.
Uma vez que a carga útil da resposta XML está vazia, recebe o código de erro:
steps.extractvariables.ExecutionFailed
Este erro também pode ocorrer se o elemento
<Source>
estiver definido comorequest
, mas não for transmitido nenhum payload no pedido de proxy da API. Por exemplo:curl -v "http://$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/xml"
Em que
$EXTERNAL_IP
é o endereço IP do balanceador de carga externo. Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo Personalize o encaminhamento de acesso.A política Extract Variables só realiza a extração de XML quando o cabeçalho
Content-Type
da mensagem éapplication/xml
,text/xml
ouapplication/*+xml
. Tem de transmitir o cabeçalho Content-Type comoapplication/xml
,text/xml
ouapplication/*+xml
se quiser que a política Extract Variables analise uma carga útil de pedido XML.
Resolução
Certifique-se de que a entrada transmitida à política Extract Variables é válida e não está vazia.
Para corrigir o problema com a política Extract Variables de exemplo apresentada acima, transmita uma carga útil XML válida. Por exemplo:
Crie um ficheiro denominado
city.xml
com o seguinte conteúdo:<city>Bengaluru</city> <area>Sanjaynagar</area>
Faça a chamada da API através de um comando cURL da seguinte forma:
curl -v "http://$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/xml" -X POST -d @city.xml
Em que
$EXTERNAL_IP
é o endereço IP do balanceador de carga externo. Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo Personalize o encaminhamento de acesso.
Causa: entrada inválida ou com formato incorreto
Se a política Extrair variáveis 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 Extract Variables, recebe este erro.
[
"args": ["name" : "amar" ]
]
Diagnóstico
Identifique a política Extract Variables onde ocorreu o erro. Pode encontrar estas informações no elemento
faultstring
da resposta de erro. Por exemplo, no seguintefaultstring
, o nome da política éExtractJSONVariables
:"faultstring": "Failed to execute the ExtractVariables: ExtractJSONVariables"
Examine o elemento
<Source>
no XML de variáveis de extração com falhas e determine o tipo de entrada a partir do qual as variáveis estão a ser extraídas. Por exemplo, a seguinte política Extract Variables tem o elemento<Source>
definido comorequest
e está a extrair 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á a ser analisada pela política Extract Variables é válida. Se a entrada for inválida ou tiver um formato incorreto, essa é a causa do erro.
No exemplo da política Extract Variables apresentado acima, o seguinte JSON inválido foi transmitido à política Extract Variables
[ "args": ["name" : "amar" ] ]
Segue-se o exemplo de chamada da API que mostra como o pedido foi transmitido:
curl -v "http://<$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "amar" ]]'
Em que
$EXTERNAL_IP
é o endereço IP do balanceador de carga externo. Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo Personalize o encaminhamento de acesso.O payload JSON transmitido à API é inválido, pois contém uma matriz com parênteses retos (
[ ]
). Por isso, recebe o código de erro:steps.extractvariables.ExecutionFailed
Este erro também pode ocorrer se o elemento
<Source>
tiver sido definido comoresponse
, 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 Extract Variables é válida e não tem um formato incorreto.
Para corrigir o problema com a política Extract Variables de exemplo abordada acima, transmita um pedido de payload JSON válido da seguinte forma:
{
"args":{
"name":"amar"
}
}
UnableToCast
Código de erro
steps.extractvariables.UnableToCast
Corpo da resposta de erro
{ "fault": { "faultstring": "Unable to cast value [value] as [type].", "detail": { "errorcode": "steps.extractvariables.UnableToCast" } } }
Causa
Este erro ocorre se a política Extract Variables não conseguir converter o valor extraído numa variável. Normalmente, isto acontece se tentar definir o valor de um tipo de dados para uma variável de outro tipo de dados.
Por exemplo, se a política de extração de variáveis tentar definir um valor que foi extraído de uma variável de string para uma variável de número inteiro, é apresentado este erro.
Diagnóstico
Identifique o tipo de dados da variável para a qual a política Extract Variables está a tentar fazer a conversão e falha. Pode encontrar estas informações no elemento
faultstring
da resposta de erro. Por exemplo, no seguintefaultstring
, o tipo de objeto éBOOLEAN
:"faultstring":"Unable to cast value 36.231 as BOOLEAN."
Identifique a política Extract Variables onde está a tentar definir o valor para uma variável do tipo determinado no passo n.º 1.
Por exemplo, a seguinte política Extract Variables extrai o valor de um
$.latitude
JSONPath 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á a ser extraído. Os dados podem estar no formato 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 no passo n.º 3 e o tipo de dados da variável à qual os dados estão a ser atribuídos (determinado no passo n.º 2) são iguais.
Se o tipo de dados das variáveis de origem e de destino não for o mesmo, essa é a causa do erro.
No exemplo da política Extract Variables apresentado acima, considere que a carga útil do pedido JSON é a seguinte:
{ "latitude":36.2312 }
O tipo de dados do valor que está a ser extraído de
<JSONPath>
,'$.latitude'
, é um número inteiro, que está a ser atribuído a uma variável do tipo de dados booleano.Uma vez que o tipo de dados do valor extraído e o tipo de dados da variável à qual o valor está a ser atribuído não são os mesmos, recebe o código de erro:
steps.extractvariables.UnableToCast
.
Resolução
Certifique-se de que o tipo de dados do valor extraído e da variável à qual o conteúdo está a ser atribuído são do mesmo tipo.
Para corrigir o exemplo da política de variáveis de extração, tem de modificar o tipo da variável para Número 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 de erro
steps.extractvariables.JsonPathParsingFailure
Corpo da resposta de erro
{ "fault": { "faultstring": "ExtractVariables [policy_name]: Json path parsing failed for for flow variables [variable_name]", "detail": { "errorcode": "steps.extractvariables.JsonPathParsingFailure" } } }
Causa
Este erro ocorre quando a política Extract Variables não consegue analisar um caminho JSON e extrair dados da variável de fluxo especificada no elemento <Source>
. Normalmente, isto acontece se a variável de fluxo especificada no elemento <Source>
não existir no fluxo atual.
Por exemplo, este erro ocorre se a política Extract Variables for executada no fluxo de resposta e esperar analisar um caminho JSON, mas o elemento <Source>
especificar a variável de fluxo request.content
, que não existe no fluxo de resposta.
Diagnóstico
Identifique a política Extract Variables onde ocorreu o erro e o nome da variável de fluxo para a qual não foi possível extrair dados. Pode encontrar ambos os itens no elemento faultstring da resposta de erro. Por exemplo, na faultstring seguinte, o nome da política é
ExtractVariables-1
e a variável érequest.content
:"faultstring": "ExtractVariables ExtractJSONVariabes: Json path parsing failed for for flow variables request.content"
No XML da política Extract Variables 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 Extract Variables especifica uma variável denominadarequest.content
, que corresponde ao que está em faultstring:<?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 no qual a política Extract Variables está a ser executada.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 ExtractVariables apresentada acima deve ser executada no fluxo de resposta. Recorde que a variável de fluxo
request.content
é usada no elemento<Source>
da política Extrair variáveis. A variável de fluxorequest.content
só está disponível no fluxo de pedidos.Uma vez que a variável
response
não existe no fluxo de pedidos, recebe o código de erro:steps.extractvariables.JsonPathParsingFailure
.
Resolução
Certifique-se de que a variável de fluxo usada no elemento <Source>
da política Extract Variables está disponível no fluxo no qual a política Extract Variables é executada.
Por exemplo, suponha que existe uma variável denominada response.content
no fluxo de resposta e que, na verdade, contém o JSON que quer extrair. Para corrigir a política Extract
Variables apresentada acima, pode modificar o elemento <Source>
da seguinte forma:
<?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>