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

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja 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 zasadach przypisywania wiadomości to:

  • poza zakresem (niedostępne w ramach konkretnego procesu, w którym są realizowane zasady) lub
  • nie można rozwiązać (nie jest zdefiniowany)

Ten błąd występuje na przykład wtedy, gdy zasada Assign Message (Przypisz wiadomość) jest wykonywana w procesie żądania, ale atrybut source w elemencie <Copy> jest ustawiony na zmienną response lub error albo dowolną inną zmienną niestandardową, której nie ma w procesie żądania.

Diagnostyka

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

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

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. Sprawdź, czy nazwa użytej zmiennej odpowiada nazwie zmiennej określonej w ciągu błędu (krok 1 powyżej). Na przykład ta zasada ustawia atrybut źródła w elemencie <Copy> na zmienną o nazwie var, która odpowiada wartości w tabeli 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 jest wykonywana zasada Assign Message (Przypisz wiadomość).

  4. Jeśli zmienna to:

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

    to właśnie jest przyczyną błędu.

    Przykładowo załóżmy, że pokazana powyżej zasada Przypisz wiadomości jest wykonywana w procesie żą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ść

Sprawdź, czy zmienna, do której odwołuje się zasada, istnieje i jest dostępna w ramach konkretnego procesu, w którym jest wykonywana zasada Assign Message (Przypisywanie wiadomości).

Aby poprawić przykładową zasadę widoczną powyżej, możesz zmodyfikować atrybut źródła w elemencie <Copy>, zmieniając go na zmienną żądania lub dowolną inną zmienną niestandardową typu wiadomości, która występuje 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> jest ustawiony na zmienną, która nie ma typu message.

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

Diagnostyka

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

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. Sprawdź, czy nazwa zmiennej ustawionej w elemencie <Copy> nie odpowiada nazwie zmiennej określonej w ciągu błędu (krok 1 powyżej). Na przykład ta zasada ustawia atrybut źródła na zmienną o nazwie PostalCode, która odpowiada wartości w tabeli 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 komunikat:

    1. Znajdź kod w pakiecie proxy interfejsu API, w którym najpierw zdefiniowano zmienną.
    2. Po ustaleniu zasady, według której zmienna jest zdefiniowana i wypełniana jako pierwsza, musisz określić jej typ w ten sposób:
      1. Sprawdź wartość atrybutu typ (jeśli jest dostępny).
      2. Jeśli brak atrybutu „type”, 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 typowych zmiennych i ich typach znajdziesz w dokumentacji zmiennych.

    Spójrz na przykład na zmienną Kod pocztowy w powyższym kodzie XML. Przypisano mu 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.

    Przypominamy, że w elemencie <Copy> zasady Assign Message (Przypisywanie wiadomości) używana jest zmienna Kod pocztowy:

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

    Kod pocztowy nie jest typem komunikatu (w tym przykładzie jest to ciąg znaków), dlatego pojawia się 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ć tę zasadę, możesz zmodyfikować atrybut source w elemencie <Copy>, aby określić zmienną typu „komunikat”. Jeśli na przykład zasada Przypisz wiadomość ma być wykonywana w ramach procesu żądania, możesz użyć zmiennej typu wiadomości request lub dowolnej innej zmiennej niestandardowej typu wiadomość.

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