Resolução de problemas de erros de tempo de execução de mensagens

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

  1. 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"
    
  2. 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 denominada var, que corresponde ao que está em faultstring:

    <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>
    
  3. Determine se a variável está definida e disponível no fluxo no qual a política Assign Message está a ser executada.

  4. Se a variável for:

    1. Fora do âmbito (não disponível no fluxo específico em que a política está a ser executada) ou
    2. 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

  1. 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 seguinte faultstring, o nome da política é GenerateGeocodingRequest e a variável é PostalCode:

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. 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 denominada PostalCode, que corresponde ao que está em faultstring:

    <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>
    
  3. Determinar se esta variável é do tipo mensagem ou não:

    1. Localize o código no pacote do proxy de API, onde a variável foi definida pela primeira vez.
    2. 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:
      1. Verifique o valor do atributo type (se estiver presente).
      2. Se o atributo type não estiver presente, a variável é considerada uma string.
    3. 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>