Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. info
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, Mesaj Atama Politikası'nda belirtilen bir değişken aşağıdaki durumlarda ortaya çıkar:
- Kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözülemez (tanımlanmamıştır)
Örneğin, bu hata, Mesaj Atama politikası istek akışında yürütülür 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 oluşur.
Teşhis
Hatanın oluştuğu İleti Atama Politikası'nı 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
faultstring
'te politika adıgoogleBook
ve değişkenvar
'dir:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
Başarısız İleti Atama Politikası XML'inde, kullanılan 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
<Copy>
öğesindeki source özelliğinifaultstring
öğesindekiyle eşleşenvar
adlı 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, İleti Ata politikasının yürütüldüğü akışta tanımlanıp tanımlanmadığını ve kullanılıp kullanılamayacağını belirleyin.
Değişken şu durumlarda:
- Kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözülemiyor (tanımlanmamış)
hatanın nedeni budur.
Örneğin, yukarıda gösterilen Mesaj Atama politikasının istek akışında çalıştığını varsayalım.
var
değişkeninin, istek akışında İleti Ata politikasından önce yürütülen politikalardan herhangi birinde tanımlanıp tanımlanmadığını kontrol edin. Değişken tanımlanmamışsa aşağıdaki hata kodunu alırsınız:steps.assignmessage.UnresolvedVariable
Çözünürlük
Politikada atıfta bulunulan değişkenin mevcut olduğundan ve İleti Ata 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 source özelliğini istek değişkeni veya istek akışında bulunan message 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üne ait olmayan bir değişkene ayarlanırsa ortaya çıkar.
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
Hatanın oluştuğu İleti Atama 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ğıdakifaultstring
'te politika adıGenerateGeocodingRequest
ve değişkenPostalCode
'dir:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
Başarısız İleti Atama Politikası XML'inde,
<Copy>
öğ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 politikadaPostalCode
adlı bir değişkene kaynak özelliği ayarlanır. Bu değişken,faultstring
içinde bulunanla eşleşir:<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 mesaj türüne ait olup olmadığını belirleyin:
- Değişkenin ilk tanımlandığı API Proxy paketindeki 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.
- type özelliği yoksa değişkenin dize olduğu kabul edilir.
- Değişkenin türü ileti değilse (ör. dize) hata bununla ilgilidir. Değişkenler referansı bölümünde, sık kullanılan değişkenler ve türleri hakkında bilgi edinebilirsiniz.
Örneğin, yukarıdaki XML'deki PostalCode değişkenine bakın.
<AssignVariable>
öğesindekirequest.queryparam.postalcode
akış değişkeninin değeri atanır. Değişken atamasında tür özelliği olmadığından bu değer bir dizedir.PostalCode değişkeninin, İleti Atama politikasının
<Copy>
öğesinde kullanıldığını hatırlayın:<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
PostalCode mesaj türüne ait olmadığından (bu örnekte dizedir) aşağıdaki hata kodunu alırsınız:
steps.assignmessage.VariableOfNonMsgType
Çözünürlük
Başarısız Mesaj Atama politikasındaki <Copy>
öğesindeki source
özelliğinin, mevcut bir mesaj türü akış değişkenine ayarlandığından emin olun.
Politikayı düzeltmek için <Copy>
öğesindeki source
özelliğini değiştirerek mesaj türünde bir değişken belirtebilirsiniz. Örneğin, İleti Ata politikasının istek akışında çalıştırılması gerekiyorsa request
ileti türü değişkenini veya ileti türüne sahip 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>