3.3.


3.3.1. 

在一个规则的 when 部分中允许的条件需要扩展 GraphOperation,当前包括对 Java 类、XML 文件、项目和文件内容的评估。因为在基于 Java 的规则附加组件后对 XML 规则建模,因此会提供到 JavaDocs 链接到相关 Java 类的链接,以便更好地了解它们的行为。

完整的 XML 规则模式位于:http://windup.jboss.org/schema/windup-jboss-ruleset.xsd.

以下小节描述了更多常见的 XML when 规则条件。

默认情况下,如果提供了对于一个 when 规则条件时,则必须满足规则匹配的所有条件。

3.3.1.1. 

3.3.1.1.1. 概述

使用 <javaclass> 元素查找导入、方法、变量声明、注释、类实施和其他与 Java 类相关的项目。要更好地了解 <javaclass> 条件,请参阅 JavaClass 类的 JavaDoc。

<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>
Copy to Clipboard Toggle word wrap
3.3.1.1.2. 
3.3.1.1.2.1. 
Expand
属性名称类型描述

参考

CLASS_NAME

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

注意

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

references="weblogic.apache.xml.{*}"
Copy to Clipboard Toggle word wrap

matchesSource

字符串

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

matchesSource="log4j.logger"
Copy to Clipboard Toggle word wrap

as

VARIABLE_NAME

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

as="MyEjbRule"
Copy to Clipboard Toggle word wrap

from

VARIABLE_NAME

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

from="MyEjbRule"
Copy to Clipboard Toggle word wrap

in

PATH_FILTER

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

in="{*}File1"
Copy to Clipboard Toggle word wrap
3.3.1.1.2.2. 
Expand
子元素描述

<location>

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

<location>IMPORT</location>
Copy to Clipboard Toggle word wrap

<annotation-literal>

匹配注解中的字面值。

<javaclass references="org.package.MyAnnotation">
    <location>ANNOTATION</location>
    <annotation-literal name="myvalue" pattern="test"/>
</javaclass>
Copy to Clipboard Toggle word wrap

请注意,在这种情况下,<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>
Copy to Clipboard Toggle word wrap

<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>
Copy to Clipboard Toggle word wrap

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

3.3.1.2. 

3.3.1.2.1. 概述

使用 <xmlfile> 元素在 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>
Copy to Clipboard Toggle word wrap
3.3.1.2.2. 
3.3.1.2.2.1. 
Expand
属性名称类型描述

matches

XPATH

在一个 XML 文件条件上匹配

matches="/w:web-app/w:resource-ref/w:res-auth[text() = 'Container']"
Copy to Clipboard Toggle word wrap

xpathResultMatch

XPATH_RESULT_STRING

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

<xmlfile matches="//foo/text()"
  xpathResultMatch="Text from foo."/>
Copy to Clipboard Toggle word wrap

as

VARIABLE_NAME

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

as="MyEjbRule"
Copy to Clipboard Toggle word wrap

in

PATH_FILTER

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

in="{*}File1"
Copy to Clipboard Toggle word wrap

from

VARIABLE_NAME

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

from="MyEjbRule"
Copy to Clipboard Toggle word wrap

public-id

PUBLIC_ID

DTD public-id 正则表达式。

public-id="public"
Copy to Clipboard Toggle word wrap
3.3.1.2.2.2. 

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

Expand
功能描述

windup:matches()

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

matches="windup:matches(//foo/@class, '{javaclassname}'"
Copy to Clipboard Toggle word wrap

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

3.3.1.2.2.3. 
Expand
子元素描述

<namespace>

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

<namespace prefix="abc" uri="http://maven.apache.org/POM/4.0.0"/>
Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap
3.3.1.3.2. 
3.3.1.3.2.1. 

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

3.3.1.3.2.2. 
Expand
子元素描述

<artifact>

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

3.3.1.3.2.3. 
Expand
属性名称类型描述

groupId

PROJECT_GROUP_ID

匹配依赖项的项目 <groupId>

artifactId

PROJECT_ARTIFACT_ID

匹配依赖项的项目 <artifactId>

fromVersion

FROM_VERSION

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

toVersion

TO_VERSION

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

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

pattern

字符串

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

filename

字符串

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

as

VARIABLE_NAME

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

as="MyEjbRule"
Copy to Clipboard Toggle word wrap

from

VARIABLE_NAME

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

from="MyEjbRule"
Copy to Clipboard Toggle word wrap

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

filename

字符串

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

as

VARIABLE_NAME

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

as="MyEjbRule"
Copy to Clipboard Toggle word wrap

from

VARIABLE_NAME

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

例如:

from="MyEjbRule"
Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap
3.3.1.6.2. 构造

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

3.3.1.6.2.1. 
Expand
属性名称类型描述

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

title

字符串

与分类匹配的可选标题。

3.3.1.8.  Syntax

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>
Copy to Clipboard Toggle word wrap
3.3.1.8.2. 构造一个
3.3.1.8.2.1. 
Expand
属性名称类型描述

discriminator

MODEL_TYPE

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

as

VARIABLE_NAME

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

as="MyEjbRule"
Copy to Clipboard Toggle word wrap

from

VARIABLE_NAME

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

from="MyEjbRule"
Copy to Clipboard Toggle word wrap
3.3.1.8.2.2. 
Expand
属性名称类型描述

name

字符串

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

type

property-type

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

searchType

property-search-type

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat