Rozwiązywanie problemów z błędami w przypadku przypisywania wiadomości

Wyświetlasz dokumentację Apigee Edge.
Zapoznaj się z dokumentacją Apigee X.
Informacje

UnresolvedVariable

Kod błędu

steps.assignmessage.UnresolvedVariable

Treść odpowiedzi na błąd

{
    "fault": {
        "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]",
        "detail": {
            "errorcode": "steps.assignmessage.UnresolvedVariable"
        }
    }
}

Przyczyna

Ten błąd występuje, jeśli zmienna określona w zasadzie Przypisywanie wiadomości jest:

  • poza zakresem (niedostępne w ramach konkretnego procesu, w którym jest wykonywana zasada) lub
  • nie może zostać rozwiązana (nie jest zdefiniowana).

Ten błąd występuje np., gdy reguła Przypisz wiadomość jest wykonywana w przepływie żądania, ale atrybut source w elemencie <Copy> ma wartość response lub error lub inną zmienną niestandardową, która nie występuje w przepływie żądania.

Diagnostyka

  1. Określ zasadę przypisywania wiadomości, w której wystąpił błąd, oraz nazwę zmiennej, która jest niedostępna. Oba te elementy znajdziesz w elemencie faultstring odpowiedzi na błąd.

    Na przykład w tym faultstring nazwa zasad to googleBook, a zmienna to var:

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. W pliku XML zasady przypisywania wiadomości, który nie działa, sprawdź, czy nazwa użytej zmiennej jest zgodna z nazwą zmiennej wskazaną w ciągu błędów (krok 1 powyżej). Na przykład ta zasada ustawia atrybut źródła w elemencie <Copy> na zmienną o nazwie var, która jest zgodna z wartością w elemencie 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. Sprawdź, czy zmienna jest zdefiniowana i dostępna w przepływie, w którym jest wykonywana zasada Przypisz wiadomość.

  4. Jeśli zmienna jest:

    1. poza zakresem (niedostępne w ramach konkretnego procesu, w którym jest wykonywana zasada) lub
    2. nie można rozwiązać (nie jest zdefiniowany)

    to jest przyczyną błędu.

    Załóżmy na przykład, że zasada Przypisz wiadomość, która jest widoczna powyżej, jest wykonywana w przebiegu przetwarzania żądania. Sprawdź, czy zmienna var jest zdefiniowana w którejś z zasad wykonywanych przed zasadą Przypisz wiadomości w procesie żądania. Jeśli zmienna nie została zdefiniowana, otrzymasz kod błędu:

    steps.assignmessage.UnresolvedVariable
    

Rozdzielczość

Upewnij się, że zmienna, do której odwołuje się zasada, istnieje i jest dostępna w konkretnym przepływie, w którym jest wykonywana zasada przypisywania wiadomości.

Aby poprawić przykładową zasadę wymienioną powyżej, możesz zmodyfikować atrybut źródła w elemencie <Copy>, by stał się zmienną żądania lub dowolną inną zmienną niestandardową typu komunikat występującą w przepływie żądania.

<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

Kod błędu

steps.assignmessage.VariableOfNonMsgType

Treść odpowiedzi na błąd

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

Przyczyna

Ten błąd występuje, jeśli atrybut source w elemencie <Copy> ma wartość zmiennej, która nie jest typu message.

Zmienne typu message reprezentują całe żądania i odpowiedzi HTTP. Wbudowane zmienne przepływu Edge request, responsemessage są typu message. Więcej informacji o zmiennych wiadomości znajdziesz w artykule o zmiennych.

Diagnostyka

  1. Zidentyfikuj zasadę przypisywania wiadomości, w której wystąpił błąd, oraz nazwę zmiennej, której typ jest nieprawidłowy. Oba te elementy znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w tym faultstring nazwa zasad to GenerateGeocodingRequest, a zmienna to PostalCode:

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. W pliku XML zasad przypisywania wiadomości, który nie został zaakceptowany, sprawdź, czy nazwa zmiennej ustawiona w elemencie <Copy> jest zgodna z nazwą zmiennej wskazaną w ciągu błędów (krok 1 opisany powyżej). Na przykład poniższa zasada ustawia atrybut źródła na zmienną o nazwie PostalCode, która odpowiada wartości w ustawieniu 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. Określ, czy ta zmienna jest typu message (wiadomość) czy nie:

    1. Znajdź kod w pakiecie proxy interfejsu API, w którym najpierw zdefiniowano zmienną.
    2. Gdy już ustalisz, w której z zasad zmienna jest zdefiniowana i wypełniana jako pierwsza, musisz określić jej typ w ten sposób:
      1. Sprawdź wartość atrybutu type (jeśli występuje).
      2. Jeśli atrybut type jest nieobecny, zmienna jest uznawana za ciąg znaków.
    3. Jeśli typ zmiennej to wartość inna niż wiadomość (np. ciąg znaków), to jest przyczyną błędu. Więcej informacji o popularnych zmiennych i ich typach znajdziesz w artykule Przewodnik po zmiennych.

    Zwróć uwagę np. na zmienną PostalCode w powyższym kodzie XML. Przypisuje on wartość zmiennej przepływu request.queryparam.postalcode w elemencie <AssignVariable>. Ta wartość jest ciągiem znaków, ponieważ w przypisaniu zmiennej nie ma atrybutu typu.

    Pamiętaj, że zmienna KodPocztowy jest używana w elemencie <Copy> w zasadach przypisywania wiadomości:

    <Copy source="PostalCode">
       <QueryParams>
          <QueryParam name="PostalCode" />
       </QueryParams>
    </Copy>
    

    Z powodu tego, że PostalCode nie jest typu message (w tym przykładzie jest to ciąg znaków), otrzymasz kod błędu:

    steps.assignmessage.VariableOfNonMsgType
    

Rozdzielczość

Sprawdź, czy atrybut source w elemencie <Copy> w nieudanej zasadzie przypisywania wiadomości jest ustawiony na istniejącą zmienną przepływu typu message.

Aby poprawić zasady, możesz zmodyfikować atrybut source w elemencie <Copy>, aby określić zmienną typu message. Jeśli na przykład zasada Przypisz wiadomość ma być wykonywana w przepływie żądania, możesz użyć zmiennej typu message request lub innej niestandardowej zmiennej typu 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>