Está a ver a documentação do Apigee e do Apigee Hybrid.
Ver documentação do
Apigee Edge.
UnresolvedVariable
Código de erro
steps.assignmessage.UnresolvedVariable
Corpo da resposta de erro
{ "fault": { "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.assignmessage.UnresolvedVariable" } } }
Causa
Este erro ocorre se uma variável especificada na política Assign Message 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 Assign Message for executada no fluxo de pedidos, mas o atributo source
no elemento <Copy>
estiver definido como a variável response
ou error
, ou qualquer outra variável personalizada que não exista no fluxo de pedidos.
Diagnóstico
Identifique a política Assign Message 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 égoogleBook
e a variável évar
:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
No XML da política de mensagens de atribuição com falha, verifique se o nome da variável usada corresponde ao nome da variável identificado na string de falha (passo n.º 1 acima). Por exemplo, a política seguinte define o atributo source no elemento
<Copy>
para uma variável denominadavar
, que corresponde ao que está emfaultstring
:<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1"> <DisplayName>googleBook</DisplayName> <Properties /> <Copy source="var"> <Headers> <Header name="user-agent" /> </Headers> </Copy> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo> </AssignMessage>
Determine se a variável está definida e disponível no fluxo no qual a política Assign Message 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 Assign Message apresentada acima é executada no fluxo de pedidos. Verifique se a variável
var
está definida em alguma das políticas que são executadas antes da política Assign Message no fluxo de pedidos. Se a variável não tiver sido definida, recebe o código de erro:steps.assignmessage.UnresolvedVariable
Resolução
Certifique-se de que a variável referenciada na política existe e está disponível no fluxo específico, onde a política Assign Message está a ser executada.
Para corrigir a política de exemplo apresentada acima, pode modificar o atributo source no elemento <Copy>
para que seja a variável de pedido ou qualquer outra variável personalizada do tipo mensagem que exista no fluxo de pedidos.
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
<DisplayName>googleBook</DisplayName>
<Properties />
<Copy source="request">
<Headers>
<Header name="user-agent" />
</Headers>
</Copy>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>
VariableOfNonMsgType
Código de erro
steps.assignmessage.VariableOfNonMsgType
Corpo da resposta de erro
{ "fault": { "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message", "detail": { "errorcode": "steps.assignmessage.VariableOfNonMsgType" } } }
Causa
Este erro ocorre se o atributo source
no elemento <Copy>
estiver definido para uma variável que não seja do tipo message.
As variáveis de tipo de mensagem representam pedidos e respostas HTTP completos. As variáveis de fluxo incorporadas request
, response
e message
são do tipo mensagem. Para saber mais sobre as variáveis de mensagens, consulte a referência de variáveis.
Diagnóstico
Identifique a política de mensagens de atribuição onde ocorreu o erro e o nome da variável cujo tipo está incorreto. Pode encontrar ambos os itens no elemento
faultstring
da resposta de erro. Por exemplo, no seguintefaultstring
, o nome da política éGenerateGeocodingRequest
e a variável éPostalCode
:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
No XML da política de mensagens de atribuição com falha, verifique se o nome da variável definido no elemento
<Copy>
corresponde ao nome da variável identificado na string de falha (passo n.º 1 acima). Por exemplo, a política seguinte define um atributo de origem para uma variável denominadaPostalCode
, que corresponde ao que está emfaultstring
:<AssignMessage name="GenerateGeocodingRequest"> <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo> <AssignVariable> <Name>PostalCode</Name> <Ref>request.queryparam.postalcode</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> <Copy source="PostalCode"> <QueryParams> <QueryParam name="q" /> </QueryParams> </Copy> </AssignMessage>
Determinar se esta variável é do tipo mensagem ou não:
- Localize o código no pacote do proxy de API, onde a variável foi definida pela primeira vez.
- 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:
- Verifique o valor do atributo type (se estiver presente).
- Se o atributo type não estiver presente, a variável é considerada uma string.
- Se o tipo da variável não for uma mensagem (como uma string), essa é a causa do erro. Pode saber mais sobre as variáveis comuns e os respetivos tipos na referência de variáveis.
Por exemplo, veja a variável PostalCode no XML acima. É atribuído o valor da variável de fluxo
request.queryparam.postalcode
no elemento<AssignVariable>
. Este valor é uma string porque não existe nenhum atributo de tipo na atribuição de variáveis.Agora, recorde que a variável PostalCode é usada no elemento
<Copy>
da política Assign Message:<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
Uma vez que PostalCode não é do tipo message (é uma string neste exemplo), recebe o código de erro:
steps.assignmessage.VariableOfNonMsgType
Resolução
Certifique-se de que o atributo source
no elemento <Copy>
na política de atribuição de mensagens com falhas está definido como uma variável de fluxo do tipo message existente.
Para corrigir a política, pode modificar o atributo source
no elemento <Copy>
para especificar uma variável do tipo mensagem. Por exemplo, se a política Assign Message se destinar a ser executada no fluxo de pedidos, pode usar a variável de tipo de mensagem request
ou qualquer outra variável personalizada do tipo message.
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
<Copy source="request">
<QueryParams>
<QueryParam name="PostalCode" />
</QueryParams>
</Copy>
</AssignMessage>