擷取變數政策部署作業時發生錯誤

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

NothingToExtract

錯誤訊息

無法透過 Edge UI 或 Edge Management 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.

螢幕截圖範例

原因

如果擷取變數政策中沒有任何 URIPathQueryParamHeaderFormParamXMLPayloadJSONPayload 元素,API Proxy 的部署作業就會失敗,因為沒有可擷取的項目。

如錯誤訊息中所述,擷取變數政策必須包含至少一個下列元素:URIPathQueryParamHeaderFormParamXMLPayloadJSONPayload

診斷

檢查錯誤訊息中提及的「擷取變數」政策。如果政策沒有下列其中一個元素:URIPathQueryParamHeaderFormParamXMLPayloadJSONPayload,就會導致錯誤。舉例來說,下列「擷取變數」政策不含任何上述元素:

<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
    <DisplayName>EV-XML-Age</DisplayName>
    <Properties/>
</ExtractVariables>

由於「擷取變數」政策中沒有任何必要元素,因此 API Proxy 部署失敗。

解析度

請確認「擷取變數」政策至少有一個必要元素:URIPathQueryParamHeaderFormParamXMLPayloadJSONPayload。例如:

<?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

錯誤訊息

無法透過 Edge UI 或 Edge Management 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,就會發生這個錯誤。

診斷

  1. 找出發生錯誤的「擷取變數」政策和前置字串名稱。您可以在錯誤訊息中找到這兩個項目。舉例來說,在下列錯誤中,政策名稱是 EV-XML-Age,前置字串為 apigee

    ExtractVariables EV-XML-Age: Non-empty prefix apigee cannot be mapped to empty uri.
    
  2. 請在失敗的「擷取變數」政策 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>
    
  3. 驗證步驟 #2 中識別的特定前置字串的 <Namespace> 元素是否具備有效的 URI。如果缺少 URI,就是導致錯誤的原因。

    在上述的「擷取變數」政策範例中,請注意,沒有任何 URI 與 <Namespace> 元素含有 apigee 前置字元。因此,您會收到錯誤訊息:

    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

錯誤訊息

無法透過 Edge UI 或 Edge Management 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>

