您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
InvalidIndex
錯誤訊息
無法透過 Edge UI 或 Edge Management API 部署 API Proxy,並顯示以下錯誤訊息:
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.
AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
螢幕截圖範例
原因
如果 Assign Message 政策的 <Copy>
和/或 <Remove>
元素中指定的索引為 0 或負數,表示 API Proxy 部署失敗。
舉例來說,如果您傳送多個同名的查詢參數,這些參數在 Edge 中就可以做為已建立索引的流程變數來存取。假設您要將 3 位學生的 ID 做為查詢參數傳遞,請執行下列步驟:
https://myorg-test.apigee.net/v1/basepath?school_name=NPS&id=1&id=2&id=3
然後,假設您嘗試在「Assign Message」政策中使用索引號碼 0、1 和 2 存取這些查詢參數,如下所示:
id.0
id.1 and
id.2
在此情況下,Proxy 的部署作業會失敗,因為索引開頭須為 1。也就是說,您可以存取第一個查詢參數「id=1」做為「id.1」。如要存取第二個查詢參數「id=2」,請使用索引 2,也就是「id.2」。同樣地,如要存取第三個查詢參數「id=3」,您可以使用「id.3」。
詳情請參閱這篇說明文章。
診斷
找出發生錯誤的「指派訊息」政策、屬性名稱及無效的索引。您可以在錯誤訊息中找到上述所有項目。舉例來說,在下列錯誤中,政策名稱為
GeneratingGeocodingRequest
、屬性名稱為id
,索引為0
:AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
驗證失敗的「Assign Message」政策 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 Proxy 部署失敗並顯示以下錯誤:
AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
解析度
在「Assign Message」中,當您存取多個名稱相同的標頭、查詢參數或其他參數時,請確保索引一律大於零。例如:
<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
錯誤訊息
無法透過 Edge UI 或 Edge Management API 部署 API Proxy,並顯示以下錯誤訊息:
Error Saving Revision [revision_number] The revision is deployed, but traffic cannot flow. AssignMessage schema validation failed: invalid variable name - null - in assign variable.
錯誤訊息示例
Error Saving Revision 3
AssignMessage schema validation failed: invalid variable name - null - in assign variable.
螢幕截圖範例
原因
如果子項元素 <Name>
為空白,或是在 <AssignVariable>
元素中未指定,API Proxy 的部署就會失敗,因為沒有可指派值的有效變數名稱。必須提供有效的變數名稱。
診斷
檢查發生錯誤的特定 API Proxy 中的所有「Assign Message」政策。如果有任何 Assign Message 政策的子項元素 <Name>
為空白,或 <AssignVariable>
元素未指定政策,就會導致發生錯誤。
示例 1:下列指派訊息政策未定義任何 <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>
範例 2:下列指派訊息政策含有空白的 <Name>
元素。
<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>
解析度
請確保在 Assign Message 政策的 <AssignVariable>
元素中一律指定 <Name>
子元素,且不得空白。例如:
<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>