Solução de problemas de erros de execução de atribuição de mensagem

Esta é a documentação do Apigee Edge.
Acesse Documentação da Apigee X.
informações

UnresolvedVariable

Código do 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

Esse erro ocorrerá se uma variável especificada na política "Atribuir mensagem" 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 ocorre se a política Atribuir mensagem for executada no fluxo de solicitação, mas o atributo source no elemento <Copy> for definido como a variável response ou error ou qualquer outra variável personalizada. que não existe no fluxo de solicitações.

Diagnóstico

  1. Identifique a política "Atribuir mensagem" 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, no faultstring a seguir, 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 atribuição de mensagens com falha, verifique se o nome da variável usada corresponde ao nome da variável identificada na string de falha (etapa 1 acima). Por exemplo, a política a seguir define o atributo de origem no elemento <Copy> como uma variável chamada var, que corresponde ao que está no 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 em que a política de atribuição de mensagem está sendo executada.

  4. Se a variável for:

    1. fora do escopo (não disponível no fluxo específico em que a política está sendo executada) ou
    2. não é possível resolver (não está definida)

    essa será a causa do erro.

    Por exemplo, digamos que a política "Atribuir mensagem" exibida acima seja executada no fluxo de solicitações. Verifique se a variável var está definida em qualquer uma das políticas executadas antes da política de atribuição de mensagem no fluxo de solicitações. Se a variável não tiver sido definida, você receberá o código do erro:

    steps.assignmessage.UnresolvedVariable
    

Resolução

Verifique se a variável referenciada na política existe e está disponível no fluxo específico em que a política "Atribuir mensagem" está sendo executada.

Para corrigir o exemplo de política mostrado acima, modifique o atributo de origem no elemento <Copy> para ser a variável de solicitação ou qualquer outra variável personalizada do tipo de mensagem existente no fluxo de solicitação.

<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 do erro

steps.assignmessage.VariableOfNonMsgType

Corpo da resposta de erro

{
    "fault": {
        "faultstring&quot;: "AssignMessage[policy_name]: value of variable [variable] is not of type Message",
        "detail": {
            "errorcode": "steps.assignmessage.VariableOfNonMsgType"
        }
    }
}

Causa

Esse erro ocorrerá se o atributo source no elemento <Copy> estiver definido como uma variável diferente do tipo message.

As variáveis do tipo Message representam solicitações e respostas HTTP completas. As variáveis integradas de fluxo do Edge request, response e message são do tipo mensagem. Saiba mais sobre as variáveis de mensagem na Referência de variáveis.

Diagnóstico

  1. Identifique a política de atribuição de mensagens em que o erro ocorreu e o nome da variável com o tipo incorreto. É possível encontrar os dois itens no elemento faultstring da resposta de erro. Por exemplo, no faultstring a seguir, 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 atribuição de mensagem com falha, verifique se o nome da variável definida no elemento <Copy> corresponde ao nome da variável identificada na string de falha (etapa 1 acima). Por exemplo, a política a seguir define um atributo de origem para uma variável chamada PostalCode, que corresponde ao que está em faultstring:

    <AssignMessage name="GenerateGeocodingReq>uest<"
       AssignTo createNew="true&>quot; type="<;request&>quot<;GeocodingRequ>est/Ass<ignT>o
       Assig<nVari>able
      <   > NamePostalCode/Name
          Re<freq>uest<.queryparam.pos>talc<ode/Ref
       /As>signVar<iabl>e
       As<signV>ariable<
      >    NameCountry/Name
         < Ref>requ<est.queryparam.>coun<try/Ref
       /AssignVariab>le
       C<opy source=>"Post<alCode"
          Qu>eryPara<ms
             >Quer<yPara>m< name="q&>quot; /
          /QueryParams
       /Copy
    /AssignMessage
    
  3. Determine se essa variável é do tipo mensagem ou não:

    1. Localize o código no pacote proxy da API, onde a variável foi definida primeiro.
    2. Depois de descobrir a política em que a variável é definida e preenchida primeiro, você precisará determinar o tipo dessa variável da seguinte forma:
      1. Verifique o valor do atributo de tipo (se houver).
      2. Se o atributo de tipo não estiver presente, a variável será considerada uma string.
    3. Se o tipo da variável for não mensagem (como uma string), essa é a causa do erro. Saiba mais sobre as variáveis comuns e os tipos delas na Referência de variáveis.

    Por exemplo, observe a variável PostalCode no XML acima. Ela recebe o valor da variável de fluxo request.queryparam.postalcode no elemento <AssignVariable>. Esse valor é uma string, porque não há atributo de tipo presente na atribuição de variáveis.

    Agora, lembre-se de que a variável PostalCode é usada no elemento <Copy> da política "Atribuir mensagem":

    <Copy source="Postal>Code<"
       Q>ueryPar<ams
          QueryParam name=&quo>t;Po<stalCode&quo>t<; /
     >  /QueryParams
    /Copy
    

    Como o PostalCode não é de mensagem de tipo (é uma string neste exemplo), você recebe o código do erro:

    steps.assignmessage.VariableOfNonMsgType
    

Resolução

Verifique se o atributo source no elemento <Copy> na política de atribuição de mensagem com falha está definido como uma variável de fluxo do tipo message que existe.

Para corrigir a política, modifique o atributo source no elemento <Copy> para especificar uma variável do tipo mensagem. Por exemplo, se a política "Atribuir mensagem" for executada no fluxo de solicitações, você poderá usar a variável de tipo de mensagem request ou qualquer outra variável personalizada de mensagem de tipo.

<AssignMessage name="GenerateGeocodingReq>uest<"
   AssignTo createNew="true&>quot; type="<;request&>quot<;GeocodingRequ>est/Ass<ignT>o
   Assig<nVari>able
  <   > NamePostalCode/Name
      Re<freq>uest<.queryparam.pos>talc<ode/Ref
   /As>signVar<iabl>e
   As<signV>ariable<
  >    NameCountry/Name
     < Ref>requ<est.queryparam.>coun<try/Ref
   /AssignVar>iable
 <  Copy sour>ce="r<equest"
      QueryParams>
      <   QueryPara>m na<me=&q>u<ot;PostalCode&>quot; /
      /QueryParams
   /Copy
/AssignMessage