Hizmet Açıklama Metni çalışma zamanı hatasını giderme

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
info

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çıklaması Politikası'nın <Request> öğesinde belirtilen bir değişken message türü değilse ortaya çıkar. Değişken bir dize veya mesaj dışında 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 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

  1. Hatanın oluştuğu Hizmet Açıklaması 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ğıdaki faultstring'te politika adı ExecuteGeocodingRequest ve değişken PostalCode'dir:

    "faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"

  2. 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şen PostalCode 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>
    
  3. Bu değişkenin mesaj türüne ait olup olmadığını belirleyin:

    1. Değişkenin ilk olarak tanımlandığı API Proxy paketi içinde kodu bulun.
    2. Çoğu durumda, sorun değişkeninin oluşturulduğunu ve bu değişkenin Hizmet Çağrısı politikasından önce yürütülen başka bir politikada 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.
    3. 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 (varsa) kontrol edin.
      • type özelliği yoksa değişken bir dize olarak kabul edilir.
    4. Değişkenin türü ileti değilse (ör. dize) hata bununla ilgilidir. 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çıklaması politikasında atıfta bulunulan PostalCode değişkeninin aşağıdaki İleti Atama 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 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>

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, message türüne ait olmadığından (bu örnekte dizedir) steps.servicecallout.RequestVariableNotMessageType hata kodunu alırsınız.

Çözünürlük

Başarısız olan Hizmet Açıklama Metni 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çıklama Metni Politikası'nda yeni bir mesaj türü değişkeni oluşturup (politika belgelerinde açıklandığı gibi) kullanabilirsiniz.

Politikayı düzeltmek için <Request> öğesini, message türüne sahip 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çıklaması Politikası'nın <Request> öğesinde belirtilen bir 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.

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ı bölümüne bakın.

Teşhis

  1. Hatanın oluştuğu Hizmet Açıklaması 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ğıdaki faultstring'te politika adı ExecuteGeocodingRequest ve değişken var_response'dir:

    "faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"

  2. 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şen var_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>
    
  3. Değişkenin istek mesajı türüne ait olup olmadığını belirleyin:

    1. Değişkenin ilk tanımlandığı API Proxy paketindeki kodu bulun.
    2. Çoğu durumda, sorun değişkeninin oluşturulduğunu ve bu değişkenin Hizmet Çağrısı politikasından önce yürütülen başka bir politikada 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.
    3. 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 (varsa) kontrol edin.
      • type özelliği mevcut değilse değişkenin dize olduğu kabul edilir.
    4. Değişkenin türü istek mesajı türü 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çıklaması politikasında atıfta bulunulan var_response değişkeninin aşağıdaki İleti Atama 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çıklaması 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üne sahip olmadığından (türü yanıt mesajıdır) steps.servicecallout.RequestVariableNotRequestMessageType hata kodunu alırsınız.

Çözünürlük

Başarısız Hizmet Açıklama Metni Politikası'ndaki <Request> öğesinde ayarlanan değişkenin, mevcut istek mesajı türü değişken olduğundan emin olun. Alternatif olarak, doğrudan Hizmet Açıklama Metni Politikası'nda yeni bir istek mesajı türü değişkeni oluşturup (politika belgelerinde açıklandığı gibi) kullanabilirsiniz.

Politikayı düzeltmek için <Request> öğesini, istek mesajı türüne sahip mevcut veya yeni bir değişken belirtecek şekilde değiştirmeniz gerekir. Bu durumda, politika Hizmet Açıklaması 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çıklama metni politikasındaki hedef URL yanlış biçimlendirilmiş veya geçersiz ya da erişilemeyen bir ana makine adına sahip.
Arka uç sunucu hatası Arka uç sunucusu 4XX veya 5XX hatası yanıtı döndürür.

Nedeni: Geçersiz veya yanlış biçimlendirilmiş URL

Hizmet açıklama metni politikasındaki hedef URL yanlış biçimlendirilmiş veya geçersiz ya da erişilemeyen bir ana makine adına sahip.

Teşhis

  1. 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ğıdaki faultstring öğesinde başarısız Hizmet Açıklama Metni Politikası'nın adı ExecuteGeocodingRequest.

    "faultstring": "ServiceCallout[ExecuteGeocodingRequest]"

  2. Başarısız hizmet açıklama metni politikasında <URL> öğesini inceleyin. Hatalı biçimlendirilmişse veya geçersiz ya da erişilemeyen bir ana makine adı içeriyorsa bu hata meydana gelir. Örneğin, aşağıdaki Hizmet Açıklaması 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> öğesinde yalnızca http:// protokolü var ancak geçerli bir ana makine adı yok. Bu nedenle, Hizmet Açıklaması politikası Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable hatasıyla başarısız olur.

Çö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çıklaması 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>

Nedeni: Arka uç sunucusu hatası

Arka uç sunucusu 4XX veya 5XX hatası yanıtı döndürüyor.

Teşhis

  1. 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ğıdaki faultstring'te başarısız Hizmet Açıklaması politikasının adı ExecuteGeocodingRequest'dur.

    "faultstring": "ServiceCallout[ExecuteGeocodingRequest]

  2. Hata yanıtı gövdesinde faultstring öğesini inceleyin ve Reason içinde listelenen 4XX veya 5XX yanıt kodları olup olmadığını kontrol edin. Örneğin, aşağıdaki hata dizesi, arka uç sunucudan 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, herhangi bir 4XX veya 5XX hatasında olduğu gibi giderebilirsiniz. 4XX veya 5XX hatalarıyla ilgili sorunları giderme ve çözme talimatları için Çalışma zamanında hata (4XX/5XX) playbook'lerine bakın.