您正在查看 Apigee 和 Apigee Hybrid 說明文件。
    查看 
    Apigee Edge 說明文件。
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"
- 在失敗的「Extract Variables」政策 XML 中,請確認元素中設定的變數名稱與錯誤字串中指出的變數名稱相符 (上方步驟 1)。舉例來說,下列「擷取變數」政策會在元素中指定名為 - response的變數,與錯誤字串中的變數相符:- <ExtractVariables name="ExtractVariables-1"> <Source>response</Source> <URIPath> <Pattern ignoreCase="true">/a/{pathSeg}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> </ExtractVariables>
- 判斷在執行「擷取變數」政策的流程中,是否已定義並可使用 - <Source>元素中使用的變數。
- 如果變數為: - 超出範圍 (在執行政策的特定流程中不可用),或
- 無法解析 (未定義)
 - 則表示這是錯誤的原因。 - 舉例來說,假設上述的「擷取變數」政策會在要求流程中執行。請注意, - response變數會用於「擷取變數」政策的- <Source>元素。- 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"
- 在失敗的「Extract Variables」政策 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."
- 在失敗的「Extract Variables」政策 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 酬載,但酬載為空白,就會發生錯誤。
診斷
- 找出發生錯誤的「擷取變數」政策。您可以在錯誤回應的 faultstring 元素中找到這項資訊。例如,在下列錯誤字串中,政策名稱為 - ExtractJSONVariables:- "faultstring": "Failed to execute the ExtractVariables: ExtractXMLVariables"
- 檢查失敗的「Extract Variables」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://$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/xml"- 其中 - $EXTERNAL_IP是外部負載平衡器的 IP 位址。這個 IP 位址會公開在網際網路上。詳情請參閱「自訂存取路由」。- 只有在訊息的 - Content-Type標頭為- application/xml、- text/xml或- application/*+xml時,「擷取變數」政策才會執行 XML 擷取作業。如果您希望「擷取變數」政策能剖析 XML 要求酬載,就必須將 Content-Type 標頭設為- application/xml、- text/xml或- application/*+xml。
解決方法
確認傳遞至「擷取變數」政策的輸入內容有效且非空白。
如要修正上述提取變數政策範例的問題,請傳遞有效的 XML 酬載。例如:
- 建立名為 - city.xml的檔案,並在當中加入下列內容:- <city>Bengaluru</city> <area>Sanjaynagar</area>
- 使用 cURL 指令發出 API 呼叫,如下所示: - curl -v "http://$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/xml" -X POST -d @city.xml- 其中 - $EXTERNAL_IP是外部負載平衡器的 IP 位址。這個 IP 位址會公開在網際網路上。詳情請參閱「自訂存取路由」。
原因:輸入內容無效或格式不正確
如果「擷取變數」政策剖析無效或格式錯誤的輸入內容,就會顯示這項錯誤。
舉例來說,如果您將下列無效的 JSON 做為「擷取變數」政策的輸入內容,就會收到這則錯誤訊息。
[
    "args": ["name" : "amar" ]
]
診斷
- 找出發生錯誤的「擷取變數」政策。您可以在錯誤回應的 - faultstring元素中找到這項資訊。例如,在以下- faultstring中,政策名稱為- ExtractJSONVariables:- "faultstring": "Failed to execute the ExtractVariables: ExtractJSONVariables"
- 檢查失敗的「Extract Variables」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://<$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "amar" ]]'- 其中 - $EXTERNAL_IP是外部負載平衡器的 IP 位址。這個 IP 位址會公開在網際網路上。詳情請參閱「自訂存取路由」。- 傳遞至 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 for flow variables [variable_name]",
        "detail": {
            "errorcode": "steps.extractvariables.JsonPathParsingFailure"
        }
    }
}
原因
當「擷取變數」政策無法剖析 JSON 路徑,並從 <Source> 元素中指定的流程變數擷取資料時,就會發生這項錯誤。通常,如果 <Source> 元素中指定的流程變數不存在於目前流程中,就會發生這種情況。
舉例來說,如果「擷取變數」政策在回應流程中執行,且預期會剖析 JSON 路徑,但 <Source> 元素指定的流程變數 request.content 不存在於回應流程中,就會發生這項錯誤。
診斷
- 找出發生錯誤的「擷取變數」政策,以及無法擷取資料的流程變數名稱。您可以在錯誤回應的錯誤字串元素中找到這兩個項目。例如,在以下錯誤字串中,政策名稱為 - ExtractVariables-1,變數為- request.content:- "faultstring": "ExtractVariables ExtractJSONVariabes: Json path parsing failed for for flow variables request.content"
- 在失敗的「Extract Variables」政策 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是在「擷取變數」政策的- <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>