3.3. XML 规则语法


3.3.1. <when> 语法

在一个规则的 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. <javaclass> 语法

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. 构造 <javaclass> 元素
3.3.1.1.2.1. <javaclass> 元素属性
属性名称类型描述

参考

CLASS_NAME

要匹配的软件包或类名称。可以使用的通配符。此属性是必需的。

注意

出于性能原因,在启动引用时不应该使用通配符。例如,使用 weblogic.apache.xml.{*} 而不是 {web}.apache.xml.{*}

references="weblogic.apache.xml.{*}"

matchesSource

字符串

完全匹配的确切正则表达式。这可用于区分硬编码的字符串。此属性是必需的。

matchesSource="log4j.logger"

as

VARIABLE_NAME

分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的 from 属性。

as="MyEjbRule"

from

VARIABLE_NAME

使用之前由其 as VARIABLE_NAME 识别的搜索结果开始搜索查询。

from="MyEjbRule"

in

PATH_FILTER

过滤与此正则表达式匹配的输入文件(正则表达式)命名模式。可以使用的通配符。

in="{*}File1"
3.3.1.1.2.2. <javaclass> 子元素
子元素描述

<location>

在 Java 类中找到参考的位置。位置可以参考注解、字段和变量声明、导入和方法。有关有效值的完整列表,请查看 TypeReferenceLocation 的 JavaDoc 。

<location>IMPORT</location>

<annotation-literal>

匹配注解中的字面值。

以下示例匹配 @MyAnnotation (myvalue="test")

<javaclass references="org.package.MyAnnotation">
    <location>ANNOTATION</location>
    <annotation-literal name="myvalue" pattern="test"/>
</javaclass>

请注意,在这种情况下,<javaclass> 代表注解(@MyAnnotation),因此顶级注解过滤器 <annotation-literal> 必须指定 name 属性。如果 <javaclass> 引用了注解的类,则使用顶级注解过滤器将为 <annotation-type>

<annotation-type>

匹配特定注解类型。您可以提供与注解元素匹配的子条件。

以下示例将匹配 Calendar 字段声明,并标上 @MyAnnotation (myvalue="test")

<javaclass references="java.util.Calendar">
    <location>FIELD_DECLARATION</location>
    <annotation-type pattern="org.package.MyAnnotation">
        <annotation-literal name="myvalue" pattern="test"/>
    </annotation-type>
</javaclass>

<annotation-list>

匹配注解中数组中的项目。如果没有指定数组的索引,则只在条件应用到数组中的所有项时才匹配。您可以提供与这个元素匹配的子条件。

以下示例将匹配 @MyAnnotation (mylist={"one","two"})

<javaclass references="org.package.MyAnnotation" >
    <location>ANNOTATION</location>
    <annotation-list name="mylist">
        <annotation-literal pattern="two"/>
    </annotation-list>
</javaclass>

请注意,在这种情况下,<javaclass> 代表注解(@MyAnnotation),因此顶级注解过滤器 <annotation-list> 必须指定 name 属性。如果 <javaclass> 引用了注解的类,则使用顶级注解过滤器将为 <annotation-type>

3.3.1.2. <xmlfile> 语法

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. 构建一个 <xmlfile> 元素
3.3.1.2.2.1. <javaclass> 元素属性
属性名称类型描述

matches

XPATH

在一个 XML 文件条件上匹配

matches="/w:web-app/w:resource-ref/w:res-auth[text() = 'Container']"

xpathResultMatch

XPATH_RESULT_STRING

返回匹配指定正则表达式的结果

<xmlfile matches="//foo/text()"
  xpathResultMatch="Text from foo."/>

as

VARIABLE_NAME

分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的 from 属性。

as="MyEjbRule"

in

PATH_FILTER

过滤与此正则表达式匹配的输入文件(正则表达式)命名模式。可以使用的通配符。

in="{*}File1"

from

VARIABLE_NAME

使用之前由其 as VARIABLE_NAME 识别的搜索结果开始搜索查询。

from="MyEjbRule"

public-id

PUBLIC_ID

DTD public-id 正则表达式。

public-id="public"
3.3.1.2.2.2. <xmlfile> matches 自定义函数

matches 属性可以使用几个内置自定义 XPath 功能,该功能可能具有有用的副作用,例如对规则变量堆栈设置匹配值。

功能描述

windup:matches()

针对字符串匹配 XPath 表达式,可能包含 MTR 参数化占位符。

matches="windup:matches(//foo/@class, '{javaclassname}')"

这将匹配所有 <foo/> 元素和一个 class 属性,并将其值存储到每个迭代的 javaclassname 参数中。

3.3.1.2.2.3. <xmlfile> 子元素
子元素描述

