Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. 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, İleti Atama Politikası'nda belirtilen değişken aşağıdakilerden biriyse ortaya çıkar:
- Kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözülemiyor (tanımlanmamış)
Örneğin, bu hata, istek akışında Mesaj Atama politikası yürütülüyorsa ancak <Copy>
öğesindeki source
özelliği, response
veya error
değişkenine ya da istek akışında bulunmayan başka bir özelleştirilebilen değişkene ayarlanmışsa ortaya çıkar.
Teşhis
Hatanın oluştuğu Mesaj Atama Politikası'nı ve mevcut olmayan değişkenin adını belirleyin. Bu öğelerin ikisini de hata yanıtının
faultstring
öğesinde bulabilirsiniz.Örneğin, aşağıdaki
faultstring
politikasında politika adıgoogleBook
, değişken isevar
şeklindedir:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
Başarısız olan İleti Politikası Atama XML'sinde, kullanılan değişkenin 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 kaynak özelliğini,faultstring
öğ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ülmekte olduğu akışta tanımlı olup olmadığını ve kullanılabilir olup olmadığını belirleyin.
Değişken şunlardan biriyse:
- Kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözülemiyor (tanımlanmamış)
hatanın nedeni budur.
Örnek olarak, yukarıda gösterilen İleti Ata politikasının istek akışında yürütüldüğünü varsayalım.
var
değişkeninin, istek akışında Mesaj Ata ilkesinden önce yürütülen politikalardan herhangi birinde tanımlanıp tanımlanmadığını kontrol edin. Değişken tanımlanmamışsa hata kodunu alırsınız:steps.assignmessage.UnresolvedVariable
Çözünürlük
Politikada başvurulan değişkenin mevcut olduğundan ve İleti Ata politikasının yürütülmekte olduğu belirli akışta kullanılabilir olduğundan emin olun.
Yukarıda gösterilen örnek politikayı düzeltmek için <Copy>
öğesindeki kaynak özelliği, istek değişkeni veya istek akışında var olan mesaj türündeki başka bir özelleştirilebilen 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 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ı başlıklı makaleyi inceleyin.
Teşhis
Hatanın oluştuğu Mesaj 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
politikasında politika adıGenerateGeocodingRequest
, değişken isePostalCode
şeklindedir:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
Başarısız olan Mesaj Politikası Atama XML'sinde,
<Copy>
öğ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, kaynak özelliğiniPostalCode
adlı bir değişkene ayarlar. Bu değişken,faultstring
ile 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ünde olup olmadığını belirleyin:
- Değişkenin ilk olarak tanımlandığı API Proxy paketi içinde kodu bulun.
- Değişkenin tanımlandığı ve doldurulduğu politikayı belirledikten sonra, o değişkenin türünü aşağıdaki şekilde belirlemeniz gerekir:
- Varsa tür özelliğinin değerini kontrol edin.
- Tür özelliği yoksa değişken bir dize olarak kabul edilir.
- Değişkenin türü ileti olmayan (örneğin, bir dize) ise hatanın nedeni budur. 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>
öğesinderequest.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.Şimdi, PostalCode değişkeninin İleti Ata politikasının
<Copy>
öğesinde kullanıldığını unutmayın:<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
PostalCode, mesaj türünde olmadığından (bu örnekte bir dizedir) hata kodunu alırsınız:
steps.assignmessage.VariableOfNonMsgType
Çözünürlük
Başarısız olan "Mesaj Ata" 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, Mesaj Ata politikasının istek akışında yürütülmesi gerekiyorsa request
mesaj türü değişkenini veya mesaj türündeki başka bir özelleştirilebilen 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>