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

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

  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'te politika adı googleBook ve değişken var'dir:

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. 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ğ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, İ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.

  4. Değişken şu durumlarda:

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

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

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. 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 politikada PostalCode 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>
    
  3. Bu değişkenin mesaj türüne ait olup olmadığını belirleyin:

    1. Değişkenin ilk tanımlandığı API Proxy paketindeki 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. type özelliği yoksa değişkenin dize olduğu kabul edilir.
    3. 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> öğesindeki request.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>