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

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

UnresolvedVariable

Kod błędu

steps.assignmessage.UnresolvedVariable

Treść odpowiedzi o błędzie

{
    "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 zasadach przypisywania wiadomości ma wartość:

  • poza zakresem (niedostępne w konkretnym procesie, w którym jest wykonywana zasada) lub
  • Nie można rozwiązać (nie określono)

Ten błąd występuje na przykład wtedy, gdy zasada przypisywania wiadomości jest wykonywana w przepływie żądania, ale atrybut source w elemencie <Copy> jest ustawiony na zmienną response lub error albo inną zmienną niestandardową, która nie istnieje w przepływie żądania.

Diagnostyka

  1. Zidentyfikuj 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 o błędzie.

    Na przykład w tagu faultstring nazwa zasady to googleBook, a zmienna to var:

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. W pliku XML przypisywania wiadomości zasady przypisywania wiadomości sprawdź, czy nazwa używanej zmiennej jest zgodna z nazwą zmiennej określoną w ciągu błędu (krok 1 powyżej). Na przykład ta zasada ustawia w atrybucie źródłowym elementu <Copy> zmienną o nazwie var, która odpowiada zawartoś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. Określ, czy zmienna jest zdefiniowana i dostępna w procesie, w którym wykonywana jest zasada przypisywania wiadomości.

  4. Jeśli zmienna to:

    1. poza zakresem (niedostępne w konkretnym procesie, w którym jest wykonywana zasada) lub
    2. Nie można rozwiązać (nie określono)

    to jest jego przyczyna.

    Załóżmy na przykład, że opisana powyżej zasada przypisywania wiadomości jest wykonywana w przepływie żądania. Sprawdź, czy zmienna var jest zdefiniowana w którejś z zasad, które są wykonywane przed zasadą przypisywania wiadomości w przepływie żądania. Jeśli zmienna nie została zdefiniowana, otrzymasz kod błędu:

    steps.assignmessage.UnresolvedVariable
    

Rozdzielczość

Sprawdź, czy zmienna, do której odwołuje się zasada, istnieje i jest dostępna w ramach określonego procesu, w którym jest wykonywana zasada przypisywania wiadomości.

Aby poprawić przykładową zasadę przedstawioną powyżej, możesz zmienić atrybut źródłowy w elemencie <Copy> tak, aby był zmienną żądania lub inną niestandardową zmienną typu komunikatem występującym w procesie żą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 o błędzie

{
    "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> jest ustawiony na zmienną innego typu niż message.

Zmienne typu wiadomości reprezentują całe żądania i odpowiedzi HTTP. Wbudowane zmienne przepływu Edge (request, response i message) mają typ komunikatu. Więcej informacji o zmiennych dotyczących wiadomości znajdziesz w informacjach 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 o błędzie. Na przykład w tagu faultstring nazwa zasady to GenerateGeocodingRequest, a zmienna to PostalCode:

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. W pliku XML, którego nie udało się przetworzyć, sprawdź, czy nazwa zestawu zmiennych w elemencie <Copy> odpowiada nazwie zmiennej określonej w ciągu błędu (krok 1 powyżej). Na przykład ta zasada ustawia atrybut źródłowy na zmienną o nazwie PostalCode, która odpowiada zawartości w 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 ma typ komunikatu:

    1. Znajdź kod w pakiecie serwera proxy interfejsu API, w którym zmienna została zdefiniowana jako pierwsza.
    2. Gdy już określisz zasadę, w której zdefiniujesz i uzupełnisz zmienną, musisz najpierw określić jej typ:
      1. Sprawdź wartość atrybutu typu (jeśli istnieje).
      2. Jeśli atrybut type nie jest obecny, zmienna jest uznawana za ciąg znaków.
    3. Jeśli zmienna ma typ inny niż komunikat (np. ciąg znaków), to jest przyczyną błędu. Więcej informacji o typowych zmiennych i ich typach znajdziesz w dokumentacji zmiennych.

    Spójrz na przykład na zmienną PostalCode w powyższym kodzie XML. Przypisano mu wartość zmiennej przepływu request.queryparam.postalcode w elemencie <AssignVariable>. Jest to ciąg znaków, ponieważ w przypisaniu zmiennej nie ma atrybutu typu.

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

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

    Komunikat PostalCode nie jest typu (w tym przykładzie jest ciągiem znaków), dlatego otrzymujesz kod błędu:

    steps.assignmessage.VariableOfNonMsgType
    

Rozdzielczość

Upewnij się, że atrybut source w elemencie <Copy> w nieudanej zasadzie przypisywania wiadomości jest ustawiony na istniejącą zmienną przepływu typu wiadomość.

Aby poprawić zasadę, możesz zmodyfikować atrybut source w elemencie <Copy>, aby określić zmienną typu komunikat. Jeśli na przykład zasada przypisywania wiadomości powinna być uruchamiana w przepływie żądania, możesz użyć zmiennej typu wiadomości request lub dowolnej innej niestandardowej zmiennej typu „komunikat”.

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