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, İleti Atayın politikasında belirtilen bir 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ımlanmadı)

Örneğin, Mesaj Ata politikası istek akışında uygulanır 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 ayarlanırsa bu hata oluşur.

Teşhis

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

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. Başarısız olan "İleti Politikası" XML'inde, kullanılan 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 <Copy> öğesindeki kaynak özelliğini var adlı bir değişkene ayarlar ve bu değişken faultstring öğesinin içindekilerle eşleşir:

    <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, Mesaj Ata politikasının yürütülmekte olduğu akışta tanımlı ve kullanılabilir olup olmadığını belirleyin.

  4. Değişken şunlardan biriyse:

    1. kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
    2. çözülemiyor (tanımlanmadı)

    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. var değişkeninin, istek akışında Mesaj 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 şu hata kodunu alırsınız:

    steps.assignmessage.UnresolvedVariable
    

Çözünürlük

Politikada başvurulan değişkenin, Mesaj Ata politikasının yürütülmekte olduğu belirli akışta mevcut ve 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 bulunan mesaj türünde 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

  1. Hatanın oluştuğu İleti Atama Politikası'nı ve türü yanlış olan değişkenin adını tanımlayın. Bu öğelerin ikisini de hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring politikasında 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 Mesaj Politikası Atama XML dosyasında, <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 bir kaynak özelliğini, faultstring ile 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 mesaj türünde olup olmadığını belirleyin:

    1. Değişkenin ilk olarak tanımlandığı API Proxy paketinde kodu bulun.
    2. Öncelikle değişkenin tanımlandığı ve doldurulduğu politikayı belirledikten sonra, bu değişkenin türünü aşağıdaki şekilde belirlemeniz gerekir:
      1. Tür özelliğinin değerini kontrol edin (varsa).
      2. Tür özelliği mevcut değilse değişken bir dize olarak kabul edilir.
    3. Değişkenin türü "mesaj" değilse (dize gibi) hatanın nedeni budur. Sık kullanılan değişkenler ve türleri hakkında daha fazla bilgiyi Değişkenler referansında bulabilirsiniz.

    Örneğin, yukarıdaki XML'de yer alan PostalCode değişkenine bakın. Bu değere <AssignVariable> öğesindeki request.queryparam.postalcode akış değişkeninin değeri atanır. Değişken atamasında herhangi bir tür özelliği bulunmadığından bu değer bir dizedir.

    Şimdi, PostalCode değişkeninin Mesaj 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 (bu örnekte bir dizedir) olmadığından şu hata kodunu alırsınız:

    steps.assignmessage.VariableOfNonMsgType
    

Çözünürlük

Başarısız Mesaj Atama politikasındaki <Copy> öğesinde bulunan 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 belirleyebilirsiniz. Ö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ünde 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>