Mesaj politikası dağıtım hatasıyla ilgili sorunları giderme

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

InvalidIndex

Hata mesajı

API proxy'sinin Edge kullanıcı arayüzü veya Edge Management API aracılığıyla dağıtılması şu hata mesajıyla başarısız olur:

Error in deployment for environment [environment]
The revision is deployed, but traffic cannot flow.
AssignMessage[policy_name]: index must be greater than zero in [attribute].[index]

Örnek hata mesajı

Error in deployment for environment test.
The revision is deployed, but traffic cannot flow.
AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0

Örnek ekran görüntüsü

Neden

Mesaj Ata Politikası'nın <Copy> ve/veya <Remove> öğelerinde belirtilen dizin 0 veya negatif bir sayıysa API Proxy'si dağıtımı başarısız olur.

Örneğin, aynı ada sahip birden fazla sorgu parametresi iletiyorsanız Edge'de bunlara dizine eklenmiş akış değişkenleri olarak erişebilirsiniz. 3 öğrencinin kimliklerini sorgu parametresi olarak geçirmek istediğinizi varsayalım. Bunu aşağıdaki şekilde yapabilirsiniz:

https://myorg-test.apigee.net/v1/basepath?school_name=NPS&id=1&id=2&id=3

Ardından, bu sorgu parametrelerine Mesaj Ata politikasında aşağıdaki şekilde 0, 1 ve 2 dizin numaralarıyla erişmeye çalıştığınızı varsayalım:

id.0
id.1 and
id.2

Bu durumda, dizinin 1 ile başlaması gerektiğinden proxy dağıtımı başarısız olur. Bu, "id=1" ilk sorgu parametresine "id.1" olarak erişebileceğiniz anlamına gelir. İkinci sorgu parametresi "id=2"ye erişmek için dizin 2'yi (yani "id.2") kullanmanız gerekir. Benzer şekilde, "id=3" üçüncü sorgu parametresine erişmek için "id.3"ü kullanabilirsiniz.

Buradan daha fazla bilgi edinebilirsiniz.

Teşhis

  1. Hatanın oluştuğu Mesaj Atama politikasını, özelliğin adını ve geçersiz dizini belirleyin. Bu öğelerin tümünü hata mesajında bulabilirsiniz. Örneğin, aşağıdaki hatada politika adı GeneratingGeocodingRequest, özelliğin adı id, dizin ise 0 şeklindedir:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. Başarısız İleti Atama Politikası XML'inde kullanılan özellik adı ve dizinin, hata mesajında belirtilen özellik adı ve dizinle eşleştiğini doğrulayın (yukarıdaki 1. adım). Örneğin, aşağıdaki politikada id ve dizin özellikleri 0 olarak belirtilir. Bu durum, hata mesajındaki metinle eşleşir:

    <AssignMessage name="GenerateStudentsRequest">
      <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
      <Copy source="request">
          <QueryParams>
              <QueryParam name="school_name"/>
              <QueryParam name="id.0"/>
              <QueryParam name="id.1"/>
              <QueryParam name="id.2"/>
          </QueryParams>
      </Copy>
    </AssignMessage>
    
  3. Belirtilen dizin 0 veya negatif sayıysa hatanın nedeni budur.

    Yukarıda gösterilen İleti Ata politikası örneğinde, dizin 0'ı kullanarak "id" sorgu parametresinin ilk değerine erişmeye çalışıyorsunuz. Bu nedenle, API Proxy'sinin dağıtımı şu hatayı vererek başarısız olur:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    

Çözünürlük

İleti Atama bölümünde birden çok üstbilgiye, sorgu parametresine veya aynı adı paylaşan diğer parametrelere eriştiğinizde dizinin her zaman sıfırdan büyük olduğundan emin olun. Örneğin:

<AssignMessage name="GenerateStudentsRequest">
    <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
    <Copy source="request">
        <QueryParams>
            <QueryParam name="school_name"/>
            <QueryParam name="id.1"/>
            <QueryParam name="id.2"/>
            <QueryParam name="id.3"/>
        </QueryParams>
    </Copy>
</AssignMessage>

InvalidVariableName

Hata mesajı

API proxy'sinin Edge kullanıcı arayüzü veya Edge Management API aracılığıyla dağıtılması şu hata mesajıyla başarısız olur:

Error Saving Revision [revision_number]
The revision is deployed, but traffic cannot flow. AssignMessage schema validation failed: invalid variable name - null - in assign variable.

Örnek hata mesajı

Error Saving Revision 3
AssignMessage schema validation failed: invalid variable name - null - in assign variable.

Örnek ekran görüntüsü

Neden

<Name> alt öğesi boşsa veya <AssignVariable> öğesinde belirtilmemişse değer atanacak geçerli bir değişken adı olmadığından API proxy'sinin dağıtımı başarısız olur. Geçerli bir değişken adı gereklidir.

Teşhis

Hatanın oluştuğu API Proxy'sinde bulunan tüm Mesaj Atama politikalarını inceleyin. <Name> alt öğesinin boş olduğu veya <AssignVariable> öğesinde belirtilmediği bir Mesaj Ata politikası varsa hatanın nedeni budur.

1. Örnek: Aşağıdaki Mesaj Ata politikasında tanımlı <Name> öğesi yok.

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
    <AssignVariable>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

2. Örnek: Aşağıdaki Mesaj Ata politikasında boş bir <Name> öğesi var.

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name></Name>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

Çözünürlük

Mesaj Ata Politikası'nın <AssignVariable> öğesinde <Name> alt öğesinin her zaman belirtildiğinden ve boş olmadığından emin olun. Örneğin:

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
        <AssignVariable>
        <Name>appSecret</Name>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>