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
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 togoogleBook
, a zmienna tovar
:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
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 nazwievar
, która jest zgodna z wartoś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>
Sprawdź, czy zmienna jest zdefiniowana i dostępna w przepływie, w którym jest wykonywana zasada Przypisz wiadomość.
Jeśli zmienna jest:
- poza zakresem (niedostępne w ramach konkretnego procesu, w którym jest wykonywana zasada) lub
- 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
, response
i message
są typu message. Więcej informacji o zmiennych wiadomości znajdziesz w artykule 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 na błąd. Na przykład w tymfaultstring
nazwa zasad toGenerateGeocodingRequest
, a zmienna toPostalCode
:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
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 nazwiePostalCode
, która odpowiada wartości w ustawieniufaultstring
:<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 jest typu message (wiadomość) czy nie:
- Znajdź kod w pakiecie proxy interfejsu API, w którym najpierw zdefiniowano zmienną.
- 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:
- Sprawdź wartość atrybutu type (jeśli występuje).
- Jeśli atrybut type jest nieobecny, zmienna jest uznawana za ciąg znaków.
- 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>