Apigee X 문서입니다.
Apigee Edge 문서 보기
InvalidIndex
오류 메시지
다음 오류 메시지와 함께 Apigee UI 또는 API를 통한 API 프록시의 배포가 실패합니다.
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]
오류 메시지 예
Error in deployment for environment test.
The revision is deployed, but traffic cannot flow.
HTTPModifier[GenerateStudentsRequest]: index must be greater than zero in id.0
원인
HTTPModifier 정책의 <Copy>
또는 <Remove>
요소에 지정된 색인이 0이거나 음수이면 API 프록시 배포가 실패합니다.
예를 들어 이름이 같은 쿼리 매개변수를 여러 개 전달하면 색인이 생성된 흐름 변수로 해당 매개변수에 액세스할 수 있습니다. 3명의 학생 ID를 쿼리 매개변수로 전달하려는 경우 다음과 같이 전달할 수 있습니다.
https://$EXTERNAL_IP/$PROXY_BASEPATH?school_name=NPS&id=1&id=2&id=3
그런 다음 다음과 같이 HTTPModifier 정책에서 색인 번호 0, 1, 2를 사용하여 이러한 쿼리 매개변수에 액세스하려 한다고 가정해 보겠습니다.
id.0
id.1 and
id.2
이 경우에는 색인이 1로 시작해야 하므로 프록시 배포가 실패합니다. 즉, 첫 번째 쿼리 매개변수인 'id=1'에 'id.1'로 액세스할 수 있습니다. 두 번째 쿼리 매개변수인 'id=2'에 액세스하려면 색인 2, 즉 'id.2'를 사용해야 합니다. 마찬가지로 세 번째 쿼리 매개변수인 'id=3'에 액세스하려면 'id.3'을 사용할 수 있습니다.
자세한 내용은 AssignMessage 정책 복사 요소 문서를 참조하세요.
진단
오류가 발생한 HTTPModifier 정책, 속성 이름, 잘못된 색인을 식별합니다. 오류 메시지에서 이러한 항목을 모두 찾을 수 있습니다. 예를 들어 다음 오류에서 정책 이름은
GeneratingGeocodingRequest
, 속성 이름은id
, 색인은0
입니다.HTTPModifier[GenerateStudentsRequest]: index must be greater than zero in id.0
실패한 HTTPModifier 정책 XML에 사용된 속성 이름 및 색인이 오류 메시지에서 확인된 속성 이름 및 색인과 일치하는지 확인합니다(위의 1단계). 예를 들어 다음 정책에서는 속성
id
과 색인을 오류 메시지에 있는 것과 일치하는0
으로 지정합니다.<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>
지정된 색인이 0 또는 음수인 경우 이는 오류의 원인이 됩니다.
위에 표시된 메시지 할당 정책 예시에서는 인덱스 0을 사용하여 쿼리 매개변수 'id'의 첫 번째 값에 액세스하려고 합니다. 따라서 다음 오류와 함께 API 프록시 배포가 실패합니다.
AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
해결 방법
HTTPModifier에서 같은 이름을 공유하는 여러 헤더, 쿼리 매개변수 또는 기타 매개변수에 액세스할 때 색인이 항상 0보다 큰지 확인합니다. 예를 들면 다음과 같습니다.
<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>