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

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 với 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 mẫu

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 Chỉ định tin nhắn là 0 hoặc là số âm, thì không thể triển khai Proxy API.

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 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 các tham số truy vấn này với các số chỉ mục 0, 1 và 2 trong chính sách Chỉ định thư như sau:

id.0
id.1 and
id.2

Trong trường hợp này, việc triển khai proxy 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 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ể tìm thêm thông tin tại đây.

Chẩn đoán

  1. Xác định chính sách Chỉ định tin nhắn 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ả những 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 dùng trong XML không thành công của Chính sách chỉ định thông báo 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ỉ số đượ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 tin nhắn được trình bày ở 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 chỉ mục 0. Do đó, không thể triển khai Proxy API với lỗi:

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

Độ phân giải

Trong Chỉ định thư, 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

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 với 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 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 vì 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. Nếu có bất kỳ chính sách Chỉ định thông báo nào mà trong đó 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ưa xác định phần tử <Name> trong chính sách Chỉ định thông báo sau đây.

<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 Chỉ định tin nhắn 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 để trống trong phần tử <AssignVariable> của chính sách Chỉ định 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>