您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
UnresolvedVariable
錯誤代碼
steps.assignmessage.UnresolvedVariable
錯誤回應主體
{ "fault": { "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.assignmessage.UnresolvedVariable" } } }
原因
如果 Assign Message 政策中指定的變數符合下列任一條件,就會發生這個錯誤:
- 超出範圍 (不適用於執行政策的特定流程) 或
- 無法解析 (未定義)
舉例來說,如果 Assign Message 政策在要求流程中執行,但 <Copy>
元素中的 source
屬性設為 response
或 error
變數,或是要求流程中不存在的其他自訂變數,就會發生這個錯誤。
診斷
找出發生錯誤的指派訊息政策和無法使用的變數名稱。您可以在錯誤回應的
faultstring
元素中找到這兩個項目。舉例來說,在下列
faultstring
中,政策名稱是googleBook
,變數則為var
:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
在失敗的 Assign Message Policy XML 中,請確認使用的變數名稱與錯誤字串中識別的變數名稱 (請參閱上方的步驟 #1) 相符。舉例來說,下列政策會將
<Copy>
元素中的來源屬性設為名為var
的變數,且該變數與faultstring
中的項目相符:<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1"> <DisplayName>googleBook</DisplayName> <Properties /> <Copy source="var"> <Headers> <Header name="user-agent" /> </Headers> </Copy> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo> </AssignMessage>
判斷是否已定義變數,並在執行 Assign Message 政策的流程中使用。
如果該變數為其中一種:
- 超出範圍 (不適用於執行政策的特定流程) 或
- 無法解析 (未定義)
這就是錯誤的原因
舉例來說,假設上方顯示的「Assign Message」政策會在要求流程中執行。檢查在要求流程中在「Assign Message」政策之前執行的任何政策中,是否已經定義了變數
var
。如未定義變數,您會收到錯誤代碼:steps.assignmessage.UnresolvedVariable
解析度
請確認政策中參照的變數存在,且可在執行「Assign Message」政策的特定流程中使用。
如要修正上方範例政策,您可以將 <Copy>
元素中的來源屬性修改為要求變數,或是要求流程中存在的任何其他類型訊息的自訂變數。
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
<DisplayName>googleBook</DisplayName>
<Properties />
<Copy source="request">
<Headers>
<Header name="user-agent" />
</Headers>
</Copy>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>
VariableOfNonMsgType
錯誤代碼
steps.assignmessage.VariableOfNonMsgType
錯誤回應主體
{ "fault": { "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message", "detail": { "errorcode": "steps.assignmessage.VariableOfNonMsgType" } } }
原因
如果 <Copy>
元素中的 source
屬性設為不屬於 message 類型的變數,就會發生這個錯誤。
訊息類型變數代表整個 HTTP 要求和回應。內建 Edge 流程變數 request
、response
和 message
屬於訊息類型。如要進一步瞭解訊息變數,請參閱「變數參考資料」。
診斷
找出發生錯誤的指派訊息政策,以及類型不正確的變數名稱。您可以在錯誤回應的
faultstring
元素中找到這兩個項目。舉例來說,在下列faultstring
中,政策名稱是GenerateGeocodingRequest
,變數則為PostalCode
:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
在失敗的「Assign Message Policy」 XML 中,請確認
<Copy>
元素中設定的變數名稱與錯誤字串中識別的變數名稱 (如上方的步驟 #1) 相符。舉例來說,下列政策會將來源屬性設為名為PostalCode
的變數,該變數與faultstring
中的值相符:<AssignMessage name="GenerateGeocodingRequest"> <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo> <AssignVariable> <Name>PostalCode</Name> <Ref>request.queryparam.postalcode</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> <Copy source="PostalCode"> <QueryParams> <QueryParam name="q" /> </QueryParams> </Copy> </AssignMessage>
判斷這個變數是否為訊息類型:
- 在 API Proxy 軟體包中找出變數,其中先定義變數。
- 確定定義及填入變數的政策後,您必須按照下列方式判斷該變數的類型:
- 檢查類型屬性的值 (如果有的話)。
- 如果沒有 type 屬性,系統會將該變數視為字串。
- 如果變數的類型不是訊息 (例如字串),這就是錯誤的原因。如要瞭解常見的變數及其類型,請參閱變數參考資料。
例如,查看上述 XML 中的 PostalCode 變數。已指派
<AssignVariable>
元素中流程變數request.queryparam.postalcode
的值。此值是字串,因為變數指派中沒有任何類型屬性。現在,請記得,Assign Message 政策的
<Copy>
元素使用了 PostalCode 變數:<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
由於 PostalCode 不屬於類型訊息 (在這個範例中為字串),您會收到以下錯誤代碼:
steps.assignmessage.VariableOfNonMsgType
解析度
確認失敗的「Assign Message」(指派訊息) 政策中,<Copy>
元素中的 source
屬性已設為存在的 message 類型流程變數。
如要修正這項政策,您可以修改 <Copy>
元素中的 source
屬性,指定屬於訊息類型的變數。舉例來說,如果 Assign Message 政策應在要求流程中執行,您可以使用訊息類型變數 request
或任何其他類型訊息的自訂變數。
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
<Copy source="request">
<QueryParams>
<QueryParam name="PostalCode" />
</QueryParams>
</Copy>
</AssignMessage>