Mesaj çalışma zamanı hatasıyla ilgili sorunları giderme

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

  1. 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 faultstring içinde politika adı googleBook, değişken ise var'dir:

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. 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şen var 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>
    
  3. 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.

  4. Değişken şu durumlarda:

    1. kapsam dışı (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
    2. çö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 var değ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

  1. 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ğıdaki faultstring içinde politika adı GenerateGeocodingRequest, değişken ise PostalCode'dir:

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. 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ğini faultstring içindekiyle eşleşen PostalCode adlı 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>
    
  3. Bu değişkenin ileti türünde olup olmadığını belirleyin:

    1. API Proxy paketinde değişkenin ilk tanımlandığı kodu bulun.
    2. 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:
      1. Tür özelliğinin değerini (varsa) kontrol edin.
      2. Tür özelliği yoksa değişkenin dize olduğu kabul edilir.
    3. 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> öğesindeki request.queryparam.postalcode akış 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>