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
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 togoogleBook
, a zmienna tovar
:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
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 nazwievar
, która odpowiada zawartości w elemenciefaultstring
:<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>
Określ, czy zmienna jest zdefiniowana i dostępna w procesie, w którym wykonywana jest zasada przypisywania wiadomości.
Jeśli zmienna to:
- poza zakresem (niedostępne w konkretnym procesie, w którym jest wykonywana zasada) lub
- 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
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 tagufaultstring
nazwa zasady toGenerateGeocodingRequest
, a zmienna toPostalCode
:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
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 nazwiePostalCode
, która odpowiada zawartości wfaultstring
:<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>
Określ, czy ta zmienna ma typ komunikatu:
- Znajdź kod w pakiecie serwera proxy interfejsu API, w którym zmienna została zdefiniowana jako pierwsza.
- Gdy już określisz zasadę, w której zdefiniujesz i uzupełnisz zmienną, musisz najpierw określić jej typ:
- Sprawdź wartość atrybutu typu (jeśli istnieje).
- Jeśli atrybut type nie jest obecny, zmienna jest uznawana za ciąg znaków.
- 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>