您正在查看 Apigee 和 Apigee Hybrid 說明文件。
查看
Apigee Edge 說明文件。
NothingToExtract
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 時失敗,並顯示以下錯誤訊息:
Error Saving Revision [revision_number] ExtractVariables [policy_name]: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory. Revision:[revision_number]; APIProxy:[proxy_name]; Organization:[org_name]; Environment:[env_name].
錯誤訊息示例
Error Saving Revision 2
ExtractVariables EV-XML-Age: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory.
螢幕截圖範例
原因
如果「擷取變數」政策中沒有 URIPath
、QueryParam
、Header
、FormParam
、XMLPayload
或 JSONPayload
等元素,則 API Proxy 的部署作業會失敗,因為沒有任何可擷取的內容。
如錯誤訊息所示,擷取變數政策中至少必須包含下列其中一個元素:URIPath
、QueryParam
、Header
、FormParam
、XMLPayload
或 JSONPayload
。
診斷
請查看錯誤訊息中所提及的「Extract Variables」政策。如果政策中沒有下列任一元素:URIPath
、QueryParam
、Header
、FormParam
、XMLPayload
或 JSONPayload
,則可能是錯誤的原因。舉例來說,下列「擷取變數」政策不含上述任何元素:
<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
<DisplayName>EV-XML-Age</DisplayName>
<Properties/>
</ExtractVariables>
由於「擷取變數」政策中沒有任何必要元素,因此 API 代理程式無法部署。
解決方法
請確認「擷取變數」政策至少包含下列任一必要元素:URIPath
、QueryParam
、Header
、FormParam
、XMLPayload
、JSONPayload
。例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
<DisplayName>EV-XML-Age</DisplayName>
<Properties/>
<Source>request</Source>
<XMLPayload>
<Namespaces/>
<Variable name="age" type="integer">
<XPath>/age</XPath>
</Variable>
</XMLPayload>
</ExtractVariables>
NONEmptyPrefixMappedToEmptyURI
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 時失敗,並顯示以下錯誤訊息:
Error Saving Revision [revision_number] ExtractVariables [policy_name]: Non-empty prefix [prefix_name] cannot be mapped to empty uri.
錯誤訊息示例
Error Saving Revision 3
ExtractVariables EV-XML-Age: Non-empty prefix apigee cannot be mapped to empty uri.
螢幕截圖範例
原因
如果「擷取變數」政策在 <XMLPayload>
元素下的 <Namespace>
元素中定義了前置字串,但未定義 URI,就會發生這項錯誤。
診斷
找出發生錯誤的「擷取變數」政策,以及前置字元的名稱。您可以在錯誤訊息中找到這兩項項目。舉例來說,在下列錯誤中,政策名稱為
EV-XML-Age
,前置字串為apigee
:ExtractVariables EV-XML-Age: Non-empty prefix apigee cannot be mapped to empty uri.
在失敗的「Extract Variables」政策 XML 中,請確認
<XMLPayload>
元素下方<Namespace>
元素中設定的前置字串名稱,是否與錯誤訊息中指出的前置字串名稱相符 (步驟 1 上方)。舉例來說,下列政策會在<Namespace>
元素中指定名為apigee
的前置字串,與錯誤訊息中的內容相符:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age"> <DisplayName>EV-XML-Age</DisplayName> <Source clearPayload="false">request</Source> <XMLPayload stopPayloadProcessing="false"> <Namespaces> <Namespace prefix="apigee"></Namespace> <Namespace prefix="gmail">http://mail.google.com</Namespace> </Namespaces> <Variable name="legName" type="string"> <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</Xpath> </Variable> </XMLPayload> </ExtractVariables>
驗證是否有特定前置字串的
<Namespace>
元素,並在步驟 2 中找到有效的 URI。如果 URI 缺少,則表示這是錯誤的原因。請注意,在上方顯示的「提取變數」政策範例中,沒有任何 URI 與前置字串
apigee
的<Namespace>
元素相對應,因此會出現以下錯誤:ExtractVariables EV-XML-Age: Non-empty prefix apigee cannot be mapped to empty uri.
解決方法
請確認所有使用前置字首定義的 <Namespace>
元素,在「擷取變數」政策中都有對應的 URI。例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
<DisplayName>EV-XML-Age</DisplayName>
<Source clearPayload="false">request</Source>
<XMLPayload stopPayloadProcessing="false">
<Namespaces>
<Namespace prefix="apigee">http://www.apigee.com</Namespace>
<Namespace prefix="gmail">http://mail.google.com</Namespace>
</Namespaces>
<Variable name="legName" type="string">
<XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</Xpath>
</Variable>
</XMLPayload>
</ExtractVariables>
DuplicatePrefix
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 時失敗,並顯示以下錯誤訊息:
Error Saving Revision [revision_number] ExtractVariables [policy_name]: Duplicate prefix [prefix_name].
錯誤訊息示例
Error Saving Revision 2
ExtractVariables EV-XML-Age: Duplicate prefix apigee.
螢幕截圖範例
原因
如果在 <XMLPayload>
元素下的 <Namespace>
元素中,提取變數政策有重複定義的相同前置字串,就會發生這項錯誤。
舉例來說,由於前置詞 apigee
定義了兩次,因此會發生此錯誤,如下所示:
<Namespace prefix="apigee">http://www.apigee.com</Namespace>
<Namespace prefix="apigee">http://www.apigee.com</Namespace>
診斷
找出發生錯誤的「擷取變數」政策,以及前置字元的名稱。您可以在錯誤訊息中找到這兩項項目。舉例來說,在下列錯誤中,政策名稱為
EV-XML-Age
,前置字串為apigee
:ExtractVariables EV-XML-Age: Duplicate prefix apigee.
在失敗的「Extract Variables」政策 XML 中,請確認
<XMLPayload>
元素下方<Namespace>
元素中設定的前置字串名稱,是否與錯誤訊息中指出的前置字串名稱相符 (步驟 1 上方)。舉例來說,下列政策會在<Namespace>
元素中指定名為apigee
的前置字串,與錯誤訊息中的內容相符:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age"> <DisplayName>EV-XML-Age</DisplayName> <Source clearPayload="false">request</Source> <XMLPayload stopPayloadProcessing="false"> <Namespaces> <Namespace prefix="gmail">http://mail.google.com</Namespace> <Namespace prefix="apigee">http://www.apigee.com</Namespace> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces> <Variable name="legName" type="string <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath> </Variable> </XMLPayload> </ExtractVariables>
判斷是否已定義多個具有步驟 2 中特定前置字元的
<Namespace>
元素。如果定義了多次,則表示這是錯誤的原因。請注意,在上述範例的「提取變數」政策中,含有前置字串
apigee
的<Namespace>
元素已定義兩次,因此會出現以下錯誤:ExtractVariables EV-XML-Age: Duplicate prefix apigee.
解決方法
請確認在「擷取變數」政策的 <Namespace>
元素中,每個前置字串只有一個定義。例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
<DisplayName>EV-XML-Age</DisplayName>
<Source clearPayload="false">request</Source>
<XMLPayload stopPayloadProcessing="false">
<Namespaces>
<Namespace prefix="apigee">http://www.apigee.com</Namespace>
<Namespace prefix="gmail">http://mail.google.com</Namespace>
</Namespaces>
<Variable name="legName" type="string">
<XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</Xpath>
</Variable>
</XMLPayload>
</ExtractVariables>
NoXPathsToEvaluate
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 時失敗,並顯示以下錯誤訊息:
Error Saving Revision [revision_number] ExtractVariables [policy_name]:no xpaths to evaluate in variable name.
錯誤訊息示例
Error Saving Revision 4
ExtractVariables Extract-Variables-1: no xpaths to evaluate in variable name.
螢幕截圖範例
原因
如果「擷取變數」政策的 <XMLPayload>
元素中沒有 <XPath>
元素,API 代理程式會無法部署,並顯示上述錯誤。
診斷
從錯誤訊息中找出失敗的「擷取變數」政策。舉例來說,在以下錯誤中,政策名稱為
Extract-Variables-1
:ExtractVariables Extract-Variables-1: no xpaths to evaluate in variable name.
在失敗的「Extract Variables」政策 XML 中,檢查是否有
<XMLPayload>
元素,但沒有<XPath>
子元素。如果是的話,那就是錯誤的原因。舉例來說,以下是包含
<XMLPayload>
元素的「擷取變數」政策:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1"> <DisplayName>Extract Variables-1</DisplayName> <Properties/> <Source clearPayload="false">request</Source> <VariablePrefix>apigee</VariablePrefix> <XMLPayload stopPayloadProcessing="false"> <Namespaces/> <Variable name="HostReachable" type="boolean"> </Variable> </XMLPayload> </ExtractVariables>
由於沒有
<XPath>
元素,因此 API Proxy 的部署作業會失敗。
解決方法
請確認「擷取變數」政策在 <XMLPayload>
元素下定義了 <XPath>
元素。例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
<DisplayName>Extract Variables-1</DisplayName>
<Properties/>
<Source clearPayload="false">request</Source>
<VariablePrefix>apigee</VariablePrefix>
<XMLPayload stopPayloadProcessing="false">
<Namespaces/>
<Variable name="HostReachable" type="boolean">
<XPath>/isReachable</XPath>
</Variable>
</XMLPayload>
</ExtractVariables>
EmptyXPathExpression
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 時失敗,並顯示以下錯誤訊息:
Error Saving Revision [revision_number] ExtractVariables [policy_name]: XPath expression is empty in variable name.
錯誤訊息示例
Error Saving Revision 6
ExtractVariables Extract-Variables-1: XPath expression is empty in variable name.
螢幕截圖範例
原因
如果「擷取變數」政策在 <XMLPayload>
元素中包含空白的 <XPath>
運算式,API 代理程式就會部署失敗。
診斷
從錯誤訊息中找出失敗的「擷取變數」政策。舉例來說,在以下錯誤中,政策名稱為
Extract-Variables-1
:ExtractVariables Extract-Variables-1: no xpaths to evaluate in variable name.
在失敗的「擷取變數」政策 XML 中,判斷是否有
<XMLPayload>
元素,且該元素含有空白的<XPath>
子元素。如果是的話,那就是錯誤的原因。舉例來說,以下是包含
<XMLPayload>
元素的「擷取變數」政策:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1"> <DisplayName>Extract Variables-1</DisplayName> <Properties/> <Source clearPayload="false">request</Source> <VariablePrefix>apigee</VariablePrefix> <XMLPayload stopPayloadProcessing="false"> <Namespaces/> <Variable name="address" type="string"> <XPath></XPath> </Variable> </XMLPayload> </ExtractVariables>
由於
<XMLPayload>
元素中含有空白<XPath>
元素,因此 API Proxy 的部署作業會失敗。
解決方法
確認「擷取變數」政策在 <XMLPayload>
元素下定義的 <XPath>
元素非空白且有效。例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
<DisplayName>Extract Variables-1</DisplayName>
<Properties/>
<Source clearPayload="false">request</Source>
<VariablePrefix>apigee</VariablePrefix>
<XMLPayload stopPayloadProcessing="false">
<Namespaces/>
<Variable name="address" type="string">
<XPath>/address</XPath>
</Variable>
</XMLPayload>
</ExtractVariables>
NoJSONPathsToEvaluate
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 時失敗,並顯示以下錯誤訊息:
Error Saving Revision [revision_number] ExtractVariables [policy_name]:no jsonpaths to evaluate in variable name.
錯誤訊息示例
Error Saving Revision 6
ExtractVariables Extract-Variables-1: no jsonpaths to evaluate in variable name.
螢幕截圖範例
原因
如果「擷取變數」政策的 <JSONPayload>
元素中沒有 <JSONPath>
元素,API 代理程式會無法部署,並顯示上述錯誤。
診斷
從錯誤訊息中找出失敗的「擷取變數」政策。舉例來說,在以下錯誤中,政策名稱為
Extract-Variables-1
:ExtractVariables Extract-Variables-1: no jsonpaths to evaluate in variable name.
在失敗的「擷取變數」政策 XML 中,判斷是否有
<JSONPayload>
元素,但缺少必要的<JSONPath>
子元素。如果是的話,那就是錯誤的原因。舉例來說,以下是含有
<JSONPayload>
元素的「擷取變數」政策:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1"> <DisplayName>Extract Variables-1</DisplayName> <Properties/> <JSONPayload> <Variable name="title"> </Variable> </JSONPayload> <Source clearPayload="false">request</Source> <VariablePrefix>apigee</VariablePrefix> </ExtractVariables>
由於
<JSONPayload>
元素下未定義<JSONPath>
子元素,因此 API Proxy 的部署作業會失敗。
解決方法
請確認「擷取變數」政策在 <JSONPayload>
元素下定義了 <JSONPath>
元素。例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
<DisplayName>Extract Variables-1</DisplayName>
<Properties/>
<JSONPayload>
<Variable name="title">
<JSONPath>$.book.title</JSONPath>
</Variable>
</JSONPayload>
<Source clearPayload="false">request</Source>
<VariablePrefix>apigee</VariablePrefix>
</ExtractVariables>
EmptyJSONPathExpression
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 時失敗,並顯示以下錯誤訊息:
Error Saving Revision [revision_number] ExtractVariables [policy_name]: JSONPath expression is empty in variable name.
錯誤訊息示例
Error Saving Revision 6
ExtractVariables Extract-Variables-1: JSONPath expression is empty in variable name.
螢幕截圖範例
原因
如果「擷取變數」政策在 <JSONPayload>
元素中包含空白的 <JSONPath>
運算式,API 代理程式就會部署失敗。
診斷
從錯誤訊息中找出失敗的「擷取變數」政策。舉例來說,在以下錯誤中,政策名稱為
Extract-Variables-1
:ExtractVariables Extract-Variables-1: JSONPath expression is empty in variable name.
在失敗的「Extract Variables」政策 XML 中,請確認是否有
<JSONPayload>
元素,其中包含空白的<JSONPath>
子元素。如果是的話,那就是錯誤的原因。舉例來說,以下是包含
<JSONPayload>
元素的「擷取變數」政策:<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1"> <DisplayName>Extract Variables-1</DisplayName> <Properties/> <JSONPayload> <Variable name="account_number" type="integer"> <JSONPath></JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">request</Source> <VariablePrefix>apigee</VariablePrefix> </ExtractVariables>
由於
<JSONPayload>
元素中含有空白<JSONPath>
元素,因此 API Proxy 的部署作業會失敗。
解決方法
確認「擷取變數」政策在 <JSONPayload>
元素下定義的 <JSONPath>
元素非空白且有效。例如:
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
<DisplayName>Extract Variables-1</DisplayName>
<Properties/>
<JSONPayload>
<Variable name="account_number" type="integer">
<JSONPath>$.account.number</JSONPath>
</Variable>
</JSONPayload>
<Source clearPayload="false">request</Source>
<VariablePrefix>apigee</VariablePrefix>
</ExtractVariables>
MissingName
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 時失敗,並顯示以下錯誤訊息:
Error Saving Revision [revision_number] Error occurred while validation of bean [policy_name].xml Reason: - Required attribute name is missing in [element_name]
錯誤訊息示例
Error Saving Revision 6
Error occurred while validation of bean Extract-Variables-1.xml. Reason: - Required attribute name is missing in Variable
螢幕截圖範例
原因
如果「擷取變數」政策在任何需要 name
屬性的政策元素 (例如 QueryParam
、Header
、FormParam
或 Variable
) 中,都沒有 name
屬性,則 API 代理程式會部署失敗。
舉例來說,如果 Variable
元素缺少 name
屬性,就會發生這個錯誤。
診斷
找出發生錯誤的「擷取變數」政策名稱,以及缺少
name
屬性的元素。您可以在錯誤訊息中找到這些項目。舉例來說,在以下錯誤中,政策名稱為Extract-Variables-1
,元素名稱為Variable
:Error occurred while validation of bean Extract-Variables-1.xml. Reason: - Required attribute name is missing in Variable
在失敗的「擷取變數」政策 XML 中,請確認所有名稱均符合上述步驟 1 所決定的元素,都具有
name
屬性。如果有任何元素缺少名稱屬性,就是錯誤的原因。舉例來說,下列「擷取變數」政策已定義
<Variable>
元素:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1"> <DisplayName>Extract Variables-1</DisplayName> <Properties/> <Variable type="boolean"> <Pattern>{isAccountActive}</Pattern> </Variable> </ExtractVariables>
請注意,
Variable
元素缺少name
屬性,因此 API Proxy 的部署作業會失敗。
解決方法
請確認「擷取變數」政策包含 QueryParam
、Header
、FormParam
或 Variable
元素所需的 name
屬性。例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
<DisplayName>Extract Variables-1</DisplayName>
<Properties/>
<Variable name="account_active" type="boolean">
<Pattern>{isAccountActive}</Pattern>
</Variable>
</ExtractVariables>
PatternWithoutVariable
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 時失敗,並顯示以下錯誤訊息:
Error Saving Revision [revision_number] Pattern [pattern] should have at least one variable in ExtractVariables stepDefinition [policy_name]
錯誤訊息示例
Error Saving Revision 7
Pattern /a/b/ should have at least one variable in ExtractVariables stepDefinition ExtractVariables-1.
螢幕截圖範例
原因
如果「擷取變數」政策在 <Pattern>
元素中未指定變數,API 代理程式就無法部署。<Pattern>
元素需要變數名稱,用於儲存擷取的資料。
診斷
找出發生錯誤的「擷取變數」政策名稱,以及缺少變數的模式。您可以在錯誤訊息中找到這些項目。舉例來說,在以下錯誤中,政策名稱為
Extract-Variables-1
,元素名稱為/a/b
:Pattern /a/b/ should have at least one variable in ExtractVariables stepDefinition ExtractVariables-1.
在失敗的「擷取變數」政策 XML 中,請確認
<Pattern>
元素中設定的模式與錯誤訊息中指出的模式相符 (請參閱上述步驟 1)。舉例來說,下列政策會指定模式/a/b
,與錯誤訊息中的內容相符:舉例來說,以下是包含三個
<Pattern>
元素的「擷取變數」政策:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractVariables-1"> <Source>request</Source> <URIPath> <Pattern ignoreCase="true">/a/{pathSeg}</Pattern> <Pattern ignoreCase="true">/a/b/</Pattern> <Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> </ExtractVariables>
檢查步驟 2 中所識別的
<Pattern>
元素是否沒有變數。變數必須用大括號括住。如果模式沒有變數,則是錯誤的原因。模式為 /a/b 的
<Pattern>
元素不含變數,因此 API Proxy 的部署作業會失敗<Pattern ignoreCase="true">/a/b/</Pattern>
解決方法
請確認所有 <Pattern>
元素都包含變數 (以大括號括住的名稱)。例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
<Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
<Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
</ExtractVariables>
CannotBeConvertedToNodeset
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 時失敗,並顯示以下錯誤訊息:
Error Deploying Revision [revision_number] ExtractVariables [policy_name]: Result of xpath [policy_name] cannot be converted to nodeset. Context Revision:[revision_number]; APIProxy:[proxy_name]; Organization:[org_name]; Environment:[env_name].
錯誤訊息示例
Error Deploying Revision 4 to test
ExtractVariables Extract-Variables-1: Result of xpath 123 cannot be converted to nodeset. Context Revision:4;APIProxy:EV-XML;Organization:aprabhashankar-eval;Environment:test.
螢幕截圖範例
原因
如果「擷取變數」政策含有 <XPath>
運算式,且 <Variable>
類型定義為 nodeset,但運算式無法轉換為 nodeset,則 API 代理程式部署作業會失敗。
診斷
找出發生錯誤的「擷取變數」政策,以及無法轉換為節點集的 XPath。您可以在錯誤訊息中找到這兩項項目。舉例來說,在下列錯誤中,政策名稱為
Extract-Variables-1
,XPath 為123
。ExtractVariables Extract-Variables-1: Result of xpath 123 cannot be converted to nodeset. Context Revision:4;APIProxy:EV-XML;Organization:aprabhashankar-eval;Environment:test.
在失敗的「擷取變數」政策 XML 中,請確認
<XPath>
元素中設定的 XPath 與錯誤訊息中指出的 XPath 相符 (步驟 1 上方)。例如,下列政策會將指定為 123
,與錯誤訊息中的內容相符:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1"> <DisplayName>Extract Variables-1</DisplayName> <Properties/> <Source clearPayload="false">request</Source> <VariablePrefix>visitor</VariablePrefix> <XMLPayload stopPayloadProcessing="false"> <Namespaces/> <Variable name="age" type="nodeset"> <XPath>123</XPath> </Variable> </XMLPayload> </ExtractVariables>
檢查
<Variable>
元素的類型,對應至上述步驟 2 中所識別的<XPath>
。如果<Variable>
類型為nodeset
,則是錯誤的原因。請注意,在「提取變數」政策範例中,
<XPath>
運算式為123
。<XPath>123</XPath>
運算式
123
無法轉換為節點集。因此,API Proxy 的部署作業會失敗。
解決方法
如果 <Variable>
類型定義為節點集,請確認在「擷取變數」政策中使用的 <XPath>
運算式可轉換為節點集。例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
<DisplayName>Extract Variables-1</DisplayName>
<Properties/>
<Source clearPayload="false">request</Source>
<VariablePrefix>visitor</VariablePrefix>
<XMLPayload stopPayloadProcessing="false">
<Namespaces/>
<Variable name="age" type="nodeset">
<XPath>/visitor/age</XPath>
</Variable>
</XMLPayload>
</ExtractVariables>
InvalidPattern
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 時失敗,並顯示以下錯誤訊息:
Error Deploying Revision [revision_number]
Pattern [pattern] is invalid in ExtractVariables stepDefinition [policy_name]
錯誤訊息示例
Error Deploying Revision 18 to test
Pattern {*} is invalid in ExtractVariables stepDefinition ExtractVariables-2.
螢幕截圖範例
原因
如果在「擷取變數」政策中的任何元素 (例如 URIPath
、QueryParam
、Header
、FormParam
、XMLPayload
或 JSONPayload
) 中,<Pattern>
元素定義無效,則 API 代理程式部署作業會失敗。
診斷
從錯誤訊息中找出失敗的「擷取變數」政策。舉例來說,在以下錯誤中,政策名稱為
Extract-Variables-2
:Pattern {*} is invalid in ExtractVariables stepDefinition ExtractVariables-2.
在失敗的「擷取變數」政策 XML 中,請檢查是否有下列元素,並包含
<Pattern>
元素:URIPath
、QueryParam
、Header
、FormParam
、XMLPayload
或JSONPayload
。舉例來說,以下是「擷取變數」政策的範例,其中
<QueryParam>
元素內含<Pattern>
元素:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractVariables-2"> <DisplayName>ExtractVariables-2</DisplayName> <Source>request</Source> <QueryParam name="code"> <Pattern ignoreCase="true">{*}</Pattern> </QueryParam> <VariablePrefix>queryinfo</VariablePrefix> </ExtractVariables>
請查看每個
<Pattern>
元素的定義。如果有任何<Pattern>
元素定義無效,則該元素是錯誤的原因。請注意,在上述範例的「擷取變數」政策中,
<QueryParam>
元素中的<Pattern>
定義無效,因此 API Proxy 的部署作業會失敗。另請參閱關於比對和變數建立<Pattern ignoreCase="true">{*}</Pattern>
解決方法
請確認「擷取變數」政策中 URIPath
、QueryParam
、Header
、FormParam
、XMLPayload
或 JSONPayload
元素中的 <Pattern>
元素定義有效。例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractVariables-2">
<DisplayName>Extract a value from a query parameter</DisplayName>
<Source>request</Source>
<QueryParam name="code">
<Pattern ignoreCase="true">{code}</Pattern>
</QueryParam>
<VariablePrefix>queryinfo</VariablePrefix>
</ExtractVariables>
另請參閱「關於比對和變數建立」
XPathCompilationFailed
錯誤訊息
透過 Apigee UI 或 API 部署 API Proxy 失敗,並顯示以下錯誤訊息:
Error Deploying Revision [revision_number] ExtractVariables [policy_name]: Failed to compile xpath [xpath] Context Revision:[revision_number]; APIProxy:[proxy_name]; Organization:[org_name]; Environment:[env_name].
錯誤訊息示例
Error Deploying Revision 1 to test
ExtractVariables EV-XML-Age: Failed to compile xpath /apigee:Directions/apigee:route/apigee:leg/apigee:name. Context Revision:1;APIProxy:EV-XML;Organization:aprabhashankar-eval;Environment:test.
螢幕截圖範例
原因
如果 <XPath>
元素中使用的前置字串或值並非「Extract Variables」政策中宣告的任何命名空間的一部分,則 API 代理程式部署作業會失敗。
如要進一步瞭解命名空間、XPath 和前置字串,請參閱「XML 命名空間及其對 XPath 和 XSLT 的影響」。
診斷
找出發生錯誤的「擷取變數」政策,以及無法編譯的 XPath。您可以在錯誤訊息中找到這兩項項目。舉例來說,在下列錯誤中,政策名稱為
EV-XML-Age
,而 xpath 為/apigee:Directions/apigee:route/apigee:leg/apigee:name
。ExtractVariables EV-XML-Age: Failed to compile xpath /apigee:Directions/apigee:route/apigee:leg/apigee:name. Context Revision:1;APIProxy:EV-XML;Organization:aprabhashankar-eval;Environment:test.
在失敗的「擷取變數」政策 XML 中,請確認
<XPath>
元素中設定的 XPath 與錯誤訊息中指出的 XPath 相符 (步驟 1 上方)。例如,下列政策會將指定為 /apigee:Directions/apigee:route/apigee:leg/apigee:name
,與錯誤訊息中的內容相符:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age"> <DisplayName>EV-XML-Age</DisplayName> <Source clearPayload="false">request</Source> <XMLPayload stopPayloadProcessing="false"> <Namespaces> <Namespace prefix="gmail">http://mail.google.com</Namespace> </Namespaces> <Variable name="legName" type="string"> <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath> </Variable> </XMLPayload> </ExtractVariables>
請檢查「擷取變數」政策中的
<Namespaces>
和<XPath>
元素。如果錯誤訊息中指出的特定<XPath>
使用前置字元或值,而該前置字元或值並非在「提取變數」政策中宣告的命名空間的一部分,則表示這是錯誤的原因。請注意,在「提取變數」政策範例中,特定
<XPath>
使用前置字串apigee
。<XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
不過,前置字串
apigee
並未在任何<Namespace>
元素中定義,因此<XPath>
的編譯作業會失敗,導致部署失敗。
解決方法
請確認在 <XPath>
元素中使用的所有命名空間,都已在「擷取變數」政策中宣告。例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
<DisplayName>EV-XML-Age</DisplayName>
<Source clearPayload="false">request</Source>
<XMLPayload stopPayloadProcessing="false">
<Namespaces>
<Namespace prefix="apigee">http://www.apigee.com</Namespace>
<Namespace prefix="gmail">http://mail.google.com</Namespace>
</Namespaces>
<Variable name="legName" type="string">
<XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
</Variable>
</XMLPayload>
</ExtractVariables>