提取变量政策部署错误问题排查

您正在查看 ApigeeApigee Hybrid 文档。
查看 Apigee Edge 文档。

NothingToExtract

错误消息

通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:

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.

示例屏幕截图

保存修订版本 2 时出错。

原因

如果提取变量政策没有元素 URIPathQueryParamHeaderFormParamXMLPayloadJSONPayload 中的任一个,则 API 代理部署将失败,因为没有要提取的内容。

如错误消息中所示,提取变量政策必须至少在政策中包含以下元素之一:URIPathQueryParamHeaderFormParamXMLPayloadJSONPayload

诊断

检查错误消息中指定的提取变量政策。如果政策没有以下元素之一:URIPathQueryParamHeaderFormParamXMLPayloadJSONPayload,则会导致错误。例如,以下提取变量政策没有任何上述元素:

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

由于提取变量政策中未包含任何必需元素,因此 API 代理部署将失败。

解决方法

确保提取变量政策至少包含以下一个必需元素: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

错误消息

通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:

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.

示例屏幕截图

保存修订版本 3 时出错。

原因

如果提取变量政策在 <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,则会导致错误。

    在上面显示的提取变量政策示例中,请注意没有与前缀为 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" 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 界面或 API 部署 API 代理失败并显示以下错误消息:

Error Saving Revision [revision_number]
ExtractVariables [policy_name]: Duplicate prefix [prefix_name].

错误消息示例

Error Saving Revision 2
ExtractVariables EV-XML-Age: Duplicate prefix apigee.

示例屏幕截图

保存修订版本 2 时出错。

原因

如果提取变量政策在 <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> 元素是否定义了多次。如果定义多次,则会导致错误。

    在上面显示的提取变量政策示例中,请注意前缀为 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 界面或 API 部署 API 代理失败并显示以下错误消息:

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.

示例屏幕截图

保存修订版本 4 时出错。

原因

如果提取变量政策在 <XMLPayload> 元素中没有 <XPath> 元素,则 API 代理部署将失败并显示上面显示的错误。

诊断

  1. 从错误消息中确定失败的提取变量政策。例如,在以下错误中,政策名称为 Extract-Variables-1

    ExtractVariables Extract-Variables-1: no xpaths to evaluate in variable name.
    
  2. 在失败的提取变量政策 XML 中,检查是否存在没有 <XPath> 子元素的 <XMLPayload> 元素。如果是,就会导致错误。

    例如,以下是具有 <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 代理部署失败。

解决方法

确保提取变量政策在 <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 界面或 API 部署 API 代理失败并显示以下错误消息:

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.

示例屏幕截图

保存修订版本 6 时出错。

原因

如果提取变量政策在 <XMLPayload> 元素内包含空的 <XPath> 表达式,则 API 代理部署将失败。

诊断

  1. 从错误消息中确定失败的提取变量政策。例如,在以下错误中,政策名称为 Extract-Variables-1

    ExtractVariables Extract-Variables-1: no xpaths to evaluate in variable name.
    
  2. 在失败的提取变量政策 XML 中,确定是否有 <XPath> 子元素为空的 <XMLPayload> 元素。如果是,就会导致错误。

    例如,以下是具有 <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 代理部署将失败。

解决方法

确保提取变量政策在 <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 界面或 API 部署 API 代理失败并显示以下错误消息:

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.

示例屏幕截图

保存修订版本 6 时出错。

原因

如果提取变量政策在 <JSONPayload> 元素中没有 <JSONPath> 元素,则 API 代理部署将失败并显示上面显示的错误。

诊断

  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 代理部署将失败。

解决方法

确保提取变量政策在 <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 界面或 API 部署 API 代理失败并显示以下错误消息:

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.

示例屏幕截图

保存修订版本 6 时出错。

原因

如果提取变量政策在 <JSONPayload> 元素内包含空的 <JSONPath> 表达式,则 API 代理部署将失败。

诊断

  1. 从错误消息中确定失败的提取变量政策。例如,在以下错误中,政策名称为 Extract-Variables-1

    ExtractVariables Extract-Variables-1: JSONPath expression is empty in variable name.
    
  2. 在失败的提取变量政策 XML 中,验证是否存在包含空 <JSONPath> 子元素的 <JSONPayload> 元素。如果是,就会导致错误。

    例如,以下是具有 <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 代理部署将失败。

解决方法

确保提取变量政策在 <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 界面或 API 部署 API 代理失败并显示以下错误消息:

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

示例屏幕截图

保存修订版本 6 时出错。

原因

如果提取变量政策在 QueryParamHeaderFormParamVariable等任何政策元素中没有 name 属性,则 API 代理部署将失败。

例如,如果 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 属性。如果存在缺少 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 代理部署将失败。

解决方法

确保提取变量政策包含元素 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

错误消息

通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:

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.

示例屏幕截图

保存修订版本 7 时出错。

原因

如果提取变量政策未在 <Pattern> 元素中指定变量,则 API 代理部署将失败。<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 代理部署将失败

    <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 界面或 API 部署 API 代理失败并显示以下错误消息:

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.

示例屏幕截图

将修订版本 4 部署到测试时出错。

原因

如果提取变量政策具有 <XPath> 表达式(其中将 <Variable> 类型定义为 nodeset),但无法将表达式转换为 nodeset,则 API 代理部署将失败。

诊断

  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 转换为 nodeset。因此,API 代理部署将失败。

解决方法

如果将 <Variable> 类型定义为 nodeset,确保可将提取变量政策中使用的 <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

错误消息

通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:

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.

示例屏幕截图

将修订版本 18 部署到测试时出错。

原因

如果提取变量政策中的任何元素(如 URIPathQueryParamHeaderFormParamXMLPayloadJSONPayload)中的 <Pattern> 元素定义无效,则 API 代理部署将失败。

诊断

  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 代理部署将失败。另请参阅关于匹配和变量创建

    <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

错误消息

通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:

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.

示例屏幕截图

将修订版本 1 部署到测试时出错。

原因

如果 <XPath> 元素中使用的前缀或值不是提取变量政策中声明的任何命名空间的一部分,则 API 代理部署将失败。

如需详细了解命名空间、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>
    

    但是,前缀 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>