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.
Chuyển đến Tài liệu về Apigee X.
thông tin

InvalidIndex

Thông báo lỗi

Thông báo lỗi sau không triển khai được proxy API thông qua giao diện người dùng Edge hoặc API quản lý Edge:

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 mẫu

Nguyên nhân

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

Ví dụ: nếu chuyể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 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, bạn có thể thực hiện như sau:

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

Sau đó, giả sử bạn cố gắng 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 tham số truy vấn đầu tiên "id=1" dưới dạng "id.1". Để truy cập 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ự, bạn có thể sử dụng "id.3" để truy cập tham số truy vấn thứ ba "id=3".

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

Chẩn đoán

  1. Hãy xác định chính sách Gửi thông báo nơi xảy ra lỗi, tên 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 của 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 sử dụng trong XML của chính sách gán 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à lập 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 chính sách thông báo hiển thị ở trên, bạn đang cố 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 Proxy API không thành công kèm theo lỗi:

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

Độ phân giải

Trong 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

Thông báo lỗi sau không triển khai được proxy API thông qua giao diện người dùng Edge hoặc API quản lý Edge:

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 mẫu

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ì việc triển khai proxy API sẽ không thành công do không có tên biến hợp lệ để gán giá trị. Bạn phải nhập tên biến hợp lệ.

Chẩn đoán

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

Ví dụ 1: Chính sách gán thông báo sau đây chưa xác định phần tử <Name>.

<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 gán thông báo sau đây có 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 phần tử con <Name> luôn được chỉ định và không được để trống trong phần tử <AssignVariable> của chính sách Giao 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>