Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. 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, Service Callout politikasının <Request> öğesinde belirtilen bir değişkenin türü message değilse oluşur. Değişken bir dize veya mesaj türü olmayan başka bir türse 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 ileti türündedir. Mesaj değişkenleri hakkında daha fazla bilgi edinmek için Değişkenler referansı bölümüne bakın.
Teşhis
Hatanın oluştuğu hizmet açıklama metni politikasını ve türü yanlış olan değişkenin adını belirleyin. Bu öğelerin ikisini de hata yanıtının
faultstringöğesinde bulabilirsiniz. Örneğin, aşağıdakifaultstringiçinde politika adıExecuteGeocodingRequest, değişken isePostalCode'dir:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"Başarısız olan hizmet çağrısı politikası XML'sinde,
<Request>öğesinde ayarlanan değişkenin 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,faultstringiçindekiyle eşleşenPostalCodeadlı bir istek değişkeni 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 ileti türünde olup olmadığını belirleyin:
- API proxy paketinde, değişkenin ilk tanımlandığı kodu bulun.
- Çoğu durumda, sorun değişkeninin Hizmet Çağrısı politikasından önce yürütülen başka bir politikada oluşturulup doldurulduğunu görürsünüz. Örneğin, Assign Message politikası genellikle bir API proxy akışında değişken oluşturmak ve değişkenleri doldurmak için kullanılır.
- Değişkenin ilk olarak tanımlandığı ve doldurulduğu politikayı belirledikten sonra bu değişkenin türünü aşağıdaki gibi belirlemeniz gerekir:
typeözelliğinin değerini kontrol edin (varsa).typeözelliği yoksa değişkenin dize olduğu kabul edilir.
- Değişkenin türü ileti değilse (ör. dize) hatanın nedeni budur. Sık kullanılan değişkenler ve türleri hakkında Değişkenler referansı başlıklı makaleden bilgi edinebilirsiniz.
Örneğin, Hizmet Çağrısı politikasında referans verilen PostalCode değişkeninin aşağıdaki Mesaj Atama politikasında oluşturulduğunu varsayalım. PostalCode öğesine, akış değişkeni request.queryparam.postalcode değerinin atandığını unutmayın. Değişken atamasında type özelliği bulunmadığı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çıklaması politikasının <Request> öğesinde kullanıldığını hatırlayı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, ileti türünde olmadığı için (bu örnekte bir dizedir) steps.servicecallout.RequestVariableNotMessageType hata kodunu alırsınız.
Çözünürlük
Başarısız olan Service Callout politikasındaki <Request> öğesinde ayarlanan değişkenin, mevcut bir message türü akış değişkeni olduğundan emin olun. Alternatif olarak, doğrudan Service Callout politikasında yeni bir mesaj türü değişkeni oluşturabilir (politika belgelerinde açıklandığı gibi) ve bunu kullanabilirsiniz.
Politikayı düzeltmek için <Request> öğesini, mesaj türünde olan mevcut veya yeni bir değişkeni belirtecek şekilde değiştirmeniz gerekir. Örneğin, Assign Message politikasında ayarlanan GeocodingRequest değişkeni ileti türündedir ve Service Callout 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, Service Callout politikasının <Request> öğesinde belirtilen bir değişkenin türü request message değilse oluşur. Değişken bir yanıt mesajı türü, dize veya başka bir türse bu hatayı görürsünüz.
Mesaj türü değişkenler, HTTP isteklerinin ve yanıtlarının tamamını temsil eder. Yerleşik Edge akışı değişkenleri request, response ve message ileti türündedir. Mesaj değişkenleri hakkında daha fazla bilgi edinmek için Değişkenler referansı bölümüne bakın.
Teşhis
Hatanın oluştuğu hizmet açıklama metni politikasını ve türü yanlış olan değişkenin adını belirleyin. Bu öğelerin ikisini de hata yanıtının
faultstringöğesinde bulabilirsiniz. Örneğin, aşağıdakifaultstringiçinde politika adıExecuteGeocodingRequest, değişken isevar_response'dir:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"Başarısız olan hizmet çağrısı politikası XML'sinde,
<Request>öğesinde ayarlanan değişkenin 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,faultstringiçindekiyle eşleşenvar_responseadlı bir istek değişkeni 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:
- API proxy paketinde, değişkenin ilk tanımlandığı kodu bulun.
- Çoğu durumda, sorun değişkeninin Hizmet Çağrısı politikasından önce yürütülen başka bir politikada oluşturulup doldurulduğunu görürsünüz. Örneğin, Assign Message politikası genellikle bir API proxy akışında değişken oluşturmak ve değişkenleri doldurmak için kullanılır.
- Değişkenin ilk olarak tanımlandığı ve doldurulduğu politikayı belirledikten sonra bu değişkenin türünü aşağıdaki gibi belirlemeniz gerekir:
typeözelliğinin değerini kontrol edin (varsa).typeözelliği yoksa 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 Değişkenler referansı başlıklı makaleden bilgi edinebilirsiniz.
Örneğin, Hizmet Çağrısı politikasında referans verilen var_response değişkeninin aşağıdaki Mesaj Atama politikasında oluşturulduğunu varsayalım. var_response öğesine 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çıklaması politikasının <Request> öğesinde kullanıldığını hatırlatırız.
<?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 olmadığı (yanıt mesajı türünde olduğu) için steps.servicecallout.RequestVariableNotRequestMessageType hata kodunu alırsınız.
Çözünürlük
Başarısız olan hizmet çağrısı politikasındaki <Request> öğesinde ayarlanan değişkenin, mevcut bir istek mesajı türü değişken olduğundan emin olun. Alternatif olarak, doğrudan hizmet çağrısı politikasında yeni bir istek mesajı türü değişken oluşturabilir (politika belgelerinde açıklandığı gibi) ve bunu kullanabilirsiniz.
Politikayı düzeltmek için <Request> öğesini, istek mesajı türünde olan mevcut veya yeni bir değişkeni belirtecek şekilde değiştirmeniz gerekir. Bu değişiklik, hizmet çağrısı 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 yanlış biçimlendirilmiş URL | Hizmet çağrısı politikasındaki hedef URL yanlış biçimlendirilmiş veya geçersiz ya da ulaşılamayan bir ana makine adına sahip. |
| Arka uç sunucu hatası | Arka uç sunucusu 4XX veya 5XX hata yanıtı döndürüyor. |
Neden: Geçersiz veya yanlış biçimlendirilmiş URL
Hizmet çağrısı politikasındaki hedef URL yanlış biçimlendirilmiş veya geçersiz ya da ulaşılamayan bir ana makine adına sahip.
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ğıdakifaultstringiçinde başarısız olan hizmet çağrısı politikasının adıExecuteGeocodingRequest'dır."faultstring": "ServiceCallout[ExecuteGeocodingRequest]"Başarısız olan hizmet açıklama metni politikasında
<URL>öğesini inceleyin. URL yanlış biçimlendirilmişse veya geçersiz ya da ulaşılamayan bir ana makine adı içeriyorsa 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ıExecution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachablehatasıyla başarısız oluyor.
Çözünürlük
Başarısız olan hizmet çağrısı politikasındaki <URL> öğesinin, ulaşılabilir bir ana makine adına sahip geçerli bir URL içerdiğinden emin olun.
Yukarıda gösterilen hizmet açıklama metni politikasını düzeltmek için <URL> öğesini değiştirerek geçerli bir URL belirtebilirsiniz:
<?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ğıdakifaultstringiçinde başarısız olan hizmet çağrısı politikasının adıExecuteGeocodingRequest'dır."faultstring": "ServiceCallout[ExecuteGeocodingRequest]Hata yanıtı gövdesindeki
faultstringöğesini inceleyin veReasoniçinde 4XX veya 5XX yanıt kodu olup olmadığını kontrol edin. Örneğin, aşağıdaki faultstring, arka uç sunucusundan 502 yanıt kodunun 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, diğer 4XX veya 5XX hatalarında olduğu gibi giderebilirsiniz. 4XX veya 5XX hatalarını giderme ve çözme talimatları için Çalışma zamanı hatası (4XX/5XX) kılavuzlarına bakın.