診斷

  1. 找出發生錯誤的「擷取變數」政策和前置字串名稱。您可以在錯誤訊息中找到這兩個項目。舉例來說,在下列錯誤中,政策名稱是 EV-XML-Age,前置字元為 apigee

    ExtractVariables EV-XML-Age: Duplicate prefix apigee.
    
  2. 請在失敗的「擷取變數」政策 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>
    
  3. 判斷步驟 2 中識別的 <Namespace> 元素是否包含特定前置字元 (如步驟 #2 所示) 超過一次。如果定義超過一次,就會導致錯誤。

    在上述「擷取變數」政策範例中,您會發現帶有 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

錯誤訊息

無法透過 Edge UI 或 Edge Management 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 Proxy 部署作業會失敗,並出現上述錯誤。

診斷

  1. 找出錯誤訊息中失敗的「擷取變數」政策。舉例來說,在下列錯誤中,政策名稱會是 Extract-Variables-1

    ExtractVariables Extract-Variables-1: no xpaths to evaluate in variable name.
    
  2. 在失敗的「擷取變數」政策 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

錯誤訊息

無法透過 Edge UI 或 Edge Management 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 Proxy 部署就會失敗。

診斷

  1. 找出錯誤訊息中失敗的「擷取變數」政策。舉例來說,在下列錯誤中,政策名稱會是 Extract-Variables-1

    ExtractVariables Extract-Variables-1: no xpaths to evaluate in variable name.
    
  2. 在失敗的「擷取變數」政策 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

錯誤訊息

無法透過 Edge UI 或 Edge Management 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 Proxy 部署作業會失敗,並出現上述錯誤。

診斷

  1. 找出錯誤訊息中失敗的「擷取變數」政策。舉例來說,在下列錯誤中,政策名稱會是 Extract-Variables-1

    ExtractVariables Extract-Variables-1: no jsonpaths to evaluate in variable name.
    
  2. 在失敗的「擷取變數」政策 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

錯誤訊息

無法透過 Edge UI 或 Edge Management 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 Proxy 部署就會失敗。

診斷

  1. 找出錯誤訊息中失敗的「擷取變數」政策。舉例來說,在下列錯誤中,政策名稱會是 Extract-Variables-1

    ExtractVariables Extract-Variables-1: JSONPath expression is empty in variable name.
    
  2. 在失敗的「擷取變數」政策 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

錯誤訊息

無法透過 Edge UI 或 Edge Management 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

螢幕截圖範例

原因

如果「擷取變數」政策在必要的任何政策元素中 (例如 QueryParamHeaderFormParamVariable),但其中沒有 name 屬性,API Proxy 部署就會失敗。

例如,如果 Variable 元素缺少 name 屬性,就會發生這個錯誤。

診斷

  1. 找出發生錯誤的「擷取變數」政策名稱,以及缺少 name 屬性的元素。您可以在錯誤訊息中找到這些項目。舉例來說,在下列錯誤中,政策名稱為 Extract-Variables-1,元素名稱為 Variable

    Error occurred while validation of bean Extract-Variables-1.xml. Reason: - Required attribute name is missing in Variable
    
  2. 在失敗的「擷取變數」政策 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 的部署作業失敗。

解析度

確認「擷取變數政策」包含 QueryParamHeaderFormParamVariable 元素所需的 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

錯誤訊息

無法透過 Edge UI 或 Edge Management 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 Proxy 部署失敗。<Pattern> 元素需要指定要儲存擷取資料的變數名稱。

診斷

  1. 找出發生錯誤的「擷取變數」政策名稱,以及缺少變數的模式。您可以在錯誤訊息中找到這些項目。舉例來說,在下列錯誤中,政策名稱為 Extract-Variables-1,元素名稱為 /a/b

    Pattern /a/b/ should have at least one variable in ExtractVariables stepDefinition ExtractVariables-1.
    
  2. 請在失敗的「擷取變數」政策 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>
    
  3. 檢查步驟 #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

錯誤訊息

無法透過 Edge UI 或 Edge Management 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 Proxy 部署就會失敗。

診斷

  1. 找出發生錯誤的「擷取變數」政策,以及無法轉換為 Nodeset 的 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.
    
  2. 請在失敗的「擷取變數」政策 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>
    
  3. 檢查對應步驟 #2 中所識別 <XPath><Variable> 元素類型。如果 <Variable> 類型為 nodeset,就是錯誤的原因。

    請注意,「擷取變數」政策範例中的 <XPath> 運算式為 123

    <XPath>123</XPath>
    

    運算式「123」無法轉換為節點集。因此 API Proxy 的部署失敗。

解析度

如果 <Variable> 類型已定義為節點集,請確認「擷取變數」政策中使用的 <XPath> 運算式可轉換為 nodeset。例如:

<?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

錯誤訊息

無法透過 Edge UI 或 Edge Management 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.

螢幕截圖範例

原因

在「擷取變數政策」中,如果任何元素 (例如 URIPathQueryParamHeaderFormParamXMLPayloadJSONPayload) 中的 <Pattern> 元素定義無效,API Proxy 部署就會失敗。

診斷

  1. 找出錯誤訊息中的「擷取變數」政策失敗。舉例來說,在下列錯誤中,政策名稱會是 Extract-Variables-2

    Pattern {*} is invalid in ExtractVariables stepDefinition ExtractVariables-2.
    
  2. 在失敗的「擷取變數」政策 XML 中,請檢查是否出現上述任一元素,並加入 <Pattern> 元素:URIPathQueryParamHeaderFormParamXMLPayloadJSONPayload

    舉例來說,以下是「擷取變數」政策的範例,其在 <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>
    
  3. 檢查每個 <Pattern> 元素的定義。如有任何 <Pattern> 元素具有無效的定義,就會導致錯誤。

    在上述「擷取變數」政策範例中,請注意 <QueryParam> 元素中的 <Pattern> 定義無效,因此 API Proxy 的部署作業失敗。另請參閱關於比對及建立變數

    <Pattern ignoreCase="true">{*}</Pattern>
    
    

解析度

請確認「擷取變數」政策中的 URIPathQueryParamHeaderFormParamXMLPayloadJSONPayload 元素中的 <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

錯誤訊息

無法透過 Edge UI 或 Edge Management 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> 元素中使用的前置字元或值不在「擷取變數政策」中宣告的任何命名空間中,API Proxy 部署作業就會失敗。

如要進一步瞭解命名空間、XPath 和前置字串,請參閱 XML 命名空間以及它們對 XPath 和 XSLT 的影響

診斷

  1. 找出發生錯誤的「擷取變數」政策和無法編譯的 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.
    
  2. 請在失敗的「擷取變數」政策 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>
    
  3. 檢查「擷取變數」政策中的 <Namespaces><XPath> 元素。如果錯誤訊息中指定的特定 <XPath> 使用的前置字元或值不屬於「擷取變數」政策中宣告的命名空間,就會導致發生錯誤。

    請注意,特定 <XPath> 會使用「擷取變數」政策範例中的前置字串 apigee

    <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
    

    不過,沒有任何 <Namespace> 元素定義了 apigee 前置字串,因此 <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>