Wyświetlasz dokumentację Apigee Edge.
Przejdź do
dokumentacji 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> zasady Service Callout nie jest typu message. Jeśli zmienna jest ciągiem znaków lub innym typem niż message, pojawi się ten błąd.
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 typu message znajdziesz w dokumentacji zmiennych.
Diagnostyka
Znajdź zasadę Service Callout, w której wystąpił błąd, oraz nazwę zmiennej o nieprawidłowym typie. Oba te elementy znajdziesz w elemencie
faultstringodpowiedzi na błąd. Na przykład w tym elemenciefaultstringnazwa zasady toExecuteGeocodingRequest, a zmienna toPostalCode:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"W kodzie XML zasady Service Callout, która spowodowała błąd, sprawdź, czy nazwa zmiennej ustawiona w elemencie
<Request>jest zgodna z nazwą zmiennej podaną w elemencie `faultstring` (krok 1 powyżej). Na przykład ta zasada określa zmienną żądania o nazwiePostalCode, która jest zgodna z elementemfaultstring:<?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>Sprawdź, czy ta zmienna jest typu message:
- Znajdź w pakiecie serwera proxy interfejsu API kod, w którym zmienna została zdefiniowana po raz pierwszy.
- W większości przypadków problematyczna zmienna jest tworzona i wypełniana w innej zasadzie, która jest wykonywana przed zasadą Service Callout. Na przykład zasada Assign Message jest często używana do tworzenia i wypełniania zmiennych w przepływie serwera proxy interfejsu API.
- Gdy ustalisz zasadę, w której zmienna jest definiowana i wypełniana po raz pierwszy, musisz określić typ tej zmiennej w ten sposób:
- Sprawdź wartość atrybutu
type(jeśli występuje). - Jeśli atrybut
typenie występuje, zmienna jest traktowana jako ciąg znaków.
- Sprawdź wartość atrybutu
- Jeśli typ zmiennej nie jest typu message (np. jest ciągiem znaków), to jest to przyczyna błędu. Więcej informacji o typowych zmiennych i ich typach znajdziesz w dokumentacji zmiennych.
Załóżmy na przykład, że zmienna PostalCode używana w zasadzie Service Callout została utworzona w tej zasadzie Assign Message. Pamiętaj, że zmiennej PostalCode przypisana jest 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>
Pamiętaj, że zmienna PostalCode jest używana w elemencie <Request> zasady Service Callout:
<?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ż zmienna PostalCode nie jest typu message (w tym przykładzie jest ciągiem znaków), otrzymujesz kod błędu steps.servicecallout.RequestVariableNotMessageType.
Rozdzielczość
Upewnij się, że zmienna ustawiona w elemencie <Request> w zasadzie Service Callout, która spowodowała błąd, jest zmienną przepływu typu message, która istnieje. Możesz też utworzyć nową zmienną typu message bezpośrednio w zasadzie Service Callout (jak wyjaśniono w dokumentacji zasady) i jej użyć.
Aby poprawić zasadę, musisz zmodyfikować element <Request>, aby określić istniejącą lub nową zmienną typu message. Na przykład zmienna GeocodingRequest ustawiona w zasadzie Assign Message jest typu message i będzie działać prawidłowo w zasadzie Service Callout. 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> zasady Service Callout nie jest typu request message. Jeśli zmienna jest typu response message, ciągiem znaków lub innego typu, pojawi się ten błąd.
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 typu message znajdziesz w dokumentacji zmiennych.
Diagnostyka
Znajdź zasadę Service Callout, w której wystąpił błąd, oraz nazwę zmiennej o nieprawidłowym typie. Oba te elementy znajdziesz w elemencie
faultstringodpowiedzi na błąd. Na przykład w tym elemenciefaultstringnazwa zasady toExecuteGeocodingRequest, a zmienna tovar_response:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"W kodzie XML zasady Service Callout, która spowodowała błąd, sprawdź, czy nazwa zmiennej ustawiona w elemencie
<Request>jest zgodna z nazwą zmiennej podaną w elemencie `faultstring` (krok 1 powyżej). Na przykład ta zasada określa zmienną żądania o nazwievar_response, która jest zgodna z elementemfaultstring:<?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>Sprawdź, czy zmienna jest typu request message:
- Znajdź w pakiecie serwera proxy interfejsu API kod, w którym zmienna została zdefiniowana po raz pierwszy.
- W większości przypadków problematyczna zmienna jest tworzona i wypełniana w innej zasadzie, która jest wykonywana przed zasadą Service Callout. Na przykład zasada Assign Message jest często używana do tworzenia i wypełniania zmiennych w przepływie serwera proxy interfejsu API.
- Gdy ustalisz zasadę, w której zmienna jest definiowana i wypełniana po raz pierwszy, musisz określić typ tej zmiennej w ten sposób:
- Sprawdź wartość atrybutu
type(jeśli występuje). - Jeśli atrybut
typenie występuje, zmienna jest traktowana jako ciąg znaków.
- Sprawdź wartość atrybutu
- Jeśli typ zmiennej nie jest typu request message, to jest to przyczyna błędu. Więcej informacji o typowych zmiennych i ich typach znajdziesz w dokumentacji zmiennych.
Załóżmy na przykład, że zmienna var_response używana w zasadzie Service Callout została utworzona w tej zasadzie Assign Message. Pamiętaj, że var_response ma typ response. Dlatego typ zmiennej var_response to response message.
<?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> zasady Service Callout.
<?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ż zmienna var_response nie jest typu request message (jest typu response message), otrzymujesz kod błędu steps.servicecallout.RequestVariableNotRequestMessageType.
Rozdzielczość
Upewnij się, że zmienna ustawiona w elemencie <Request> w zasadzie Service Callout, która spowodowała błąd, jest zmienną typu request message, która istnieje. Możesz też utworzyć nową zmienną typu request message bezpośrednio w zasadzie Service Callout (jak wyjaśniono w dokumentacji zasady) i jej użyć.
Aby poprawić zasadę, musisz zmodyfikować element <Request>, aby określić istniejącą lub nową zmienną typu request message. Będzie ona działać w zasadzie Service Callout. 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 źle sformatowany adres URL | Docelowy adres URL w zasadzie Service Callout jest nieprawidłowy lub ma nieprawidłową albo niedostępną nazwę hosta. |
| Błąd serwera backendu | Serwer backendu zwraca odpowiedź o błędzie 4XX lub 5XX. |
Przyczyna: nieprawidłowy lub źle sformatowany adres URL
Docelowy adres URL w zasadzie Service Callout jest nieprawidłowy lub ma nieprawidłową albo niedostępną nazwę hosta.
Diagnostyka
Znajdź zasadę Service Callout, która spowodowała błąd. Nazwa zasady pojawia się w elemencie
faultstringodpowiedzi na błąd. Na przykład w tym elemenciefaultstringnazwa zasady Service Callout, która spowodowała błąd, toExecuteGeocodingRequest."faultstring": "ServiceCallout[ExecuteGeocodingRequest]"W zasadzie Service Callout, która spowodowała błąd, sprawdź element
<URL>. Jeśli jest nieprawidłowy lub ma nieprawidłową albo niedostępną nazwę hosta, to jest to przyczyna tego błędu. Na przykład ta zasada Service Callout określa nieprawidłowy element<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>zawiera tylko protokółhttp://, ale nie ma prawidłowej nazwy hosta. Dlatego zasada Service Callout kończy się niepowodzeniem z powodu błędu:Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable.
Rozdzielczość
Upewnij się, że element <URL> w zasadzie Service Callout, która spowodowała błąd, zawiera prawidłowy adres URL z dostępną nazwą hosta.
Aby poprawić zasadę Service Callout pokazaną powyżej, 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
Znajdź zasadę Service Callout, która spowodowała błąd. Nazwa zasady pojawia się w elemencie
faultstringodpowiedzi na błąd. Na przykład w tym elemenciefaultstringnazwa zasady Service Callout, która spowodowała błąd, toExecuteGeocodingRequest."faultstring": "ServiceCallout[ExecuteGeocodingRequest]Sprawdź element
faultstringw treści odpowiedzi na błąd i zobacz, czy w elemencieReasonnie ma kodów odpowiedzi 4XX lub 5XX. Na przykład ten element `faultstring` 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 ustalisz kod odpowiedzi na błąd, możesz rozwiązać ten problem tak samo jak każdy błąd 4XX lub 5XX. Instrukcje rozwiązywania błędów 4XX lub 5XX znajdziesz w przewodnikach dotyczących błędów środowiska wykonawczego (4XX/5XX).