Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
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 jest:
- poza zakresem (niedostępne w określonym procesie, w którym są wykonywane zasady) lub
- nie można rozstrzygnąć (nie jest zdefiniowana)
Ten błąd występuje np. wtedy, gdy w przepływie żądania jest wykonywana zasada przypisywania wiadomości, ale atrybut source w elemencie <Copy> jest ustawiony na zmienną response lub error albo na 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ę niedostępnej zmiennej. Oba te elementy znajdziesz w elemencie
faultstringodpowiedzi na błąd.Na przykład w tym
faultstringnazwa zasad togoogleBook, a zmienna tovar:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"W pliku XML nieudanej zasady Assign Message sprawdź, czy nazwa użytej zmiennej jest zgodna z nazwą zmiennej podaną 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 nazwievar, która pasuje do 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 wykonywana jest zasada Assign Message.
Jeśli zmienna ma wartość:
- poza zakresem (niedostępne w określonym procesie, w którym są wykonywane zasady) lub
- nie można rozstrzygnąć (nie jest zdefiniowana)
wtedy to jest przyczyną błędu.
Załóżmy na przykład, że w przepływie żądania jest wykonywana zasada przypisywania wiadomości pokazana powyżej. Sprawdź, czy zmienna
varjest zdefiniowana w którychkolwiek zasadach wykonywanych przed zasadami Assign Message 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łują się zasady, istnieje i jest dostępna w danym przepływie, w którym wykonywane są zasady Assign Message.
Aby poprawić przykładowe zasady pokazane powyżej, możesz zmodyfikować atrybut źródła w elemencie <Copy>, tak aby był zmienną żądania lub inną zmienną niestandardową typu message, która występuje 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 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 jest typu message.
Zmienne typu wiadomości reprezentują całe żądania i odpowiedzi HTTP. Wbudowane zmienne przepływu Edge request, response i message są typu message. Więcej informacji o zmiennych w wiadomościach znajdziesz w dokumentacji zmiennych.
Diagnostyka
Określ 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
faultstringodpowiedzi na błąd. Na przykład w tymfaultstringnazwa zasad toGenerateGeocodingRequest, a zmienna toPostalCode:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"W nieudanym pliku XML zasady przypisywania wiadomości sprawdź, czy nazwa zmiennej ustawionej w elemencie
<Copy>jest zgodna z nazwą zmiennej podaną w ciągu znaków błędu (krok 1 powyżej). Na przykład te zasady ustawiają atrybut źródła na zmienną o nazwiePostalCode, która pasuje do wartoś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>Sprawdź, czy zmienna jest typu message:
- Znajdź w pakiecie serwera proxy interfejsu API kod, w którym zmienna została zdefiniowana po raz pierwszy.
- Gdy ustalisz, w których zasadach zmienna jest zdefiniowana i wypełniana jako pierwsza, musisz określić jej typ w ten sposób:
- Sprawdź wartość atrybutu type (jeśli jest obecny).
- Jeśli atrybut type nie występuje, zmienna jest traktowana jako ciąg znaków.
- Jeśli typ zmiennej nie jest typem wiadomości (np. ciągiem znaków), to jest to przyczyną błędu. Więcej informacji o najczęstszych zmiennych i ich typach znajdziesz w tym artykule.
Na przykład przyjrzyj się zmiennej PostalCode w powyższym pliku XML. W elemencie
<AssignVariable>przypisywana jest jej wartość zmiennej przepływurequest.queryparam.postalcode. Ta wartość jest ciągiem znaków, ponieważ w przypisaniu zmiennej nie ma atrybutu typu.Przypomnijmy, że zmienna PostalCode jest używana w elemencie
<Copy>zasady Assign Message:<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>Ponieważ 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 zasadzie Assign Message, która nie została zastosowana, jest ustawiony na istniejącą zmienną przepływu typu message.
Aby poprawić zgodność z zasadami, możesz zmodyfikować atrybut source w elemencie <Copy>, aby określić zmienną typu message. Jeśli np. zasady przypisywania wiadomości mają być wykonywane w przepływie żą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>