Apigee Edge belgelerini görüntülüyorsunuz.
Git:
Apigee X belgeleri. bilgi
RequestVariableNotMessageType
Hata kodu
steps.servicecallout.RequestVariableNotMessageType
Hata yanıtı gövdesi
{ "fault": { "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Message", "detail": { "errorcode": "steps.servicecallout.RequestVariableNotMessageType" } } }
Neden
Bu hata, Hizmet Açıklama Metni Politikası'nın <Request>
öğesinde belirtilen değişken mesaj türünde değilse ortaya çıkar. Değişken bir dizeyse veya mesaj türünde olmayan başka bir türdeyse bu hatayı görürsünüz.
Mesaj türü değişkenleri, HTTP isteklerinin ve yanıtlarının tamamını temsil eder. Yerleşik Edge akış değişkenleri request
, response
ve message
mesaj türündedir. Mesaj değişkenleri hakkında daha fazla bilgi edinmek için Değişkenler referansı başlıklı makaleyi inceleyin.
Teşhis
Hatanın oluştuğu Hizmet Çağrısı politikasını ve türü yanlış olan değişkenin adını belirtin. Bu öğelerin ikisini de hata yanıtının
faultstring
öğesinde bulabilirsiniz. Örneğin, aşağıdakifaultstring
politikasında politika adıExecuteGeocodingRequest
, değişken isePostalCode
şeklindedir:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"
Başarısız hizmet açıklama metni politikası XML'inde,
<Request>
öğesinde ayarlanan değişken adının, hata dizesinde tanımlanan değişken adıyla eşleştiğini doğrulayın (yukarıdaki 1. adım). Örneğin aşağıdaki politika,faultstring
ile eşleşenPostalCode
adlı bir istek değişkenini belirtir:<?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>
Bu değişkenin mesaj türüne ait olup olmadığını belirleyin:
- Değişkenin ilk olarak tanımlandığı API Proxy paketi içinde kodu bulun.
- Çoğu durumda, sorun değişkeninin Hizmet Açıklaması politikasından önce yürütülen başka bir politikada oluşturulup doldurulduğunu görürsünüz. Örneğin, Mesaj Ata politikası, API proxy akışında değişkenler oluşturmak ve doldurmak için yaygın olarak kullanılır.
- Değişkenin tanımlandığı ve doldurulduğu politikayı belirledikten sonra, o değişkenin türünü aşağıdaki şekilde belirlemeniz gerekir:
type
özelliğinin değerini (varsa) kontrol edin.type
özelliği yoksa değişken bir dize olarak kabul edilir.
- Değişkenin türü ileti değilse (ör. dize) hata bundan kaynaklanır. Değişkenler referansı bölümünde, sık kullanılan değişkenler ve türleri hakkında bilgi edinebilirsiniz.
Örneğin, Hizmet Açıklama Metni Politikası'nda referans verilen PostalCode
değişkeninin aşağıdaki Mesaj Ata politikasında oluşturulduğunu varsayalım. PostalCode
işlevine, request.queryparam.postalcode
akış değişkeninin değerinin atandığına dikkat edin. Değişken atamasında type
özelliği olmadığından bu değer bir dizedir.
<?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>
Şimdi, PostalCode
değişkeninin Hizmet Açıklama Metni politikasının <Request>
öğesinde kullanıldığını unutmayın:
<?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>
PostalCode
, mesaj türünde olmadığından (bu örnekte bir dizedir), şu hata kodunu alırsınız: steps.servicecallout.RequestVariableNotMessageType
.
Çözünürlük
Başarısız Hizmet Açıklaması politikasındaki <Request>
öğesinde ayarlanan değişkenin, mevcut bir mesaj türü akış değişkeni olduğundan emin olun. Alternatif olarak, doğrudan Hizmet Açıklaması politikasında (politika dokümanlarında açıklandığı gibi) yeni bir mesaj türü değişkeni oluşturabilir ve kullanabilirsiniz.
Politikayı düzeltmek için <Request>
öğesini mesaj türünde mevcut veya yeni bir değişken belirtecek şekilde değiştirmeniz gerekir. Örneğin, İleti Atama politikasında ayarlanan GeocodingRequest
değişkeni mesaj türüne sahiptir ve Hizmet Açıklaması politikasında sorunsuz bir şekilde çalışır. Örneğin:
<?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
Hata kodu
steps.servicecallout.RequestVariableNotRequestMessageType
Hata yanıtı gövdesi
{ "fault": { "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Request Message", "detail": { "errorcode": "steps.servicecallout.RequestVariableNotRequestMessageType" } } }
Neden
Bu hata, Hizmet Çağrı Politikası'nın <Request>
öğesinde belirtilen değişken istek mesajı türünde değilse ortaya çıkar. Değişken bir yanıt mesajı türü, dize veya başka bir türdeyse bu hatayı görürsünüz.
İleti türü değişkenleri, HTTP isteklerinin ve yanıtlarının tamamını temsil eder. Yerleşik Edge akış değişkenleri request
, response
ve message
mesaj türündedir. Mesaj değişkenleri hakkında daha fazla bilgi edinmek için Değişkenler referansı başlıklı makaleyi inceleyin.
Teşhis
Hatanın oluştuğu Hizmet Çağrısı politikasını ve türü yanlış olan değişkenin adını tanımlayın. Bu öğelerin ikisini de hata yanıtının
faultstring
öğesinde bulabilirsiniz. Örneğin, aşağıdakifaultstring
politikasında politika adıExecuteGeocodingRequest
, değişken isevar_response
şeklindedir:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"
Başarısız Hizmet Çağrısı Politikası XML'inde,
<Request>
öğesinde ayarlanan değişken adının, hata dizesinde tanımlanan değişken adıyla (yukarıdaki 1. adım) eşleştiğini doğrulayın. Örneğin aşağıdaki politika,faultstring
ile eşleşenvar_response
adlı bir istek değişkenini belirtir:<?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>
Değişkenin istek mesajı türünde olup olmadığını belirleyin:
- Değişkenin ilk olarak tanımlandığı API Proxy paketi içinde kodu bulun.
- Çoğu durumda, sorun değişkeninin Hizmet Açıklaması politikasından önce yürütülen başka bir politikada oluşturulup doldurulduğunu görürsünüz. Örneğin, Mesaj Ata politikası, API proxy akışında değişkenler oluşturmak ve doldurmak için yaygın olarak kullanılır.
- Değişkenin tanımlandığı ve doldurulduğu politikayı belirledikten sonra, o değişkenin türünü aşağıdaki şekilde belirlemeniz gerekir:
type
özelliğinin değerini (varsa) kontrol edin.type
özelliği mevcut değilse değişkenin dize olduğu kabul edilir.
- Değişkenin türü istek mesajı türünde değilse hatanın nedeni budur. Sık kullanılan değişkenler ve türleri hakkında bilgi edinmek için Değişkenler referansı başlıklı makaleyi inceleyin.
Örneğin, Hizmet Açıklama Metni Politikası'nda referans verilen var_response
değişkeninin aşağıdaki Mesaj Ata politikasında oluşturulduğunu varsayalım. var_response
için response
türünün verildiğini unutmayın. Bu nedenle, var_response
değişkeninin türü yanıt mesajıdır.
<?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>
var_response
değişkeninin, Hizmet Açıklama Metni Politikası'nın <Request>
öğesinde kullanıldığını unutmayın.
<?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>
var_response
, istek mesajı türünde (tür, yanıt mesajı) olmadığından şu hata kodunu alırsınız: steps.servicecallout.RequestVariableNotRequestMessageType
.
Çözünürlük
Başarısız Hizmet Açıklaması politikasındaki <Request>
öğesinde ayarlanan değişkenin, mevcut bir istek mesajı türü değişkeni olduğundan emin olun. Alternatif olarak, doğrudan Hizmet Açıklaması politikasında (politika dokümanlarında açıklandığı gibi) yeni bir istek mesajı türü değişkeni oluşturabilir ve kullanabilirsiniz.
Politikayı düzeltmek için <Request>
öğesini değiştirerek istek mesajı türünde mevcut veya yeni bir değişken belirtmeniz gerekir. Bu değişken, Hizmet Çağrı Politikası'nda çalışır. Örneğin:
<?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
Hata kodu
steps.servicecallout.ExecutionFailed
Hata yanıtı gövdesi
{ "fault": { "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: Host not reachable", "detail": { "errorcode": "steps.servicecallout.ExecutionFailed" } } }
veya
{ "fault": { "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: ResponseCode [http_code] is treated as error", "detail": { "errorcode": "steps.servicecallout.ExecutionFailed" } } }
Olası nedenler
Bu hatanın olası nedenleri şunlardır:
Neden | Açıklama |
Geçersiz veya bozuk URL | Hizmet Çağrısı politikasındaki hedef URL bozuk veya geçersiz ya da erişilemez bir ana makine adına sahip. |
Arka uç sunucusu hatası | Arka uç sunucusu 4XX veya 5XX hata yanıtı döndürüyor. |
Nedeni: Geçersiz veya yanlış biçimlendirilmiş URL
Hizmet Çağrısı politikasındaki hedef URL bozuk veya geçersiz ya da erişilemez bir ana makine adına sahip.
Teşhis
Hataya neden olan Hizmet Açıklaması politikasını belirleyin. Politika adı, hata yanıtının
faultstring
öğesinde görünür. Örneğin, aşağıdakifaultstring
öğesinde başarısız olan Hizmet Açıklama Metni Politikası'nın adıExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]"
Başarısız hizmet açıklama metni politikasında
<URL>
öğesini inceleyin. Alan adı bozuksa veya geçersiz ya da erişilemez bir ana makine adına sahipse bu hatanın nedeni budur. Örneğin, aşağıdaki Hizmet Açıklama Metni Politikası geçersiz bir<URL>
belirtiyor:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="GeocodingRequest"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://</URL> </HTTPTargetConnection> </ServiceCallout>
<URL>
öğesi yalnızcahttp://
protokolüne sahip, ancak geçerli bir ana makine adına sahip değil; bu nedenle Hizmet Çağrısı politikası şu hatayla başarısız oluyor:Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable
.
Çözünürlük
Başarısız Hizmet Açıklama Metni Politikası'ndaki <URL>
öğesinde, erişilebilir ana makine adına sahip geçerli bir URL bulunduğundan emin olun.
Yukarıda gösterilen Hizmet Açıklama Metni politikasını düzeltmek için <URL>
öğesini geçerli bir URL belirtecek şekilde değiştirebilirsiniz:
<?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>
Neden: Arka uç sunucusu hatası
Arka uç sunucusu 4XX veya 5XX hata yanıtı döndürüyor.
Teşhis
Hataya neden olan Hizmet Çağrısı politikasını belirleyin. Politika adı, hata yanıtının
faultstring
öğesinde görünür. Örneğin, aşağıdakifaultstring
'te başarısız Hizmet Açıklaması politikasının adıExecuteGeocodingRequest
'dur."faultstring": "ServiceCallout[ExecuteGeocodingRequest]
Hata yanıtı gövdesindeki
faultstring
bölümünü inceleyin veReason
içinde listelenen 4XX veya 5XX yanıt kodları olup olmadığını kontrol edin. Örneğin, aşağıdaki hata dizesi, arka uç sunucusundan bir yanıt kodu 502 döndürüldüğünü açıkça belirtir:"faultstring": "Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: ResponseCode 502 is treated as error"
Çözünürlük
Hata yanıt kodunu belirledikten sonra bu sorunu, herhangi bir 4XX veya 5XX hatasında olduğu gibi giderebilirsiniz. 4XX veya 5XX hatalarını gidermeye ve bu hataları gidermeye ilişkin talimatlar için Çalışma zamanı hatası (4XX/5XX) başucu kitaplarına bakın.