3.3. XML 规则语法
3.3.1. 语法 复制链接链接已复制到粘贴板!
在一个规则的 when 部分中允许的条件需要扩展 GraphOperation,当前包括对 Java 类、XML 文件、项目和文件内容的评估。因为在基于 Java 的规则附加组件后对 XML 规则建模,因此会提供到 JavaDocs 链接到相关 Java 类的链接,以便更好地了解它们的行为。
完整的 XML 规则模式位于:http://windup.jboss.org/schema/windup-jboss-ruleset.xsd.
以下小节描述了更多常见的 XML when 规则条件。
- <javaclass> 条件语法
- <xmlfile> 条件语法
- <project> 条件语法
- <filecontent> 条件语法
- <file> 条件语法
- <has-hint> 条件语法
- <has-classification> 条件语法
- <graph-query> 条件语法
- <dependency> 条件语法
默认情况下,如果提供了对于一个 when 规则条件时,则必须满足规则匹配的所有条件。
3.3.1.1. 语法 复制链接链接已复制到粘贴板!
3.3.1.1.1. 概述 复制链接链接已复制到粘贴板!
使用 <javaclass> 元素查找导入、方法、变量声明、注释、类实施和其他与 Java 类相关的项目。要更好地了解 <javaclass> 条件,请参阅 JavaClass 类的 JavaDoc。
以下是测试特定于 WebLogic 的 Apache XML 软件包的规则示例:
<rule id="weblogic-03000">
<when>
<javaclass references="weblogic.apache.xml.{*}" />
</when>
<perform>
<hint title="WebLogic Specific Apache XML Package" effort="1" category-id="mandatory">
<message>
Code using this package should be replaced with code using the org.apache.xml package from [Apache
Xerces](http://xerces.apache.org/).
</message>
</hint>
</perform>
</rule>
3.3.1.1.2. 构造 元素 复制链接链接已复制到粘贴板!
3.3.1.1.2.1. 元素属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| 参考 | CLASS_NAME | 要匹配的软件包或类名称。可以使用的通配符。此属性是必需的。 注意
出于性能原因,在启动引用时不应该使用通配符。例如,使用
|
| matchesSource | 字符串 | 完全匹配的确切正则表达式。这可用于区分硬编码的字符串。此属性是必需的。
|
| as | VARIABLE_NAME |
分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的
|
| from | VARIABLE_NAME |
使用之前由其
|
| in | PATH_FILTER | 过滤与此正则表达式匹配的输入文件(正则表达式)命名模式。可以使用的通配符。
|
3.3.1.1.2.2. 子元素 复制链接链接已复制到粘贴板!
| 子元素 | 描述 |
|---|---|
| <location> | 在 Java 类中找到参考的位置。位置可以参考注解、字段和变量声明、导入和方法。有关有效值的完整列表,请查看 TypeReferenceLocation 的 JavaDoc 。
|
| <annotation-literal> | 匹配注解中的字面值。
以下示例匹配
请注意,在这种情况下, |
| <annotation-type> | 匹配特定注解类型。您可以提供与注解元素匹配的子条件。
以下示例将匹配
|
| <annotation-list> | 匹配注解中数组中的项目。如果没有指定数组的索引,则只在条件应用到数组中的所有项时才匹配。您可以提供与这个元素匹配的子条件。
以下示例将匹配
请注意,在这种情况下, |
3.3.1.2. 语法 复制链接链接已复制到粘贴板!
3.3.1.2.1. 概述 复制链接链接已复制到粘贴板!
使用 <xmlfile> 元素在 XML 文件中找到信息。要更好地了解 <xmlfile> 条件,请参阅 XmlFile 类的 JavaDoc。
以下是一个测试 XML 文件的示例:
<rule id="<UNIQUE_RULE_ID>">
<when>
<xmlfile matches="/w:web-app/w:resource-ref/w:res-auth[text() = 'Container']">
<namespace prefix="w" uri="http://java.sun.com/xml/ns/javaee"/>
</xmlfile>
</when>
<perform>
<hint title="Title for Hint from XML">
<message>Container Auth</message>
</hint>
<xslt description="Example XSLT Conversion" extension="-converted-example.xml"
template="/exampleconversion.xsl"/>
</perform>
</rule>
3.3.1.2.2. 构建一个 元素 复制链接链接已复制到粘贴板!
3.3.1.2.2.1. 元素属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| matches | XPATH | 在一个 XML 文件条件上匹配
|
| xpathResultMatch | XPATH_RESULT_STRING | 返回匹配指定正则表达式的结果
|
| as | VARIABLE_NAME |
分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的
|
| in | PATH_FILTER | 过滤与此正则表达式匹配的输入文件(正则表达式)命名模式。可以使用的通配符。
|
| from | VARIABLE_NAME |
使用之前由其
|
| public-id | PUBLIC_ID | DTD public-id 正则表达式。
|
3.3.1.2.2.2. matches 自定义函数 复制链接链接已复制到粘贴板!
matches 属性可以使用几个内置自定义 XPath 功能,该功能可能具有有用的副作用,例如对规则变量堆栈设置匹配值。
| 功能 | 描述 |
|---|---|
|
| 针对字符串匹配 XPath 表达式,可能包含 MTA 参数化占位符。
这将匹配所有 |
3.3.1.2.2.3. 子元素 复制链接链接已复制到粘贴板!
| 子元素 | 描述 |
|---|---|
| <namespace> |
XML 文件中引用的命名空间。此元素包含两个可选属性:
|
3.3.1.3. 语法 复制链接链接已复制到粘贴板!
3.3.1.3.1. 概述 复制链接链接已复制到粘贴板!
使用 <project> 元素查询 Maven POM 文件以获取项目特征。要更好地了解 <project> 条件,请参阅 Project 类的 JavaDoc。
以下是一个规则的示例,该规则将检查 2.0.0.Final 和 2.2.0.Final 之间的 JUnit 依赖项版本。
<rule id="UNIQUE_RULE_ID">
<when>
<project>
<artifact groupId="junit" artifactId="junit" fromVersion="2.0.0.Final" toVersion="2.2.0.Final"/>
</project>
</when>
<perform>
<lineitem message="The project uses junit with the version between 2.0.0.Final and 2.2.0.Final"/>
</perform>
</rule>
3.3.1.3.2. 构建 元素 复制链接链接已复制到粘贴板!
3.3.1.3.2.1. 元素属性 复制链接链接已复制到粘贴板!
<project> 元素用于与项目的 Maven POM 文件匹配。您可以使用此条件来查询项目的依赖项。它本身没有任何属性。
3.3.1.3.2.2. 子元素 复制链接链接已复制到粘贴板!
| 子元素 | 描述 |
|---|---|
| <artifact> |
|
3.3.1.3.2.3. 元素属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| groupId | PROJECT_GROUP_ID |
匹配依赖项的项目 |
| artifactId | PROJECT_ARTIFACT_ID |
匹配依赖项的项目 |
| fromVersion | FROM_VERSION |
指定工件的低版本边界。例如 |
| toVersion | TO_VERSION |
指定工件的高边界。例如 |
可以验证 POM 文件中的元素,该文件包含规则正在搜索的工件。这可以通过使用可选的 <location> 元素来实现。以下示例显示了在 POM 文件的 <plugins> 元素中搜索工件的规则。
有效的位置列表如下:
- DEPENDENCY_MANAGEMENT
- DEPENDENCIES
- PLUGIN_MANAGEMENT
- PLUGINS
- PARENT
3.3.1.4. 语法 复制链接链接已复制到粘贴板!
3.3.1.4.1. 概述 复制链接链接已复制到粘贴板!
使用 <filecontent> 元素在文件中查找字符串或文本,例如: Properties 文件中的一行。要更好地了解 <filecontent> 条件,请参阅 FileContent 类的 JavaDoc。
3.3.1.4.2. 构建 元素 复制链接链接已复制到粘贴板!
3.3.1.4.2.1. 元素属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| pattern | 字符串 | 将文件内容与提供的参数化字符串匹配。此属性是必需的。 |
| filename | 字符串 | 将文件名与提供的参数化字符串匹配。 |
| as | VARIABLE_NAME |
分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的
|
| from | VARIABLE_NAME |
使用之前由其
|
3.3.1.5. 语法 复制链接链接已复制到粘贴板!
3.3.1.5.1. 概述 复制链接链接已复制到粘贴板!
使用 <file> 元素查找具有特定名称的文件是否存在,例如: ibm-webservices-ext.xmi 文件。要更好地了解 <file> 条件,请参阅 File 类的 JavaDoc。
3.3.1.5.2. 构造 元素 复制链接链接已复制到粘贴板!
3.3.1.5.2.1. 元素属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| filename | 字符串 | 将文件名与提供的参数化字符串匹配。此属性是必需的。 |
| as | VARIABLE_NAME |
分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的
|
| from | VARIABLE_NAME |
使用之前由其 Example:
|
3.3.1.6. 语法 复制链接链接已复制到粘贴板!
3.3.1.6.1. 概述 复制链接链接已复制到粘贴板!
使用 <has-hint> 元素测试某个文件或行是否已关联了 hint。它主要用于防止存在提示时触发,或者在没有其他条件时为默认执行实施规则。要更好地了解 <has-hint> 条件,请参阅 HasHint 类的 JavaDoc。
以下是一条规则,它检查是否存在用于 IBM JMS 目的地消息的提示,如果不包含它。
<rule id="websphere-jms-eap7-03000">
<when>
<javaclass references="{package}.{prefix}{type}Message" />
</when>
<perform>
<iteration>
<when>
<not>
<has-hint />
</not>
</when>
<perform>
<hint title="IBM JMS destination message" effort="1" category-id="mandatory">
<message>
JMS `{package}.{prefix}{type}Message` messages represent the actual data passed through JMS destinations. This reference should be
replaced with the Java EE standard API `javax.jms.{type}Message`.
</message>
<link href="https://docs.oracle.com/javaee/7/tutorial/jms-concepts003.htm#sthref2271" title="Java EE 7 JMS Tutorial - Message API" />
<tag>jms</tag>
<tag>websphere</tag>
</hint>
</perform>
</iteration>
</perform>
<where param="type">
<matches pattern="(Text|Stream|Object|Map|Bytes)?" />
</where>
<where param="prefix">
<matches pattern="(JMS|MQe|MQ)" />
</where>
<where param="package">
<matches pattern="com.ibm(\..*)?\.jms" />
</where>
</rule>
3.3.1.6.2. 构造 复制链接链接已复制到粘贴板!
<has-hint> 元素用于判断文件或行是否存在提示。它没有任何子元素。
3.3.1.6.2.1. 元素属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| message | 字符串 | 可选参数允许您将提示与提供的消息字符串匹配。 |
3.3.1.7. 语法 复制链接链接已复制到粘贴板!
3.3.1.7.1. 概述 复制链接链接已复制到粘贴板!
使用 <has-classification> 元素测试文件或行是否具有分类。它主要用于防止 classification 已存在时触发,或者在没有其他条件时为默认执行实施规则。要更好地了解 <has-classification> 条件,请参阅 HasClassification 类的 JavaDoc。
3.3.1.7.2. 构造 复制链接链接已复制到粘贴板!
has-classification 元素用于判断是否存在指定的分类。它没有任何子元素。
3.3.1.7.2.1. 元素属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| title | 字符串 | 与分类匹配的可选标题。 |
3.3.1.8. 语法 复制链接链接已复制到粘贴板!
3.3.1.8.1. 概述 复制链接链接已复制到粘贴板!
使用 <graph-query> 元素搜索生成的任何元素图表。这个元素主要用于搜索特定的存档。要更好地了解 <graph-query> 条件,请参阅 QueryHandler 类的 JavaDoc。
以下是一个规则示例,用于测试来确定是否找到了任何 ehcache 软件包。
<rule id="embedded-cache-libraries-01000">
<when>
<graph-query discriminator="JarArchiveModel">
<property name="fileName" searchType="regex">.*ehcache.*\.jar$</property>
</graph-query>
</when>
<perform>
<classification title="Caching - Ehcache embedded library" category-id="cloud-mandatory" effort="5">
<description>
The application embeds an Ehcache library.
Cloud readiness issue as potential state information that is not persisted to a backing service.
</description>
</classification>
<technology-tag level="INFORMATIONAL">Ehcache (embedded)</technology-tag>
</perform>
</rule>
3.3.1.8.2. 构造一个 复制链接链接已复制到粘贴板!
3.3.1.8.2.1. 元素属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| discriminator | MODEL_TYPE |
用于搜索的模态类型这可以是任何有效的模型,但建议使用 |
| as | VARIABLE_NAME |
分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的
|
| from | VARIABLE_NAME |
使用之前由其
|
3.3.1.8.2.2. 属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| name | 字符串 |
在所选模型中要匹配的属性名称。当使用任何基于文件的模型时,建议在 |
| type | property-type |
定义预期的属性类型,可以是 |
| searchType | property-search-type |
定义如何匹配条件。如果设置为 |
3.3.1.9. 语法 复制链接链接已复制到粘贴板!
3.3.1.9.1. 概述 复制链接链接已复制到粘贴板!
使用 <dependency> 元素搜索在应用程序的 POM 文件中定义的依赖项,以确定目标运行时是否支持它们。
以下是一个规则,它可检查属于 org.springframework.boot 组的所有工件(最多为 1.6.0)的规则。
<rule id="springboot-00001">
<!-- rule condition, when it could be fired -->
<when>
<dependency groupId="org.springframework.boot" artifactId="{*}" toVersion="1.6.0" />
</when>
<!-- rule operation, what to do if it is fired -->
<perform>
<hint title="Unsupported version of Spring Boot" effort="3" category-id="mandatory">
<message>Spring Boot has to be updated to Spring Boot 2.0 before being able to be migrated to a version supported by Red Hat Runtimes</message>
<link href="https://access.redhat.com/articles/3349341" title="RHOAR Spring Boot Supported Configurations" />
<link href="https://access.redhat.com/articles/3348731" title="RHOAR Component Details Overview" />
<link href="https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide" title="Spring Boot 2.0 Migration Guide" />
</hint>
</perform>
</rule>
3.3.2. 语法 复制链接链接已复制到粘贴板!
在规则的 perform 部分可用的操作包括应用资源分类,以及迁移步骤的线提示、迁移信息的链接和项目行报告。因为在基于 Java 的规则附加组件后对 XML 规则建模,因此会提供到 JavaDocs 链接到相关 Java 类的链接,以便更好地了解它们的行为。
您可以查看 完整的 XML 规则模式。
以下小节描述了比较常见的 XML 规则执行操作。
3.3.2.1. 语法 复制链接链接已复制到粘贴板!
3.3.2.1.1. 概述 复制链接链接已复制到粘贴板!
<classification> 元素用于识别或分类与规则匹配的应用程序资源。它提供报告中显示的标题、工作量级别,还可提供有关如何迁移此资源分类的其他信息的链接。要更好地了解 <classification> 条件,请参阅 Classification 类的 JavaDoc。
以下是将资源分类为 WebLogic EAR 应用部署描述符文件的规则示例。
<rule id="XmlWebLogicRules_10vvyf">
<when>
<xmlfile as="default" matches="/*[local-name()='weblogic-application']"></xmlfile>
</when>
<perform>
<iteration>
<classification title="Weblogic EAR Application Descriptor" effort="3"/>
</iteration>
</perform>
</rule>
3.3.2.1.2. 元素属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| title | 字符串 | 给此资源的标题。此属性是必需的。
|
| effort | BYTE | 分配给此资源的工作量程度。
|
| category-id | 字符串 |
对
|
| 的 | VARIABLE_NAME | 为所给的引用创建新分类。
|
3.3.2.1.3. 子元素 复制链接链接已复制到粘贴板!
| 子元素 | 描述 |
|---|---|
| <link> | 为其他信息提供链接 URI 和文本标题。
|
| <tag> | 为分类提供额外的自定义信息。
|
| <description> | 此资源的描述。
|
3.3.2.2. 语法 复制链接链接已复制到粘贴板!
3.3.2.2.1. 概述 复制链接链接已复制到粘贴板!
<link> 元素用于分类或提示,以提供信息内容的链接。要更好地了解 <link> 条件,请参阅 Link 类的 JavaDoc。
以下是创建其他信息链接的规则示例。
<rule id="SeamToCDIRules_2fmb">
<when>
<javaclass references="org.jboss.seam.{*}" as="default"/>
</when>
<perform>
<iteration>
<classification title="SEAM Component" effort="1">
<link href="http://www.seamframework.org/Seam3/Seam2ToSeam3MigrationNotes" title="Seam 2 to Seam 3 Migration Notes"/>
<link href="http://docs.jboss.org/weld/reference/latest/en-US/html/example.html" title="JSF Web Application Example"/>
<link href="http://docs.jboss.org/weld/reference/latest/en-US/html/contexts.html" title="JBoss Context Documentation"/>
<link href="http://www.andygibson.net/blog/tutorial/cdi-conversations-part-2/" title="CDI Conversations Blog Post"/>
</classification>
</iteration>
</perform>
</rule>
3.3.2.2.2. 元素属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| href | URI | 所引用链接的 URI。
|
| title | 字符串 | 链接的标题。
|
3.3.2.3. 语法 复制链接链接已复制到粘贴板!
3.3.2.3.1. 概述 复制链接链接已复制到粘贴板!
<hint> 原始提供了有关如何迁移代码部分的提示或内联信息。要更好地了解 <hint> 条件,请参阅 Hint 类的 JavaDoc。
以下是一个测试 XML 文件的示例:
<rule id="WebLogicWebServiceRules_8jyqn">
<when>
<javaclass references="weblogic.wsee.connection.transport.http.HttpTransportInfo.setUsername({*})" as="default">
<location>METHOD</location>
</javaclass>
</when>
<perform>
<iteration>
<hint title="Proprietary web-service" category-id="mandatory" effort="3">
<message>Replace proprietary web-service authentication with JAX-WS standards.</message>
<link href="http://java-x.blogspot.com/2009/03/invoking-web-services-through-proxy.html" title="JAX-WS Proxy Password Example"/>
</hint>
</iteration>
</perform>
</rule>
3.3.2.3.2. 元素属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| title | 字符串 | 使用指定字符串替换此提示。此属性是必需的。
|
| category-id | 字符串 |
对
|
| in | VARIABLE_NAME | 在由给定变量解析的 FileLocationModel 中创建一个新的 Hint。
|
| effort | BYTE | 分配给此资源的工作量程度。
|
3.3.2.3.3. 子元素 复制链接链接已复制到粘贴板!
| 子元素 | 描述 |
|---|---|
| <message> | 描述迁移提示的消息。
|
| <link> | 识别或分类信息内容的链接。
|
| <tag> |
为这个
|
| <quickfix> | 包含在满足规则条件时,MTA 插件使用的信息来执行快速修复。
|
3.3.2.4. 语法 复制链接链接已复制到粘贴板!
3.3.2.4.1. 概述 复制链接链接已复制到粘贴板!
<xslt> 元素指定了如何转换 XML 文件。要更好地了解 <xslt> 条件,请参阅 XSLTTransformation 类的 JavaDoc。
以下是定义 XSLT 操作的规则示例。
<rule id="XmlWebLogicRules_6bcvk">
<when>
<xmlfile as="default" matches="/weblogic-ejb-jar"/>
</when>
<perform>
<iteration>
<classification title="Weblogic EJB XML" effort="3"/>
<xslt title="JBoss EJB Descriptor (Windup-Generated)" template="transformations/xslt/weblogic-ejb-to-jboss.xsl" extension="-jboss.xml"/>
</iteration>
</perform>
</rule>
3.3.2.4.2. 元素属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| title | 字符串 | 设置报告中此 XSLTTransformation 的标题。此属性是必需的。
|
| 的 | 字符串 | 为给定参考创建新转换。
|
| extension | 字符串 | 设置此 XSLTTransformation 的扩展。此属性是必需的。
|
| 模板 | 字符串 | 设置 XSL 模板。此属性是必需的。
|
| effort | BYTE | 转型所需的工作量水平。 |
3.3.2.4.3. 子元素 复制链接链接已复制到粘贴板!
| 子元素 | 描述 |
|---|---|
| <xslt-parameter> | 指定 XSLTTransformation 参数作为属性值对
|
3.3.2.5. 语法 复制链接链接已复制到粘贴板!
3.3.2.5.1. 概述 复制链接链接已复制到粘贴板!
<lineitem> 元素对应用程序提供常规的迁移要求,例如需要替换弃用的库,或需要解决潜在的类加载问题。此信息显示在项目或应用程序概览页面中。要更好地了解 <lineitem> 条件,请参阅 LineItem 类的 JavaDoc。
以下是创建 lineitem 消息的规则示例。
<rule id="weblogic_servlet_annotation_1000">
<when>
<javaclass references="weblogic.servlet.annotation.WLServlet" as="default">
<location>ANNOTATION</location>
</javaclass>
</when>
<perform>
<hint effort="1">
<message>Replace the proprietary WebLogic @WLServlet annotation with the Java EE 6 standard @WebServlet annotation.</message>
<link href="https://access.redhat.com/articles/1249423" title="Migrate WebLogic Proprietary Servlet Annotations" />
<lineitem message="Proprietary WebLogic @WLServlet annotation found in file."/>
</hint>
</perform>
</rule>
3.3.2.5.2. 元素属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| message | 字符串 | 一个 lineitem 信息。
|
3.3.2.6. 语法 复制链接链接已复制到粘贴板!
3.3.2.6.1. 概述 复制链接链接已复制到粘贴板!
<iteration> 元素指定迭代规则中定义的隐式或显式变量。要更好地了解 <iteration> 条件,请参阅 Iteration 类的 JavaDoc。
以下是执行迭代的规则示例。
<rule id="jboss-eap5-xml-19000">
<when>
<xmlfile as="jboss-app" matches="/jboss-app"/>
<xmlfile as="jboss-app-no-DTD" matches="/jboss-app" public-id=""/>
</when>
<perform>
<iteration over="jboss-app">
<classification title="JBoss application Descriptor" effort="5"/>
</iteration>
<iteration over="jboss-app-no-DTD">
<classification title="JBoss application descriptor with missing DTD" effort="5"/>
</iteration>
<iteration over="jboss-app-no-DTD">
<xslt title="JBoss application descriptor - JBoss 5 (Windup-generated)" template="transformations/xslt/jboss-app-to-jboss5.xsl" extension="-jboss5.xml"/>
</iteration>
</perform>
</rule>
3.3.2.6.2. 元素属性 复制链接链接已复制到粘贴板!
| 属性名称 | 类型 | 描述 |
|---|---|---|
| over | VARIABLE_NAME | 迭代此 VARIABLE_NAME 标识的条件。
|
3.3.2.6.3. 子元素 复制链接链接已复制到粘贴板!
| 子元素 | 描述 |
|---|---|
| <iteration> |
子元素包括 |
3.3.3. 语法 复制链接链接已复制到粘贴板!
您可以定义用于指定在 XML 规则的其他元素中使用的匹配模式的参数。这有助于简化复杂匹配表达式的模式。
使用 <where> 元素来定义参数。使用 param 属性指定参数名,使用 <matches> 元素提供特征。然后可以使用 {<PARAM_NAME>} 语法在规则定义中引用此参数。
您可以查看 完整的 XML 规则模式。
以下的示例规则定义了一个名为 subpackage 的参数,它指定 (activeio|activemq) 的特征。
<rule id="generic-catchall-00600">
<when>
<javaclass references="org.apache.{subpackage}.{*}">
</javaclass>
</when>
<perform>
...
</perform>
<where param="subpackage">
<matches pattern="(activeio|activemq)" />
</where>
</rule>
由 subpackage 定义的特征然后会在 <javaclass> references 属性中别替换。这会导致规则与 org.apache.activeio.* 和 org.apache.activemq.* 软件包匹配。