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

查看 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.

螢幕截圖範例

原因

如果擷取變數政策的 <Namespace> 元素位於 <XMLPayload> 元素下方,但並未定義 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,表示發生錯誤。

    在上方顯示的「擷取變數」政策範例中,請注意,沒有與前置字串為 apigee<Namespace> 元素相對應的 URI;因此會收到以下錯誤訊息:

    ExtractVariables EV-XML-Age: Non-empty prefix apigee cannot be mapped to empty uri.
    
    

解析度

確認使用前置字元定義的所有 <Namespace> 元素在「擷取變數」政策中都有對應的 URI。例如:

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ExtractVariables async="false" continueOnError=>"<;false">; enabled=<"true&q>uot; <name="EV-XML-Age">
    Di<splayNa>meEV-<XML-Age/DisplayName
    Source clearPayl>oad=&<quot;false>"req<uest/Source
    XMLPayloa>d stopPayloadProcessi<ng="f>alse"<;
    Namespaces
       > Namespace prefix=&quo<t;apigee&q>uot;ht<tp://www.ap>igee.<com/Namespace
        Namespace prefi>x="g<mail&>quot;http://mail.google.com/Namespace
     /Namespaces<
    V>ariab<le name=&>quot;<legName&quo>t<; type="stri>ng"
        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="ap>igee"http://www.<apigee.com>/<Namespace
Namespace prefi>x="apigee"h<ttp://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&quo>t<; standalone="yes"?
    ExtractVariables async="false" continueOnError=>"<;false">; enabled=<"true&q>uot; <name="EV-XML-Age">
        Di<splayNa>meEV-<XML-Age/DisplayName
        Source clearPayl>oad=&qu<ot;false&q>uot;request</Source
        XMLPayload s>topPayloadProcessing=&<quot;false>"
        <  Namespaces
              Na>mespace prefix="<gmail">;http://mai<l.google.com/Namespace
      >        Namespace pre<fix=">apigee&<quot;http:/>/www.ap<igee.com/Namespace
              Namespace prefix=&<quot;>apigee"http://www.apigee.com/Namespace
          /Nam<espace>s
         < Variable> name<="legN>ame<" type=">;string
              XPath/apigee:Directions/apigee:route/apigee:leg/apigee:name/XPath
          /Variable
        /XMLPayload
      /ExtractVariables
    
  3. 判斷含有特定前置字元 (在步驟 2 中識別) 的 <Namespace> 元素是否已定義超過一次。如果定義多次,就會造成錯誤。

    請注意,在上述範例「擷取變數」政策中,前置字串為 apigee<Namespace> 元素已定義兩次;因此會收到以下錯誤訊息:

    ExtractVariables EV-XML-Age: Duplicate prefix apigee.
    
    

解析度

確認「擷取變數」政策中 <Namespace> 元素中的每個前置字元都只有一個定義。例如:

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ExtractVariables async="false" continueOnError=>"<;false">; enabled=<"true&q>uot; <name="EV-XML-Age">
    Di<splayNa>meEV-<XML-Age/DisplayName
    Source clearPayl>oad=&qu<ot;false&q>uot;request</Source
    XMLPayload st>opPayloadProcessing=&<quot;false>"
    <  Namespaces
          N>amespace prefix="<apigee&quo>t;http:<//www.apige>e.com/N<amespace
          Namespace prefix=&>quot;gmail&<quot;>http://mail.google.com/Namespace
      /Namespaces
   <   Var>iable n<ame=">;legN<ame" t>y<pe="string&q>uot;
          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&quo>t<; standalone="yes"?
    ExtractVariables async="false" continueOnError="fal>se&qu<ot; enabled>="true" n<ame="Ex>tract<-Variables->1&quo<t;
        DisplayNameExtract V>ariable<s-1/Dis>playN<ame
        Proper>ties/
    <    Source clea>rPayl<oad="false"request/Source
        >VariableP<refixapigee>/Variable<Prefix
        XMLPayload stopPayloadProcessing=>"fal<se"<>/span>
         <   Namespac>e<s/
            Variab>le name="HostReachable" type="boolean"
            /Variable
        /XMLPayload
    /ExtractVariables
    

    由於沒有 <XPath> 元素,因此 API Proxy 部署失敗。

