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

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

  1. 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 ise var şeklindedir:

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. 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ş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ülmekte olduğu akışta tanımlı olup olmadığını 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ı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

  1. 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ğıdaki faultstring politikasında politika adı GenerateGeocodingRequest, değişken ise PostalCode şeklindedir:

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

    1. Değişkenin ilk olarak tanımlandığı API Proxy paketi içinde kodu bulun.
    2. Değişkenin tanımlandığı ve doldurulduğu politikayı belirledikten sonra, o değişkenin türünü aşağıdaki şekilde belirlemeniz gerekir:
      1. Varsa tür özelliğinin değerini kontrol edin.
      2. Tür özelliği yoksa değişken bir dize olarak kabul edilir.
    3. 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> öğesinde 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.

    Ş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>