Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
UnresolvedVariable
Hata kodu
steps.assignmessage.UnresolvedVariable
Hata yanıtı gövdesi
{ "fault": { "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.assignmessage.UnresolvedVariable" } } }
Neden
Bu hata, Assign Message politikası içinde belirtilen bir değişken şu durumlarda oluşur:
- kapsam dışı (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözümlenemiyor (tanımlanmamış)
Örneğin, İleti Atama politikası istek akışında yürütülürse ancak <Copy> öğesindeki source özelliği response veya error değişkenine ya da istek akışında bulunmayan başka bir özel değişkene ayarlanırsa bu hata oluşur.
Teşhis
Hatayı içeren Assign Message Policy'yi ve kullanılamayan değişkenin adını belirleyin. Bu öğelerin ikisini de hata yanıtının
faultstringöğesinde bulabilirsiniz.Örneğin, aşağıdaki
faultstringiçinde politika adıgoogleBook, değişken isevar'dir:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"Başarısız olan Assign Message Policy XML'de (Mesaj Politikası XML'si Atama), kullanılan değişkenin adının hata dizesinde (yukarıdaki 1. adım) tanımlanan değişken adıyla eşleştiğini doğrulayın. Örneğin, aşağıdaki politika
<Copy>öğesindeki kaynak özelliğini,faultstringöğesindekiyle eşleşenvaradlı bir değişkene ayarlar:<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1"> <DisplayName>googleBook</DisplayName> <Properties /> <Copy source="var"> <Headers> <Header name="user-agent" /> </Headers> </Copy> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo> </AssignMessage>Değişkenin, Assign Message politikasının yürütüldüğü akışta tanımlanıp tanımlanmadığını ve kullanılabilir olup olmadığını belirleyin.
Değişken şu durumlarda:
- kapsam dışı (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözümlenemiyor (tanımlanmamış)
Bu durumda hatanın nedeni budur.
Örneğin, yukarıda gösterilen Mesajı Ata politikasının istek akışında yürütüldüğünü varsayalım. İstek akışında Assign Message politikasından önce yürütülen politikalardan herhangi birinde
vardeğişkeninin tanımlanıp tanımlanmadığını kontrol edin. Değişken tanımlanmamışsa şu hata kodunu alırsınız:steps.assignmessage.UnresolvedVariable
Çözünürlük
Politikada referans verilen değişkenin mevcut olduğundan ve Assign Message politikasının yürütüldüğü belirli akışta kullanılabildiğinden emin olun.
Yukarıda gösterilen örnek politikayı düzeltmek için <Copy> öğesindeki kaynak özelliğini istek değişkeni veya istek akışında bulunan ileti türündeki başka bir özel değişken olacak şekilde değiştirebilirsiniz.
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
<DisplayName>googleBook</DisplayName>
<Properties />
<Copy source="request">
<Headers>
<Header name="user-agent" />
</Headers>
</Copy>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>
VariableOfNonMsgType
Hata kodu
steps.assignmessage.VariableOfNonMsgType
Hata yanıtı gövdesi
{ "fault": { "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message", "detail": { "errorcode": "steps.assignmessage.VariableOfNonMsgType" } } }
Neden
Bu hata, <Copy> öğesindeki source özelliği message türünde olmayan bir değişkene ayarlanırsa oluşur.
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
Hatayı içeren Mesaj 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ıGenerateGeocodingRequest, değişken isePostalCode'dir:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"Başarısız olan Assign Message Policy XML'de,
<Copy>öğesinde ayarlanan değişken adının, hata dizesinde (yukarıdaki 1. adım) tanımlanan değişken adıyla eşleştiğini doğrulayın. Örneğin, aşağıdaki politika, kaynak özelliğinifaultstringiçindekiyle eşleşenPostalCodeadlı bir değişkene ayarlar:<AssignMessage name="GenerateGeocodingRequest"> <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo> <AssignVariable> <Name>PostalCode</Name> <Ref>request.queryparam.postalcode</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> <Copy source="PostalCode"> <QueryParams> <QueryParam name="q" /> </QueryParams> </Copy> </AssignMessage>Bu değişkenin ileti türünde olup olmadığını belirleyin:
- API Proxy paketinde değişkenin ilk tanımlandığı kodu bulun.
- 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:
- Tür özelliğinin değerini (varsa) kontrol edin.
- Tür özelliği yoksa değişkenin dize olduğu kabul edilir.
- Değişkenin türü mesaj dışıysa (ör. dize) hatanın nedeni budur. Yaygın değişkenler ve türleri hakkında bilgiyi Değişkenler referansı bölümünde bulabilirsiniz.
Örneğin, yukarıdaki XML'deki PostalCode değişkenine bakın.
<AssignVariable>öğesindekirequest.queryparam.postalcodeakış değişkeninin değeri atanır. Değişken atamasında tür özelliği bulunmadığından bu değer bir dizedir.Şimdi de PostalCode değişkeninin, Assign Message politikasının
<Copy>öğesinde kullanıldığını hatırlayın:<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>PostalCode mesaj türünde olmadığı için (bu örnekte bir dizedir) şu hata kodunu alırsınız:
steps.assignmessage.VariableOfNonMsgType
Çözünürlük
Başarısız olan İleti Atama politikasındaki <Copy> öğesindeki source özelliğinin, mevcut bir message türü akış değişkenine ayarlandığından emin olun.
Politikayı düzeltmek için source özelliğini <Copy> öğesinde değiştirerek mesaj türünde bir değişken belirtebilirsiniz. Örneğin, Assign Message (Mesaj Atama) politikasının istek akışında yürütülmesi gerekiyorsa request mesaj türü değişkenini veya mesaj türünde başka bir özel değişkeni kullanabilirsiniz.
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
<Copy source="request">
<QueryParams>
<QueryParam name="PostalCode" />
</QueryParams>
</Copy>
</AssignMessage>