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
faultstringda resposta de erro.Por exemplo, no seguinte
faultstring, o nome da política égoogleBooke 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
varestá 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
faultstringda resposta de erro. Por exemplo, no seguintefaultstring, o nome da política éGenerateGeocodingRequeste 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.postalcodeno 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>