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
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 togoogleBook
, a zmiennej tovar
:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
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 nazwievar
, która odpowiada wartości w tabelifaultstring
:<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 jest wykonywana zasada Assign Message (Przypisz wiadomość).
Jeśli zmienna to:
- poza zakresem (niedostępne w ramach konkretnego procesu, w którym są realizowane zasady) lub
- 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
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 tagufaultstring
nazwa zasady toGenerateGeocodingRequest
, a zmiennej toPostalCode
:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
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 nazwiePostalCode
, która odpowiada wartości w tabelifaultstring
:<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 komunikat:
- Znajdź kod w pakiecie proxy interfejsu API, w którym najpierw zdefiniowano zmienną.
- Po ustaleniu zasady, według której zmienna jest zdefiniowana i wypełniana jako pierwsza, musisz określić jej typ w ten sposób:
- Sprawdź wartość atrybutu typ (jeśli jest dostępny).
- Jeśli brak atrybutu „type”, 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 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>