<namespace>

XML 文件中引用的命名空间。此元素包含两个可选属性:prefixuri

<namespace prefix="abc" uri="http://maven.apache.org/POM/4.0.0"/>

3.3.1.3. <project> 语法

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. 构建 <project> 元素
3.3.1.3.2.1. <project> 元素属性

<project> 元素用于与项目的 Maven POM 文件匹配。您可以使用此条件来查询项目的依赖项。它本身没有任何属性。

3.3.1.3.2.2. <project> 子元素
子元素描述

<artifact>

<project> 中使用的 Subcondition 来针对项目依赖项查询。<artifact> 元素属性如下所述。

3.3.1.3.2.3. <artifact> 元素属性
属性名称类型描述

groupId

PROJECT_GROUP_ID

匹配依赖项的项目 <groupId>

artifactId

PROJECT_ARTIFACT_ID

匹配依赖项的项目 <artifactId>

fromVersion

FROM_VERSION

指定工件的低版本边界。例如 2.0.0.Final.

toVersion

TO_VERSION

指定工件的高边界。例如 2.2.0.Final

可以验证 POM 文件中的元素,该文件包含规则正在搜索的工件。这可以通过使用可选的 <location> 元素来实现。以下示例显示了在 POM 文件的 <plugins> 元素中搜索工件的规则。

为工件搜索规则

有效的位置列表如下:

  • DEPENDENCY_MANAGEMENT
  • DEPENDENCIES
  • PLUGIN_MANAGEMENT
  • PLUGINS
  • PARENT

3.3.1.4. <filecontent> 语法

3.3.1.4.1. 概述

使用 <filecontent> 元素在文件中查找字符串或文本,例如: Properties 文件中的一行。要更好地了解 <filecontent> 条件,请参阅 FileContent 类的 JavaDoc。

3.3.1.4.2. 构建 <filecontent> 元素
3.3.1.4.2.1. <filecontent> 元素属性
属性名称类型描述

pattern

字符串

将文件内容与提供的参数化字符串匹配。此属性是必需的。

filename

字符串

将文件名与提供的参数化字符串匹配。

as

VARIABLE_NAME

分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的 from 属性。

as="MyEjbRule"

from

VARIABLE_NAME

使用之前由其 as VARIABLE_NAME 识别的搜索结果开始搜索查询。

from="MyEjbRule"

3.3.1.5. <file> 语法

3.3.1.5.1. 概述

使用 <file> 元素查找具有特定名称的文件是否存在,例如: ibm-webservices-ext.xmi 文件。要更好地了解 <file> 条件,请参阅 File 类的 JavaDoc。

3.3.1.5.2. 构造 <file> 元素
3.3.1.5.2.1. <javaclass> 元素属性
属性名称类型描述

filename

字符串

将文件名与提供的参数化字符串匹配。此属性是必需的。

as

VARIABLE_NAME

分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的 from 属性。

as="MyEjbRule"

from

VARIABLE_NAME

使用之前由其 as VARIABLE_NAME 识别的搜索结果开始搜索查询。

Example:

from="MyEjbRule"

3.3.1.6. <has-hint> 语法

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>

<has-hint> 元素用于判断文件或行是否存在提示。它没有任何子元素。

3.3.1.6.2.1. <artifact> 元素属性
属性名称类型描述

message

字符串

可选参数允许您将提示与提供的消息字符串匹配。

3.3.1.7. <has-classification> 语法

3.3.1.7.1. 概述

使用 <has-classification> 元素测试文件或行是否具有分类。它主要用于防止 classification 已存在时触发,或者在没有其他条件时为默认执行实施规则。要更好地了解 <has-classification> 条件,请参阅 HasClassification 类的 JavaDoc。

3.3.1.7.2. 构造 <has-classification>

has-classification 元素用于判断是否存在指定的分类。它没有任何子元素。

3.3.1.7.2.1. <has-classification> 元素属性
属性名称类型描述

title

字符串

与分类匹配的可选标题。

3.3.1.8. <graph-query> 语法

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. 构造一个 <graph-query>
3.3.1.8.2.1. <artifact> 元素属性
属性名称类型描述

discriminator

MODEL_TYPE

用于搜索的模态类型这可以是任何有效的模型,但建议使用 JarArchiveModel 检查存档。此属性是必需的。

as

VARIABLE_NAME

分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的 from 属性。

as="MyEjbRule"

from

VARIABLE_NAME

使用之前由其 as VARIABLE_NAME 识别的搜索结果开始搜索查询。

from="MyEjbRule"
3.3.1.8.2.2. <graph-query> 属性
属性名称类型描述

name

字符串