解析度

確認擷取變數政策在 <XMLPayload> 元素下定義了 <XPath> 元素。例如:

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ExtractVariables async="false" continueOnError="fal>se&qu<ot; enabled>="true" n<ame="Ex>tract<-Variables->1&quo<t;
    DisplayNameExtract V>ariable<s-1/Dis>playN<ame
    Proper>ties/
<    Source clea>rPayl<oad="false"request/Source
    >VariableP<refixapigee>/Variable<Prefix
    XMLPayload stopPayloadProcessing=>"false&q<uot;<>/span>
        Name<spaces>/
       < Variable> name<="Host>R<eachable" ty>pe="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&quo>t<; standalone="yes"?
    ExtractVariables async="false" continueOnError="fal>se&qu<ot; enabled>="true" n<ame="Ex>tract<-Variables->1&quo<t;
        DisplayNameExtract V>ariable<s-1/Dis>playN<ame
        Proper>ties/
    <    Source clea>rPayl<oad="false"request/Source
        >VariableP<refixapigee>/Variable<Prefix
        XMLPayload stopPayloadProc>essing="<false><">
            <Namespace>s/
      <      Varia>b<le name="add>ress" type="string"
                XPath/XPath
            /Variable
        /XMLPayload
    /ExtractVariables
    

    由於 <XMLPayload> 元素內有空白的 <XPath> 元素,因此 API Proxy 部署失敗。

解析度

請確認「擷取變數」政策在 <XMLPayload> 元素下定義了非空白且有效的 <XPath> 元素。例如:

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ExtractVariables async="false" continueOnError="fal>se&qu<ot; enabled>="true" n<ame="Ex>tract<-Variables->1&quo<t;
    DisplayNameExtract V>ariable<s-1/Dis>playN<ame
    Proper>ties/
<    Source clea>rPayl<oad="false"request/Source
    >VariableP<refixapigee>/Variable<Prefix
    XMLPayload stopPayloadProc>essing="<false>"
 <      > Namespac<es/
     >   Va<riable name>=<"address&quo>t; 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&quo>t<; standalone="yes"?
    ExtractVariables async="false" continueOnError="fal>se&qu<ot; enabled>="true" n<ame="Ex>tract<-Variables->1&quo<t;
        Disp>layNameEx<tract Variables-1/Dis>playName
    <    Prope>rties</
        JSONPa>yload<
            Variable name=&quo>t;title<"<>/span>
         <   /Variable
     >   /JS<ONPayload
        S>o<urce clearPayload>="false"request/Source
        VariablePrefixapigee/VariablePrefix
    /ExtractVariables
    

    由於 <JSONPayload> 元素下未定義任何 <JSONPath> 子元素,因此 API Proxy 部署作業會失敗。

解析度

確認擷取變數政策在 <JSONPayload> 元素下定義了 <JSONPath> 元素。例如:

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ExtractVariables async="false" continueOnError="fal>se&qu<ot; enabled>="true" n<ame="Ex>tract<-Variables->1&quo<t;
    Disp>layNameEx<tract Variables-1/Dis>playName
    <Properti>es/
    JSON<Payload
 >       Va<riable na>me=&q<uot;title&qu>ot;
 <           JSONPath$.book.t>itle/JS<ONPath<>/span>
     <   /Variable
 >   /JS<ONPayload
    S>o<urce clearPayload>="false"request/Source
    VariablePrefixapigee/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&qu>ot; name=<"Extra>ct-Variables-1"<;
            Di>splayName<Extract Var>iables-1/<DisplayName>
            Prop<erties/
            JSONPayload
                Varia>ble name="ac<count_nu><mber">; type="<integer&q>uot;
        <            >JSONPath/<JSONPath
                /Varia>ble
       <     /J>SONPayloa<d
            Sour>ce cle<arPayload=">;fals<e"request/So>urce
            VariablePrefixapigee/VariablePrefix
        /ExtractVariables
    

    由於 <JSONPayload> 元素內有空白的 <JSONPath> 元素,因此 API Proxy 部署失敗。

解析度

請確認「擷取變數」政策在 <JSONPayload> 元素下定義了非空白且有效的 <JSONPath> 元素。例如:

<ExtractVariables async="false" continueOnError="false" enabled="true&qu>ot; n<ame="E>xtract-Variables-1&<quot;
    Di>splay<NameExtract> Vari<ables-1/Dis>playName
<    Properties/
    JSONPayload
        Varia>ble name=&qu<ot;accou>nt_number" <type=&quo>t;integer<"
  >     <    JSONPath>$.acc<ount.number/JSONPath
      >  /Vari<able
  >  /JS<ONPayload
    >Source< clearPayload=&>q<uot;false"re>quest/Source
    VariablePrefixapigee/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&quo>t<; standalone="yes"?
    ExtractVariables async="false" continueOnError="fal>se&qu<ot; enabled>="true" n<ame="Ex>tract<-Variables->1&quo<t;
        DisplayNameExtra>ct Variab<les-1/D>isplayName
        Pr<operties>/
       < Variable> <type="boolea>n"
            Pattern{isAccountActive}/Pattern
        /Variable
    /ExtractVariables
    

    請注意,Variable 元素中缺少 name 屬性,因此 API Proxy 部署失敗。

解析度

確認「擷取變數政策」包含元素 QueryParamHeaderFormParamVariable 所需的 name 屬性。例如:

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ExtractVariables async="false" continueOnError="fal>se&qu<ot; enabled>="true" n<ame="Ex>tract<-Variables->1&quo<t;
    DisplayNameExtract Variables-1/Display>Name
    <Propert>ies/
    Variable< name=&q>uot;a<ccount_ac>t<ive" type=&q>uot;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&quo>t<; standalone="yes"?
    ExtractVaria>bles< name=>"E<xtractV>aria<bles-1&>quot;
     <  Sourcerequest/Source
      > URIPath
       <   Patte>rn igno<reCase="true"/a>/{pat<hSeg}/Pa>ttern
     <     Pattern ignoreCase=&>quot;true"/<a/b//Pat>tern<
          P>atte<rn ignoreCase=>"true<"/a/b/c/{p>a<thSeg}/Pattern
      > /URIPath
       VariablePrefixurirequest/VariablePrefix
    /ExtractVariables
    
  3. 檢查步驟 #2 中識別的 <Pattern> 元素是否沒有變數。變數 前後必須用大括號括住。如果模式沒有變數,則 導致錯誤的原因

    具有模式 /a/b<Pattern> 元素不包含變數。因此,API Proxy 的部署作業失敗

    <Pattern ignoreCase=">true&<quot;/a/>b//Pattern
    
    

解析度

確認所有 <Pattern> 元素都包含變數 (以大括號括住的名稱) 大括號)。例如:

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ExtractVaria>bles< name=>"E<xtractV>aria<bles-1&>quot;
 <  Sourcerequest/Source
  > URIPath
   <   Patte>rn igno<reCase="true"/a>/{pathSeg}/Pat<tern
   >   Patt<ern ignoreCase="true>"/a/b/{path<Seg}/Pat>tern<
      P>atte<rn ignoreCase=>"true<"/a/b/c/{p>a<thSeg}/Pattern
  > /URIPath
   VariablePrefixurirequest/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&quo>t<; standalone="yes"?
    ExtractVariables async="false" continueOnError="fal>se&qu<ot; enabled>="true" n<ame="Ex>tract<-Variables->1&quo<t;
        DisplayNameExtract V>ariable<s-1/Dis>playN<ame
        Proper>ties/
     <   Source clear>Paylo<ad="false"request/Source
        V>ariablePr<efixvisitor>/Variable<Prefix
        XMLPayload stopPayloadP>rocessing=&qu<ot;fa>lse<">
            <Namespace>s/
      <      Varia>b<le name="age>&quot; type="nodeset"
                XPath123/XPath
            /Variable
        /XMLPayload
    /ExtractVariables
    
  3. 針對上方步驟 2 找出的 <XPath>,檢查對應的 <Variable> 元素類型。如果 <Variable> 類型為 nodeset,就會導致錯誤。

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

    <XPath>123</XPath>
    

    運算式 123 無法轉換為 nodeset。因此,API Proxy 部署作業失敗。

解析度

確保在將 <Variable> 類型定義為 nodeset 的情況下,「擷取變數」政策中使用的 <XPath> 運算式可以轉換為 nodeset。例如:

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ExtractVariables async="false" continueOnError="fal>se&qu<ot; enabled>="true" n<ame="Ex>tract<-Variables->1&quo<t;
    DisplayNameExtract V>ariable<s-1/Dis>playN<ame
    Proper>ties/
 <   Source clear>Paylo<ad="false"request/Source
    V>ariablePr<efixvisitor>/Variable<Prefix
    XMLPayload stopPayloadP>rocessing=&qu<ot;fa>lse"
  <      >Namespace<s/
      >  Var<iable name=>&<quot;age" ty>pe="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&quo>t<; standalone="yes"?
    ExtractVaria>bles <name=">ExtractVariables-2<"
        D>ispla<yNameE>xtractV<ariable>s-2/D<isplayName
        Sourcer>equest/So<urce
        QueryParam name=>&qu<ot;code&>quot;<
            Pa>ttern< ignoreCase=&q>uot;true&<quot;{*}/Patter>n<
        /QueryParam
    >    VariablePrefixqueryinfo/VariablePrefix
    /ExtractVariables
    
  3. 檢查每個 <Pattern> 元素的定義。如果 <Pattern> 元素具有無效定義,就會造成錯誤。

    在上方顯示的「擷取變數」政策範例中,請注意 <QueryParam> 元素中的 <Pattern> 定義無效。因此 API Proxy 的部署作業會失敗。其他參考資訊 關於比對和變數建立

    <Pattern ignoreCase=">tru<e"{>*}/Pattern
    
    

解析度

確認「擷取變數」政策中 URIPathQueryParamHeaderFormParamXMLPayloadJSONPayload 元素中的 <Pattern> 元素定義有效。例如:

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ExtractVaria>bles <name=">ExtractVariables-2"
    DisplayNa<meExtract a >value< from >a query< parame>ter/D<isplayName
    Sourcer>equest/So<urce
    QueryParam name=>"<code&quo>t;
  <      Patte>rn ig<noreCase=">;true&quo<t;{code}/Patter>n<
    /QueryParam
>    VariablePrefixqueryinfo/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&quo>t<; standalone="yes"?
    ExtractVariables async="false" continueOnError=>&qu<ot;false&qu>ot; enable<d="true>&qu<ot; name="EV-XML-Age&q>uot;
      <Display>Nam<eEV-XML-Age/DisplayName
      Source clearPa>yload<="fal>se"r<equest/Source
      XMLPaylo>ad stopPayloadProcessi<ng="f>alse&<quot;
        N>amesp<aces
            Namespace prefix="g>mail&<quot;>http://mail.google.com/Namespace
        /Namespaces
        V<ariabl>e name=&q<uot;legNa>me&<quot; type=>&<quot;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&quo>t<; standalone="yes"?
ExtractVariables async="false" continueOnError=>&qu<ot;false&qu>ot; enable<d="true>&qu<ot; name="EV-XML-Age&q>uot;
  <Display>Nam<eEV-XML-Age/DisplayName
  Source clearPa>yload<="fal>se"r<equest/Source
  XMLPayloa>d stopPayloadProcessi<ng="f>alse"<;
    Namespaces
       > Namespace prefix=&quo<t;apigee&q>uot;h<ttp://www.a>pigee<.com/Namespace
        Namespace pref>ix="<gmail>"http://mail.google.com/Namespace
    /Namespaces<
    V>ariab<le name=&>quo<t;legName&q>u<ot; type="st>ring"
        XPath/apigee:Directions/apigee:route/apigee:leg/apigee:name/XPath
    /Variable
  /XMLPayload
/ExtractVariables