查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
SourceMessageNotAvailable
錯誤代碼
steps.extractvariables.SourceMessageNotAvailable
錯誤回應主體
{ "fault": { "faultstring": "[variable_name] message is not available for ExtractVariable: [policy_name]", "detail": { "errorcode": "steps.extractvariables.SourceMessageNotAvailable" } } }
原因
如果提取變數政策的 <Source>
元素中指定的 message 變數為下列任一情況,就會發生此錯誤:
- 超出範圍 (不適用於執行政策的特定流程)
- 無法解析 (未定義)
舉例來說,如果在
要求流程,但 <Source>
元素設為 response
或 error
變數,在要求流程中不存在。
診斷
找出發生錯誤的「擷取變數」政策,以及不適用的變數名稱。您可以在錯誤回應的
faultstring
元素中找到這兩項項目。舉例來說,在下列錯誤字串中,政策名稱為ExtractVariables-1
,變數為response
:"faultstring": "response message is not available for ExtractVariable: ExtractVariables-1"
在失敗的「擷取變數」政策 XML 中,確認變數名稱 元素中設定的變數名稱與錯誤字串中識別的變數名稱相符 (步驟 1) )。舉例來說,下列「擷取變數」政策將指定變數 元素中名為
response
,且與錯誤字串中的內容相符:<ExtractVariables name="ExtractVariables-1"> <Source>response</Source> <URIPath> <Pattern ignoreCase="true">/a/{pathSeg}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> </ExtractVariables>
判斷在執行「擷取變數」政策的流程中,是否已定義並可使用
<Source>
元素中使用的變數。如果變數為以下任一變數:
- 超出範圍 (在執行政策的特定流程中不可用),或
- 無法解析 (未定義)
這就是發生錯誤的原因
舉例來說,假設上方顯示的「擷取變數」政策是在 request 流程中執行。請注意,在「擷取變數」政策的
<Source>
元素中,會使用response
變數。response
變數僅適用於回應流程。由於要求流程中沒有
response
變數,因此您會收到錯誤代碼:steps.extractvariables.SourceMessageNotAvailable
。
解析度
請確認已定義失敗的「擷取變數」政策中 <Source>
元素中設定的變數,並存在於執行政策的流程中。
如要修正上述範例擷取變數政策,您可以修改 <Source>
元素,使其使用要求流程中的 request
變數:
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
</ExtractVariables>
SetVariableFailed
錯誤代碼
steps.extractvariables.SetVariableFailed
錯誤回應主體
{ "fault": { "faultstring": "Failed to set variable [variable_name] value [variable_value] from ExtractVariables: [policy_name]", "detail": { "errorcode": "steps.extractvariables.SetVariableFailed" } } }
原因
如果「擷取變數」政策無法將這個值設為變數,就會發生這個錯誤。這種情況通常會發生在您嘗試將值指派給多個變數時,這些變數的名稱以同一個字詞開頭,且採用以點分隔的巢狀格式。
舉例來說,假設您建立/指派值給變數 var.color
。在本例中,color
會分配為物件節點。如果您嘗試將值指派給其他變數 var.color.next
,就會失敗,因為 color
已分配,且不允許為該變數分配其他變數。
診斷
找出發生錯誤的「擷取變數」政策,以及無法設定該值的變數名稱。您可以在錯誤回應的
faultstring
元素中找到這兩個項目。例如,在以下錯誤字串中,政策名稱為ExtractColors
,變數為var.color.next
:"faultstring": "Failed to set variable var.color.next value red from ExtractVariables: ExtractColors"
在失敗的「擷取變數」政策 XML 中,確認變數名稱 與錯誤字串中找到的變數名稱相符 (上述步驟 1)。舉例來說,下列政策會嘗試將要求查詢參數的值指派給名為
var.color.next
的變數 (出現在錯誤字串中的值):<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractColors"> <DisplayName>ExtractColors</DisplayName> <Source>request</Source> <QueryParam name="color"> <Pattern ignoreCase="true">{color}</Pattern> </QueryParam> <QueryParam name="nextcolor"> <Pattern ignoreCase="true">{color.next}</Pattern> </QueryParam> <VariablePrefix>var</VariablePrefix> </ExtractVariables>
檢查失敗的「擷取變數」政策中使用的所有變數名稱。如果您為另一個變數指派了值,但該變數的名稱開頭為錯誤字串 (上述步驟 1) 中識別的變數名稱,這就是發生錯誤的原因。
請注意,在上述「提取變數」政策範例中:
- 命名為
color
的查詢參數值會先指派給變數var.color
(注意:var
是<VariablePrefix>
元素中所有變數的前置字串) - 在下一個指派項目中,
nextcolor
查詢參數的值會指派給另一個變數var.color.next
。 - 由於
var.color
已分配,因此擷取變數政策無法分配另一個巢狀變數var.color.next
。因此您會收到錯誤代碼:steps.extractvariables.SetVariableFailed
- 命名為
解析度
確認沒有任何變數名稱開頭為 使用以半形句號分隔巢狀結構的字詞
如要修正上述的「擷取變數」政策,您可以修改變數名稱
var.color.next
,改用變數名稱var.nextcolor.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractColors"> <DisplayName>ExtractColors</DisplayName> <Source>request</Source> <QueryParam name="color"> <Pattern ignoreCase="true">{color}</Pattern> </QueryParam> <QueryParam name="nextcolor"> <Pattern ignoreCase="true">{nextcolor}</Pattern> </QueryParam> <VariablePrefix>var</VariablePrefix> </ExtractVariables>
更多資訊
詳情請參閱這篇社群貼文。
InvalidJSONPath
錯誤代碼
steps.extractvariables.InvalidJSONPath
錯誤回應主體
{ "fault": { "faultstring": "Invalid JSON path [path_name] in policy [policy_name].", "detail": { "errorcode": "steps.extractvariables.InvalidJSONPath" } } }
原因
如果 <JSONPath>
元素中使用無效的 JSON 路徑,就會發生這個錯誤
「擷取變數」政策的一部分舉例來說,如果 JSON 酬載沒有
物件 Name
,但您在擷取變數中指定了 Name
做為路徑
就會發生這項錯誤
診斷
找出發生錯誤的「擷取變數」政策,以及無效的 JSON 路徑。您可以在錯誤回應的
faultstring
元素中找到這兩項項目。例如,在下列錯誤字串中,政策名稱為ExtractJSONVariables
,且無效的 JSON 路徑為$.Name
:"faultstring": "Invalid JSON path $.Name in policy ExtractJSONVariables."
在失敗的「擷取變數」政策 XML 中,請確認
<JSONPath>
元素中設定的 JSON 路徑與錯誤字串中指定的路徑相符 (上述步驟 1)。舉例來說,下列「擷取變數」政策指定了 JSON 路徑$.Name
, 與錯誤字串中的字串相符:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables"> <Source>response</Source> <JSONPayload> <Variable name="name" type="string"> <JSONPath>$.Name</JSONPath> </Variable> </JSONPayload> <VariablePrefix>employee</VariablePrefix> </ExtractVariables>
檢查
<Source>
元素,並判斷您要從哪個 JSON 酬載中擷取變數。舉例來說,如果<Source>
元素設為request
,政策會從要求物件中擷取 JSON 酬載。如果設為response
,則為回應物件。在上述的「擷取變數」政策範例中,
<Source>
元素為 設為response
,因此系統要從 JSON 酬載中擷取變數 回應。<Source>response</Source>
檢查適當的 JSON 酬載 (從步驟 3 確定) 並驗證 表示物件已包含
<JSONPath>
元素中指定的物件。如果 JSON 酬載 就表示發生錯誤的原因舉例來說,假設您嘗試從以下項目擷取變數: JSON 回應酬載:
{ "firstName":"John", "lastName":"Doe", "city":"San Jose", "state":"CA" }
由於 JSON 回應酬載沒有
Name
物件,因此擷取變數政策會失敗,並顯示以下錯誤代碼:steps.extractvariables.InvalidJSONPath
。
解析度
請確認「Extract Variables」政策的
<JSONPath>
元素中,只指定了要從中擷取變數的 JSON 酬載物件。如要修正上述範例擷取變數政策,您可以修改
<JSONPath>
元素,指定範例 JSON 回應酬載中的其中一個物件 (例如firstName
和lastName
物件有效):<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables"> <Source>response</Source> <JSONPayload> <Variable name="name" type="string"> <JSONPath>$.firstName</JSONPath> </Variable> </JSONPayload> <VariablePrefix>employee</VariablePrefix> </ExtractVariables>
ExecutionFailed
錯誤代碼
steps.extractvariables.ExecutionFailed
錯誤回應主體
{ "fault": { "faultstring": "Failed to execute the ExtractVariables: [policy_name]", "detail": { "errorcode": "steps.extractvariables.ExecutionFailed" } } }
可能原因
發生這項錯誤的可能原因如下:
原因 | 說明 |
缺少輸入酬載 | 輸入酬載 (JSON、XML) 為空白。 |
輸入的內容無效或格式錯誤 | 傳遞至政策的輸入內容 (JSON、XML 等) 無效或格式錯誤。 |
原因:缺少輸入酬載
如果「擷取變數」政策應從 JSON 或 XML 酬載中擷取變數,但 <Source>
元素中指定的變數內容 (酬載) 為空白,就會發生這個錯誤。
舉例來說,如果「擷取變數」政策中的 <Source>
元素設為 request
或 response
,且這些元素應包含或 JSON 或 XML 酬載,但酬載為空白,就會發生錯誤。
診斷
找出發生錯誤的「擷取變數」政策。您可以 這項資訊。例如,在下列錯誤字串中,政策名稱為
ExtractJSONVariables
:"faultstring": "Failed to execute the ExtractVariables: ExtractXMLVariables"
檢查失敗的擷取變數 XML 中的
<Source>
元素,並判斷要從哪些輸入類型擷取變數。舉例來說,下列「擷取變數」政策會將<Source>
元素設為response
,並從 XML 酬載中擷取變數:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractXMLVariables" async="false" continueOnError="false" enabled="true"> <XMLPayload> <Namespaces/> <Variable name="City" type="string"> <XPath>/city</XPath> </Variable> </XMLPayload> <Source clearPayload="false">response</Source> </ExtractVariables>
檢查「擷取變數」政策剖析的輸入值是否空白。如果輸入空白,就是發生錯誤的原因。
在上方顯示的「擷取變數」政策範例中,後端伺服器傳送的回應酬載 (即回應主體) 為空白。
由於 XML 回應酬載為空白,因此您會收到以下錯誤代碼:
steps.extractvariables.ExecutionFailed
如果
<Source>
元素設為request
,但 API 代理要求中沒有傳送酬載,也會發生這個錯誤。例如:curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/xml"
「擷取變數」政策只會在訊息
Content-Type
標頭為application/xml
、text/xml
或application/*+xml
。 您必須以application/xml
、text/xml
或 如果您想讓擷取變數政策剖析 XML,請設為application/*+xml
。 而非酬載
解析度
請確認傳遞到「擷取變數」政策的輸入內容有效且非空白。
如要修正上述「擷取變數」政策範例的問題,請傳送 有效的 XML 酬載例如:
建立名為
city.xml
的檔案,並在當中加入下列內容:<city>Bengaluru</city> <area>Sanjaynagar</area>
使用 cURL 指令發出 API 呼叫,如下所示:
curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/xml" -X POST -d @city.xml
原因:輸入無效或格式錯誤
如果「擷取變數」政策剖析的輸入資料無效或格式錯誤,系統就會顯示這個錯誤。
舉例來說,如果在「擷取變數」政策中輸入下列無效的 JSON,就會顯示這個錯誤。
[
"args": ["name" : "amar" ]
]
診斷
找出發生錯誤的「擷取變數」政策。您可以 這項資訊會顯示在錯誤回應的
faultstring
元素中。例如: 下列faultstring
中的政策名稱為ExtractJSONVariables
:"faultstring": "Failed to execute the ExtractVariables: ExtractJSONVariables"
檢查失敗的擷取變數 XML 中的
<Source>
元素,並判斷要從哪些輸入類型擷取變數。舉例來說,下列擷取變數政策將<Source>
元素設為request
,並從 JSON 酬載中擷取變數:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="Name" type="string"> <JSONPath>$.args.name</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">request</Source> </ExtractVariables>
檢查「擷取變數」政策剖析的輸入內容是否有效。如果輸入無效或格式錯誤,就是導致錯誤的原因。
在上方顯示的「擷取變數」政策範例中,將下列無效的 JSON 傳遞至「擷取變數」政策
[ "args": ["name" : "amar" ] ]
以下是示範如何傳送要求的 API 呼叫:
curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "amar" ]]'
傳遞至 API 的 JSON 酬載包含包含方括號 (
[ ]
) 的陣列,因此會收到下列錯誤代碼:steps.extractvariables.ExecutionFailed
如果
<Source>
元素設為response
,但 JSON 回應酬載無效或格式錯誤,也可能會發生這個錯誤。
解析度
請確認傳遞到「擷取變數」政策的輸入內容有效且格式有誤。
如要修正上述「擷取變數」政策範例的問題,請按照以下方式傳送有效的 JSON 酬載要求:
{
"args":{
"name":"amar"
}
}
UnableToCast
錯誤代碼
steps.extractvariables.UnableToCast
錯誤回應主體
{ "fault": { "faultstring": "Unable to cast value [value] as [type].", "detail": { "errorcode": "steps.extractvariables.UnableToCast" } } }
原因
如果「擷取變數」政策無法將擷取的值轉換為變數,就會發生這個錯誤。這通常是因為您嘗試將 傳遞至另一種資料類型的變數。
舉例來說,如果「擷取變數」政策嘗試設定的值尚未變更, 從字串變數擷取為整數變數,就會看到此錯誤。
診斷
找出變數的資料類型,以便「擷取變數」政策嘗試轉換但失敗。您可以在
faultstring
中找到這項資訊 元素。例如,在下列faultstring
中, 物件類型為BOOLEAN
:"faultstring":"Unable to cast value 36.231 as BOOLEAN."
請找出您嘗試將值設為在步驟 1 決定的變數的「擷取變數」政策。
舉例來說,下列「擷取變數」政策會從 將 JSONPath
$.latitude
附加至boolean
類型的變數,並比對下列項目 :<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="latitude" type="boolean"> <JSONPath>$.latitude</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">response</Source> </ExtractVariables>
檢查要擷取的值的資料類型。資料可能保存在 標頭、URI 路徑、JSON/XML 酬載、表單參數和查詢參數。
請確認步驟 3 中已判斷的資料類型,以及變數的資料類型 目前指派的資料 (步驟 2 中決定) 相同。
如果來源與目的地變數的資料類型不同: 但這是導致錯誤的原因。
在上述「擷取變數」政策範例中,假設 JSON 要求酬載如下所示:
{ "latitude":36.2312 }
從
<JSONPath>
擷取的值‘$.latitude’
資料類型為整數,並指派給資料類型為布林值的變數。由於擷取值的資料類型和變數的資料類型 獲得的指派值不同,您會收到錯誤代碼:
steps.extractvariables.UnableToCast
。
解析度
請確認擷取值的資料類型,以及內容指派的變數,皆為相同類型。
如要修正「擷取變數」政策範例,您必須修改 要轉換為整數的變數:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
<JSONPayload>
<Variable name="latitude" type="integer">
<JSONPath>$.latitude</JSONPath>
</Variable>
</JSONPayload>
<Source clearPayload="false">response</Source>
</ExtractVariables>
JsonPathParsingFailure
錯誤代碼
steps.extractvariables.JsonPathParsingFailure
錯誤回應主體
{ "fault": { "faultstring": "ExtractVariables [policy_name]: Json path parsing failed for flow variables [variable_name]", "detail": { "errorcode": "steps.extractvariables.JsonPathParsingFailure" } } }
原因
當「擷取變數」政策無法剖析 JSON 路徑,並從 <Source>
元素中指定的流程變數擷取資料時,就會發生這項錯誤。通常發生在流量變數的情況下
目前資料流中沒有 <Source>
元素中指定的。
舉例來說,如果「擷取變數」政策在回應流程中執行,且預期會剖析 JSON 路徑,但 <Source>
元素指定的流程變數 request.content
不存在於回應流程中,就會發生這項錯誤。
診斷
找出發生錯誤的「擷取變數」政策,以及無法擷取資料的流程變數名稱。您可以在錯誤回應的 faultstring 元素中找到這兩個項目。例如,在以下錯誤字串中,政策名稱為
ExtractVariables-1
,變數為request.content
:"faultstring": "ExtractVariables ExtractJSONVariabes: Json path parsing failed for flow variables request.content"
在失敗的「擷取變數」政策 XML 中,確認
<Source>
元素中設定的變數,與 錯誤字串 (上述步驟 #1)。例如,下列的擷取變數 政策會指定名為request.content
的變數,此變數與錯誤字串中的內容相符:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="Name" type="string"> <JSONPath>$.args.name</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">request.content</Source> </ExtractVariables>
請確認
<Source>
元素中使用的流程變數是否已定義且可在執行「擷取變數」政策的流程中使用。如果變數為以下任一變數:
- 超出範圍 (在執行政策的特定流程中不可用),或
- 無法解析 (未定義)
這就是發生錯誤的原因
舉例來說,假設上述的 ExtractVariables 政策應在回應流程中執行。請注意,流程變數
request.content
會用於「Extract Variables」政策的<Source>
元素。流程變數request.content
僅適用於要求流程。由於要求流程中沒有
response
變數,因此您會收到錯誤代碼:steps.extractvariables.JsonPathParsingFailure
。
解析度
請確定擷取內容 <Source>
元素中使用的流程變數
變數政策可在「擷取變數」政策的流程中提供
執行作業。
舉例來說,假設回應中有名為 response.content
的變數
流程且實際上包含您要擷取的 JSON。如何更正擷取資訊
如上所示的變數政策,您可以按照以下方式修改 <Source>
元素:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
<JSONPayload>
<Variable name="Name" type="string">
<JSONPath>$.args.name</JSONPath>
</Variable>
</JSONPayload>
<Source clearPayload="false">response.content</Source>
</ExtractVariables>