Chỉ định khắc phục sự cố triển khai chính sách Tin nhắn

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
thông tin

InvalidIndex

Thông báo lỗi

Việc triển khai proxy API thông qua giao diện người dùng Edge hoặc API quản lý Edge không thành công và xuất hiện thông báo lỗi sau:

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]

Ví dụ về thông báo lỗi

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

Ảnh chụp màn hình ví dụ

Nguyên nhân

Nếu chỉ mục được chỉ định trong các phần tử <Copy> và/hoặc <Remove> của chính sách Gán thông báo là 0 hoặc một số âm, thì việc triển khai API Proxy sẽ không thành công.

Ví dụ: nếu truyền nhiều tham số truy vấn có cùng tên, bạn có thể truy cập vào các tham số đó trong Edge dưới dạng các biến luồng được lập chỉ mục. Giả sử bạn muốn truyền mã nhận dạng của 3 học viên dưới dạng tham số truy vấn, thì bạn có thể làm như sau:

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

Sau đó, giả sử bạn tìm cách truy cập vào các tham số truy vấn này bằng số chỉ mục 0, 1 và 2 trong chính sách Chỉ định thông báo như sau:

id.0
id.1 and
id.2

Trong trường hợp này, việc triển khai proxy sẽ không thành công vì chỉ mục phải bắt đầu bằng 1. Điều này có nghĩa là bạn có thể truy cập vào tham số truy vấn đầu tiên "id=1" dưới dạng "id.1". Để truy cập vào tham số truy vấn thứ hai "id=2", bạn cần sử dụng chỉ mục 2, tức là "id.2". Tương tự, để truy cập vào tham số truy vấn thứ ba "id=3", bạn có thể sử dụng "id.3".

Bạn có thể xem thêm thông tin tại đây.

Chẩn đoán

  1. Xác định chính sách Assign Message (Chỉ định thông báo) nơi xảy ra lỗi, tên của thuộc tính và chỉ mục không hợp lệ. Bạn có thể tìm thấy tất cả các mục này trong thông báo lỗi. Ví dụ: trong lỗi sau, tên chính sách là GeneratingGeocodingRequest, tên thuộc tính là id và chỉ mục là 0:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. Xác minh rằng tên thuộc tính và chỉ mục được dùng trong tệp XML của chính sách Assign Message (Chỉ định thông báo) bị lỗi khớp với tên thuộc tính và chỉ mục được xác định trong thông báo lỗi (bước 1 ở trên). Ví dụ: chính sách sau đây chỉ định thuộc tính id và chỉ mục là 0, khớp với nội dung trong thông báo lỗi:

    <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. Nếu chỉ mục được chỉ định là 0 hoặc số âm, thì đó là nguyên nhân gây ra lỗi.

    Trong ví dụ về chính sách Chỉ định thông báo ở trên, bạn đang cố gắng truy cập vào giá trị đầu tiên của tham số truy vấn "id" bằng cách sử dụng chỉ mục 0. Do đó, việc triển khai API Proxy không thành công với lỗi:

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

Độ phân giải

Trong Assign Message (Chỉ định thông báo), khi bạn truy cập vào nhiều tiêu đề, tham số truy vấn hoặc các tham số khác có cùng tên, hãy đảm bảo rằng chỉ mục luôn lớn hơn 0. Ví dụ:

<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

Thông báo lỗi

Việc triển khai proxy API thông qua giao diện người dùng Edge hoặc API quản lý Edge không thành công và xuất hiện thông báo lỗi sau:

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

Ví dụ về thông báo lỗi

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

Ảnh chụp màn hình ví dụ

Nguyên nhân

Nếu phần tử con <Name> trống hoặc không được chỉ định trong phần tử <AssignVariable>, thì quá trình triển khai proxy API sẽ không thành công vì không có tên biến hợp lệ để gán giá trị. Bạn phải có tên biến hợp lệ.

Chẩn đoán

Kiểm tra tất cả các chính sách Assign Message trong API Proxy cụ thể nơi xảy ra lỗi. Nếu có chính sách Assign Message (Chỉ định thông báo) nào mà phần tử con <Name> bị trống hoặc không được chỉ định trong phần tử <AssignVariable>, thì đó là nguyên nhân gây ra lỗi.

Ví dụ 1: Chính sách Assign Message (Chỉ định thông báo) sau đây không có phần tử <Name> nào được xác định.

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

Ví dụ 2: Chính sách Assign Message (Chỉ định thông báo) sau đây có một phần tử <Name> trống .

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

Độ phân giải

Đảm bảo rằng phần tử con <Name> luôn được chỉ định và không trống trong phần tử <AssignVariable> của chính sách Gán thông báo. Ví dụ:

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