Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
RequestVariableNotMessageType
Kod błędu
steps.servicecallout.RequestVariableNotMessageType
Treść odpowiedzi o błędzie
{ "fault": { "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Message", "detail": { "errorcode": "steps.servicecallout.RequestVariableNotMessageType" } } }
Przyczyna
Ten błąd występuje, jeśli zmienna określona w elemencie <Request>
w zasadach dotyczących objaśnienia usługi nie jest typu komunikat. Ten błąd wystąpi, jeśli zmienna jest ciągiem znaków lub innym typem niebędącym wiadomością.
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
Wskaż zasadę dotyczącą objaśnienia usługi, 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 toExecuteGeocodingRequest
, a zmienna toPostalCode
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"
Sprawdź, czy nazwa zbioru zmiennej w elemencie
<Request>
(w języku angielskim) jest zgodna z nazwą zmiennej określoną w ciągu błędu (krok 1 powyżej). Na przykład ta zasada określa zmienną żądania o nazwiePostalCode
, która odpowiada zawartości w tabelifaultstring
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="PostalCode"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
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.
- W większości przypadków zmienna powodująca problem jest tworzona i wypełniana w innej zasadzie, która jest wykonywana przed zasadą dotyczącą objaśnień do usługi. Na przykład zasada przypisywania wiadomości jest zwykle używana do tworzenia i wypełniania zmiennych w procesie serwera proxy interfejsu API.
- Gdy już określisz zasadę, w której zdefiniujesz i uzupełnisz zmienną, musisz najpierw określić jej typ:
- Sprawdź wartość atrybutu
type
(jeśli istnieje). - Jeśli atrybut
type
nie jest obecny, zmienna jest uznawana za ciąg znaków.
- Sprawdź wartość atrybutu
- 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.
Załóżmy na przykład, że zmienna PostalCode
, do której odwołuje się zasada dotycząca objaśnienia usługi, została utworzona w poniższych zasadach przypisywania wiadomości. Pamiętaj, że PostalCode
ma przypisaną wartość zmiennej przepływu request.queryparam.postalcode
. Jest to ciąg znaków, ponieważ w przypisaniu zmiennej nie ma atrybutu type
.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<Set>
<QueryParams>
<QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
<QueryParam name="region">{request.queryparam.country}</QueryParam>
<QueryParam name="sensor">false</QueryParam>
</QueryParams>
<Verb>GET</Verb>
</Set>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
</AssignMessage>
Pamiętaj, że zmienna PostalCode
jest używana w elemencie <Request>
w zasadach dotyczących objaśnień usługi:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="PostalCode"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
Komunikat o typie PostalCode
nie jest typu (w tym przykładzie jest to ciąg znaków), dlatego otrzymujesz kod błędu: steps.servicecallout.RequestVariableNotMessageType
.
Rozdzielczość
Upewnij się, że zmienna ustawiona w elemencie <Request>
w nieudanej zasadzie dotyczącej objaśnienia usługi jest istniejącą zmienną przepływu typu wiadomość. Możesz też utworzyć nową zmienną typu wiadomości bezpośrednio w zasadach dotyczących objaśnień do usługi (zgodnie z opisem w dokumentacji zasad) i używać jej.
Aby poprawić zasadę, musisz zmodyfikować element <Request>
, aby określić istniejącą lub nową zmienną typu komunikat. Na przykład zmienna GeocodingRequest
ustawiona w zasadzie Przypisz wiadomość ma typ „Komunikat” i działa prawidłowo z zasadami dotyczącymi objaśnienia do usługi. Na przykład:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
RequestVariableNotRequestMessageType
Kod błędu
steps.servicecallout.RequestVariableNotRequestMessageType
Treść odpowiedzi o błędzie
{ "fault": { "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Request Message", "detail": { "errorcode": "steps.servicecallout.RequestVariableNotRequestMessageType" } } }
Przyczyna
Ten błąd występuje, jeśli zmienna określona w elemencie <Request>
w zasadzie objaśnienia usługi nie jest typu komunikatu. Ten błąd wystąpi, jeśli zmienna jest typem komunikatu z odpowiedzią, ciągiem znaków lub innym typem.
Zmienne typu Wiadomość 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
Wskaż zasadę dotyczącą objaśnienia usługi, 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 toExecuteGeocodingRequest
, a zmienna tovar_response
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"
Sprawdź, czy nazwa zbioru zmiennej w elemencie
<Request>
(w języku angielskim) jest zgodna z nazwą zmiennej określoną w ciągu błędu (krok 1 powyżej). Na przykład ta zasada określa zmienną żądania o nazwievar_response
, która odpowiada zawartości w tabelifaultstring
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="var_response"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
Określ, czy zmienna ma typ wiadomości żądania:
- Znajdź kod w pakiecie serwera proxy interfejsu API, w którym zmienna została zdefiniowana jako pierwsza.
- W większości przypadków zmienna powodująca problem jest tworzona i wypełniana w innej zasadzie, która jest wykonywana przed zasadą dotyczącą objaśnień do usługi. Na przykład zasada przypisywania wiadomości jest zwykle używana do tworzenia i wypełniania zmiennych w procesie serwera proxy interfejsu API.
- Gdy już określisz zasadę, w której zdefiniujesz i uzupełnisz zmienną, musisz najpierw określić jej typ:
- Sprawdź wartość atrybutu
type
(jeśli istnieje). - Jeśli atrybut
type
nie jest obecny, zmienna jest uznawana za ciąg znaków.
- Sprawdź wartość atrybutu
- Jeśli typ zmiennej nie jest typu żądanie wiadomości, to jest przyczyną błędu. Więcej informacji o typowych zmiennych i ich typach znajdziesz w dokumentacji zmiennych.
Załóżmy na przykład, że zmienna var_response
, do której odwołuje się zasada dotycząca objaśnienia usługi, została utworzona w poniższych zasadach przypisywania wiadomości. Zauważ, że var_response
otrzymuje typ response
. Dlatego typem zmiennej var_response
jest komunikat z odpowiedzią.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<AssignTo createNew="true" type="response">var_response</AssignTo>
<Set>
<QueryParams>
<QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
<QueryParam name="region">{request.queryparam.country}</QueryParam>
<QueryParam name="sensor">false</QueryParam>
</QueryParams>
<Verb>GET</Verb>
</Set>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
</AssignMessage>
Pamiętaj, że zmienna var_response
jest używana w elemencie <Request>
zasad dotyczących objaśnienia usługi.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="var_response"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
Ponieważ komunikat var_response
nie jest typu żądaniem (jego typem jest odpowiedź), otrzymujesz kod błędu: steps.servicecallout.RequestVariableNotRequestMessageType
.
Rozdzielczość
Upewnij się, że zmienna ustawiona w elemencie <Request>
w niespełnionej zasady dotyczącej objaśnienia usługi to zmienna typu prośba o wiadomość. Możesz też utworzyć nową zmienną typu wiadomości żądania bezpośrednio w zasadach dotyczących objaśnień do usługi (zgodnie z opisem w dokumentacji zasad) i używać jej.
Aby poprawić zasadę, musisz zmodyfikować element <Request>
, aby określić istniejącą lub nową zmienną typu komunikat z żądaniem. Będzie on działać z zasadami dotyczącymi objaśnień usługi. Na przykład:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
ExecutionFailed
Kod błędu
steps.servicecallout.ExecutionFailed
Treść odpowiedzi o błędzie
{ "fault": { "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: Host not reachable", "detail": { "errorcode": "steps.servicecallout.ExecutionFailed" } } }
lub
{ "fault": { "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: ResponseCode [http_code] is treated as error", "detail": { "errorcode": "steps.servicecallout.ExecutionFailed" } } }
Możliwe przyczyny
Możliwe przyczyny tego błędu:
Przyczyna | Opis |
Nieprawidłowy lub błędnie sformatowany URL | Docelowy URL w zasadzie objaśnienia usługi ma nieprawidłowy format albo zawiera nieprawidłową lub nieosiągalną nazwę hosta. |
Błąd serwera backendu | Serwer backendu zwraca odpowiedź o błędzie 4XX lub 5XX. |
Przyczyna: nieprawidłowy lub uszkodzony adres URL
Docelowy URL w zasadzie objaśnienia usługi ma nieprawidłowy format albo zawiera nieprawidłową lub nieosiągalną nazwę hosta.
Diagnostyka
Wskaż zasadę dotyczącą objaśnienia usługi, która spowodowała błąd. Nazwa zasady pojawia się w elemencie
faultstring
odpowiedzi o błędzie. Na przykład w tagufaultstring
niepoprawna zasada objaśnienia usługi toExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]"
W niespełnionej zasady dotyczącej objaśnień usługi sprawdź element
<URL>
. Jeśli nazwa hosta ma nieprawidłowy format albo jest nieprawidłowa lub nieosiągalna, to właśnie jest przyczyną tego błędu. Na przykład poniższe zasady dotyczące objaśnień usługi wskazują nieprawidłową wartość<URL>
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="GeocodingRequest"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://</URL> </HTTPTargetConnection> </ServiceCallout>
Element
<URL>
ma tylko protokółhttp://
, ale nie ma prawidłowej nazwy hosta. W związku z tym zasada objaśnienia usługi kończy się błędem:Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable
.
Rozdzielczość
Upewnij się, że element <URL>
w nieudanej zasadzie objaśnienia usługi ma prawidłowy adres URL i osiągalną nazwę hosta.
Aby poprawić powyższą zasadę dotyczącą objaśnień usługi, możesz zmodyfikować element <URL>
, aby określić prawidłowy adres URL:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
Przyczyna: błąd serwera backendu
Serwer backendu zwraca odpowiedź o błędzie 4XX lub 5XX.
Diagnostyka
Wskaż zasadę dotyczącą objaśnienia usługi, która spowodowała błąd. Nazwa zasady pojawia się w elemencie
faultstring
odpowiedzi o błędzie. Na przykład w tagufaultstring
niepoprawna zasada objaśnienia usługi toExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]
Sprawdź
faultstring
w treści odpowiedzi o błędzie i sprawdź, czyReason
zawiera kody 4XX lub 5XX. Na przykład ten ciąg błędów wyraźnie wskazuje, że serwer backendu zwrócił kod odpowiedzi 502:"faultstring": "Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: ResponseCode 502 is treated as error"
Rozdzielczość
Po określeniu kodu odpowiedzi błędu możesz rozwiązać ten problem tak samo jak w przypadku każdego błędu 4XX i 5XX. Instrukcje rozwiązywania problemów z błędami 4XX i 5XX znajdziesz w poradnikach dotyczących błędów środowiska wykonawczego (4XX/5XX).