Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
RequestVariableNotMessageType
Kod błędu
steps.servicecallout.RequestVariableNotMessageType
Treść odpowiedzi na błąd
{ "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> zasad dotyczących wywołań usługi nie jest typu message. Ten błąd występuje, 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 są typu message. Więcej informacji o zmiennych wiadomości znajdziesz w artykule o zmiennych.
Diagnostyka
Wskaż zasadę objaśnienia usługi, w której wystąpił błąd, i podaj nazwę zmiennej, której typ jest nieprawidłowy. Oba te elementy znajdziesz w elemencie
faultstringodpowiedzi na błąd. Na przykład w tym tagufaultstringnazwa zasady toExecuteGeocodingRequest, a zmiennej toPostalCode:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"W pliku XML z błędami dotyczącymi wywołań usługi sprawdź, czy nazwa zmiennej ustawiona w elemencie
<Request>jest zgodna z nazwą zmiennej podaną w ciągu błędu (krok 1 powyżej). Na przykład ta zasada określa zmienną żądania o nazwiePostalCode, która jest zgodna z zasadąfaultstring:<?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 komunikat:
- Znajdź kod w pakiecie proxy interfejsu API, w którym najpierw zdefiniowano zmienną.
- W większości przypadków zmienna problemowa jest tworzona i wypełniana w innej zasadzie, która jest wykonywana przed zasadą dotyczącą wywołań usługi. Na przykład zasada Assign Message (Przypisz wiadomości) jest często używana do tworzenia i wypełniania zmiennych w przepływie procesu serwera proxy interfejsu API.
- 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
type(jeśli występuje). - Jeśli brak atrybutu
type, zmienna jest uznawana za ciąg znaków.
- Sprawdź wartość atrybutu
- 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.
Załóżmy na przykład, że zmienna PostalCode, do której odwołuje się zasada dotyczące powiadamiania o usługach, została utworzona w ramach tej zasady dotyczącej przypisywania wiadomości. Pamiętaj, że do parametru PostalCode jest przypisana wartość zmiennej przepływu request.queryparam.postalcode. Ta wartość jest ciągiem 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>
Przypominamy, że w elemencie <Request> zasad dotyczących objaśnień usługi używana jest zmienna PostalCode:
<?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>
Ponieważ PostalCode nie jest typem komunikatu (w tym przykładzie jest to ciąg znaków), pojawia się kod błędu: steps.servicecallout.RequestVariableNotMessageType.
Rozdzielczość
Upewnij się, że zmienna ustawiona w elemencie <Request> w niewłaściwych zasadach dotyczących wywołań usługi jest istniejącą zmienną typu message. Możesz też utworzyć nową zmienną typu wiadomości bezpośrednio w zasadach dotyczących wywołań usługi (jak wyjaśniono w dokumentacji zasad) i z niej skorzystać.
Aby poprawić zasadę, musisz zmodyfikować element <Request>, aby wskazać istniejącą lub nową zmienną typu wiadomość. Na przykład zmienna GeocodingRequest ustawiona w zasadzie Przypisz wiadomość jest typu „Wiadomość” i działa dobrze w zasadach dotyczących wywołań 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 na błąd
{
"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> zasad dotyczących wywołań usługi nie jest typu żądanie. Ten komunikat o błędzie pojawi się, jeśli zmienna jest typem wiadomości w odpowiedzi, ciągiem znaków lub innym typem.
Zmienne typu wiadomość 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
Określ zasadę dotyczącą opisu usługi, 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 tym tagufaultstringnazwa zasady toExecuteGeocodingRequest, a zmiennej tovar_response:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"W pliku XML z błędami dotyczącymi wywołań usługi sprawdź, czy nazwa zmiennej ustawiona w elemencie
<Request>jest zgodna z nazwą zmiennej podaną w ciągu błędu (krok 1 powyżej). Na przykład ta zasada określa zmienną żądania o nazwievar_response, która jest zgodna z zasadąfaultstring:<?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 jest typem komunikatu żądania:
- Znajdź kod w pakiecie proxy interfejsu API, w którym najpierw zdefiniowano zmienną.
- W większości przypadków zmienna problemowa jest tworzona i wypełniana w innej zasadzie, która jest wykonywana przed zasadą dotyczącą wywołań usługi. Na przykład zasada Assign Message (Przypisz wiadomości) jest często używana do tworzenia i wypełniania zmiennych w przepływie procesu serwera proxy interfejsu API.
- 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
type(jeśli występuje). - Jeśli atrybut
typejest nieobecny, zmienna jest traktowana jako ciąg znaków.
- Sprawdź wartość atrybutu
- Jeśli typ zmiennej jest inny niż komunikat żądania, 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ące powiadamiania o usługach, została utworzona w ramach tej zasady dotyczącej przypisywania wiadomości. Zwróć uwagę, że var_response otrzymuje typ response. Dlatego typ zmiennej var_response jest komunikatem o 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>
Zwróć uwagę, że w elemencie <Request> zasad dotyczących objaśnień usługi używana jest zmienna var_response.
<?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ż var_response nie jest typem komunikatu z żądaniem (jego typ jest komunikatem z odpowiedzią), otrzymujesz kod błędu: steps.servicecallout.RequestVariableNotRequestMessageType.
Rozdzielczość
Upewnij się, że zmienna ustawiona w elemencie <Request> w niewłaściwych zasadach dotyczących wywołań usługi jest istniejącą zmienną typu żądanie wiadomości. Możesz też utworzyć zmienną typu nowej wiadomości żądania bezpośrednio w zasadach dotyczących objaśnień usługi (jak wyjaśniono w dokumentacji zasad) i z niej skorzystać.
Aby poprawić tę zasadę, musisz zmodyfikować element <Request>, tak aby zawierał istniejącą lub nową zmienną w postaci komunikatu typu „żądanie”. Będzie to działać w ramach zasad dotyczących wywołań 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 na błąd
{
"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 uszkodzony adres URL | Docelowy URL w zasadzie objaśnienia usługi jest uszkodzony albo ma nieprawidłową lub nieosiągalną nazwę hosta. |
| Błąd serwera backendu | Serwer zaplecza zwraca odpowiedź z błędem 4XX lub 5XX. |
Przyczyna: nieprawidłowy lub źle sformatowany adres URL
Docelowy URL w zasadzie objaśnienia usługi jest uszkodzony albo ma nieprawidłową lub nieosiągalną nazwę hosta.
Diagnostyka
Określ zasadę dotyczącą objaśnień dotyczących usługi, która spowodowała błąd. Nazwa zasady pojawia się w elemencie
faultstringodpowiedzi na błąd. Na przykład w tym dokumenciefaultstringnazwa niespełnionej zasady objaśnienia usługi toExecuteGeocodingRequest."faultstring": "ServiceCallout[ExecuteGeocodingRequest]"W błędnych zasadach dotyczących wywołań usługi sprawdź element
<URL>. Jeśli jest ona nieprawidłowa lub zawiera nieprawidłową lub niedostępną nazwę hosta, jest to przyczyną błędu. Na przykład te zasady objaśnień dotyczących usługi określają nieprawidłowy atrybut<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 nie powiodą się zasady dotyczące wywołań usługi i pojawi się błąd:Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable.
Rozdzielczość
Upewnij się, że element <URL> w zasadach dotyczących wywołania usługi, które nie przeszło weryfikacji, zawiera prawidłowy adres URL z dostepną nazwą hosta.
Aby poprawić widoczne powyżej zasady dotyczące wywołań 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ź błędu o wartości 4XX lub 5XX.
Diagnostyka
Odszukaj zasadę Service Callout, która spowodowała błąd. Nazwa zasady pojawia się w elemencie
faultstringodpowiedzi na błąd. Na przykład w poniższym plikufaultstringnazwa nieudanej zasady objaśnienia usługi toExecuteGeocodingRequest."faultstring": "ServiceCallout[ExecuteGeocodingRequest]Sprawdź
faultstringw treści odpowiedzi na błąd i sprawdź, czy w poluReasonnie ma kodów odpowiedzi 4xx lub 5xx. Na przykład ten ciąg znaków błędu 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ść
Gdy już poznasz kod odpowiedzi, możesz rozwiązać ten problem tak samo jak każdy inny błąd 4XX lub 5XX. Instrukcje rozwiązywania problemów z błędami 4XX i 5XX znajdziesz w poradnikach dotyczących błędów środowiska wykonawczego (4XX/5XX).