在所选模型中要匹配的属性名称。当使用任何基于文件的模型时,建议在 fileName 上匹配。此属性是必需的。

type

property-type

定义预期的属性类型,可以是 STRINGBOOLEAN

searchType

property-search-type

定义如何匹配条件。如果设置为 equals,则必须进行完全匹配。如果使用 regex,则使用正则表达式进行匹配。

3.3.1.9. <dependency> 语法

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> 语法

在规则的 perform 部分可用的操作包括应用资源分类,以及迁移步骤的线提示、迁移信息的链接和项目行报告。因为在基于 Java 的规则附加组件后对 XML 规则建模,因此会提供到 JavaDocs 链接到相关 Java 类的链接,以便更好地了解它们的行为。

您可以查看 完整的 XML 规则模式

以下小节描述了比较常见的 XML 规则执行操作。

3.3.2.1. <classification> 语法

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. <has-classification> 元素属性
属性名称类型描述

title

字符串

给此资源的标题。此属性是必需的。

title="JBoss Seam Components"

effort

BYTE

分配给此资源的工作量程度。

effort="2"

category-id

字符串

MTR_HOME/rules/migration-core/core.windup.categories.xml 中定义的类别的引用。默认类别为 mandatory, optional, potential, 和 information

category-id="mandatory"

VARIABLE_NAME

为所给的引用创建新分类。

of="MySeamRule"
3.3.2.1.3. <classification> 子元素
子元素描述

<link>

为其他信息提供链接 URI 和文本标题。

<classification title="Websphere Startup Service" effort="4">
   <link href="http://docs.oracle.com/javaee/6/api/javax/ejb/Singleton.html" title="EJB3.1 Singleton Bean"/>
   <link href="http://docs.oracle.com/javaee/6/api/javax/ejb/Startup.html" title="EJB3.1 Startup Bean"/>
</classification>

<tag>

为分类提供额外的自定义信息。

<tag>Seam3</tag>

<description>

此资源的描述。

<description>JBoss Seam components must be replaced</description>

3.3.2.3. <hint> 语法

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. <hint> 元素属性
属性名称类型描述

title

字符串

使用指定字符串替换此提示。此属性是必需的。

title="JBoss Seam Component Hint"

category-id

字符串

MTR_HOME/rules/migration-core/core.windup.categories.xml 中定义的类别的引用。默认类别为 mandatory, optional, potential, 和 information

category-id="mandatory"

in

VARIABLE_NAME

在由给定变量解析的 FileLocationModel 中创建一个新的 Hint。

in="Foo"

effort

BYTE

分配给此资源的工作量程度。

effort="2"
3.3.2.3.3. <hint> 子元素
子元素描述

<message>

描述迁移提示的消息。

<message>EJB 2.0 is deprecated</message>

<link>

识别或分类信息内容的链接。

<link href="http://docs.oracle.com/javaee/6/api/" title="Java Platform, Enterprise Edition 6
API Specification" />

<tag>

为这个 hint 定义自定义标签。

<tag>Needs review</tag>

<quickfix>

包含在满足规则条件时,MTR 插件使用的信息来执行快速修复。

<quickfix name="slink-qf" type="REPLACE">
    <replacement>h:link</replacement>
    <search>s:link</search>
</quickfix>

3.3.2.4. <xslt> 语法

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. <xslt> 元素属性
属性名称类型描述

title

字符串

设置报告中此 XSLTTransformation 的标题。此属性是必需的。

title="XSLT Transformed Output"

字符串

为给定参考创建新转换。

of="testVariable_instance"

extension

字符串

设置此 XSLTTransformation 的扩展。此属性是必需的。

extension="-result.html"

模板

字符串

设置 XSL 模板。此属性是必需的。

template="simpleXSLT.xsl"

effort

BYTE

转型所需的工作量水平。

3.3.2.4.3. <xslt> 子元素
子元素描述

<xslt-parameter>

指定 XSLTTransformation 参数作为属性值对

<xslt-parameter property="title" value="EJB Transformation"/>

3.3.2.5. <lineitem> 语法

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. <lineitem> 元素属性
属性名称类型描述

message

字符串

一个 lineitem 信息。

message="Proprietary code found."

3.3.2.6. <iteration> 语法

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. <iteration> 元素属性
属性名称类型描述

over

VARIABLE_NAME

迭代此 VARIABLE_NAME 标识的条件。

over="jboss-app"
3.3.2.6.3. <iteration> 子元素
子元素描述

<iteration>

子元素包括 when 条件,以及操作 iteration, classification, hint, xslt, lineitem, 和 otherwise

3.3.3. <where> 语法

您可以定义用于指定在 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.* 软件包匹配。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.