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 软件包的规则示例:
3.3.1.1.2. 构造 元素 复制链接链接已复制到粘贴板!
3.3.1.1.2.1. 元素属性 复制链接链接已复制到粘贴板!
属性名称 | 类型 | 描述 |
---|---|---|
参考 | CLASS_NAME | 要匹配的软件包或类名称。可以使用的通配符。此属性是必需的。 注意
出于性能原因,在启动引用时不应该使用通配符。例如,使用 references="weblogic.apache.xml.{*}"
|
matchesSource | 字符串 | 完全匹配的确切正则表达式。这可用于区分硬编码的字符串。此属性是必需的。 matchesSource="log4j.logger"
|
as | VARIABLE_NAME |
分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的 as="MyEjbRule"
|
from | VARIABLE_NAME |
使用之前由其 from="MyEjbRule"
|
in | PATH_FILTER | 过滤与此正则表达式匹配的输入文件(正则表达式)命名模式。可以使用的通配符。 in="{*}File1"
|
3.3.1.1.2.2. 子元素 复制链接链接已复制到粘贴板!
子元素 | 描述 |
---|---|
<location> | 在 Java 类中找到参考的位置。位置可以参考注解、字段和变量声明、导入和方法。有关有效值的完整列表,请查看 TypeReferenceLocation 的 JavaDoc 。 <location>IMPORT</location>
|
<annotation-literal> | 匹配注解中的字面值。
以下示例匹配 <javaclass references="org.package.MyAnnotation"> <location>ANNOTATION</location> <annotation-literal name="myvalue" pattern="test"/> </javaclass>
请注意,在这种情况下, |
<annotation-type> | 匹配特定注解类型。您可以提供与注解元素匹配的子条件。
以下示例将匹配 |
<annotation-list> | 匹配注解中数组中的项目。如果没有指定数组的索引,则只在条件应用到数组中的所有项时才匹配。您可以提供与这个元素匹配的子条件。
以下示例将匹配
请注意,在这种情况下, |
3.3.1.2. 语法 复制链接链接已复制到粘贴板!
3.3.1.2.1. 概述 复制链接链接已复制到粘贴板!
使用 <xmlfile>
元素在 XML 文件中找到信息。要更好地了解 <xmlfile>
条件,请参阅 XmlFile 类的 JavaDoc。
以下是一个测试 XML 文件的示例:
3.3.1.2.2. 构建一个 元素 复制链接链接已复制到粘贴板!
3.3.1.2.2.1. 元素属性 复制链接链接已复制到粘贴板!
属性名称 | 类型 | 描述 |
---|---|---|
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 |
分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的 as="MyEjbRule"
|
in | PATH_FILTER | 过滤与此正则表达式匹配的输入文件(正则表达式)命名模式。可以使用的通配符。 in="{*}File1"
|
from | VARIABLE_NAME |
使用之前由其 from="MyEjbRule"
|
public-id | PUBLIC_ID | DTD public-id 正则表达式。 public-id="public"
|
3.3.1.2.2.2. matches 自定义函数 复制链接链接已复制到粘贴板!
matches
属性可以使用几个内置自定义 XPath 功能,该功能可能具有有用的副作用,例如对规则变量堆栈设置匹配值。
功能 | 描述 |
---|---|
| 针对字符串匹配 XPath 表达式,可能包含 MTR 参数化占位符。 matches="windup:matches(//foo/@class, '{javaclassname}')"
这将匹配所有 |
3.3.1.2.2.3. 子元素 复制链接链接已复制到粘贴板!
子元素 | 描述 |
---|---|
<namespace> |
XML 文件中引用的命名空间。此元素包含两个可选属性: <namespace prefix="abc" uri="http://maven.apache.org/POM/4.0.0"/>
|
3.3.1.3. 语法 复制链接链接已复制到粘贴板!
3.3.1.3.1. 概述 复制链接链接已复制到粘贴板!
使用 <project>
元素查询 Maven POM 文件以获取项目特征。要更好地了解 <project>
条件,请参阅 Project 类的 JavaDoc。
以下是一个规则的示例,该规则将检查 2.0.0.Final 和 2.2.0.Final 之间的 JUnit 依赖项版本。
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 |
分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的 as="MyEjbRule"
|
from | VARIABLE_NAME |
使用之前由其 from="MyEjbRule"
|
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 |
分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的 as="MyEjbRule"
|
from | VARIABLE_NAME |
使用之前由其 Example: from="MyEjbRule"
|
3.3.1.6. 语法 复制链接链接已复制到粘贴板!
3.3.1.6.1. 概述 复制链接链接已复制到粘贴板!
使用 <has-hint>
元素测试某个文件或行是否已关联了 hint。它主要用于防止存在提示时触发,或者在没有其他条件时为默认执行实施规则。要更好地了解 <has-hint>
条件,请参阅 HasHint 类的 JavaDoc。
以下是一条规则,它检查是否存在用于 IBM JMS 目的地消息的提示,如果不包含它。
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
软件包。
3.3.1.8.2. 构造一个 复制链接链接已复制到粘贴板!
3.3.1.8.2.1. 元素属性 复制链接链接已复制到粘贴板!
属性名称 | 类型 | 描述 |
---|---|---|
discriminator | MODEL_TYPE |
用于搜索的模态类型这可以是任何有效的模型,但建议使用 |
as | VARIABLE_NAME |
分配到该规则的变量名称,以便它可以在以后的处理中用作参考。请参见以下的 as="MyEjbRule"
|
from | VARIABLE_NAME |
使用之前由其 from="MyEjbRule"
|
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)的规则。
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 应用部署描述符文件的规则示例。
3.3.2.1.2. 元素属性 复制链接链接已复制到粘贴板!
属性名称 | 类型 | 描述 |
---|---|---|
title | 字符串 | 给此资源的标题。此属性是必需的。 title="JBoss Seam Components"
|
effort | BYTE | 分配给此资源的工作量程度。 effort="2"
|
category-id | 字符串 |
对 category-id="mandatory"
|
的 | VARIABLE_NAME | 为所给的引用创建新分类。 of="MySeamRule"
|
3.3.2.1.3. 子元素 复制链接链接已复制到粘贴板!
子元素 | 描述 |
---|---|
<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.2. 语法 复制链接链接已复制到粘贴板!
3.3.2.2.1. 概述 复制链接链接已复制到粘贴板!
<link>
元素用于分类或提示,以提供信息内容的链接。要更好地了解 <link>
条件,请参阅 Link 类的 JavaDoc。
以下是创建其他信息链接的规则示例。
3.3.2.2.2. 元素属性 复制链接链接已复制到粘贴板!
属性名称 | 类型 | 描述 |
---|---|---|
href | URI | 所引用链接的 URI。 href="https://access.redhat.com/articles/1249423"
|
title | 字符串 | 链接的标题。 title="Migrate WebLogic Proprietary Servlet Annotations"
|
3.3.2.3. 语法 复制链接链接已复制到粘贴板!
3.3.2.3.1. 概述 复制链接链接已复制到粘贴板!
<hint>
原始提供了有关如何迁移代码部分的提示或内联信息。要更好地了解 <hint>
条件,请参阅 Hint 类的 JavaDoc。
以下是一个测试 XML 文件的示例:
3.3.2.3.2. 元素属性 复制链接链接已复制到粘贴板!
属性名称 | 类型 | 描述 |
---|---|---|
title | 字符串 | 使用指定字符串替换此提示。此属性是必需的。 title="JBoss Seam Component Hint"
|
category-id | 字符串 |
对 category-id="mandatory"
|
in | VARIABLE_NAME | 在由给定变量解析的 FileLocationModel 中创建一个新的 Hint。 in="Foo"
|
effort | BYTE | 分配给此资源的工作量程度。 effort="2"
|
3.3.2.3.3. 子元素 复制链接链接已复制到粘贴板!
子元素 | 描述 |
---|---|
<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> |
为这个 <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. 语法 复制链接链接已复制到粘贴板!
3.3.2.4.1. 概述 复制链接链接已复制到粘贴板!
<xslt>
元素指定了如何转换 XML 文件。要更好地了解 <xslt>
条件,请参阅 XSLTTransformation 类的 JavaDoc。
以下是定义 XSLT 操作的规则示例。
3.3.2.4.2. 元素属性 复制链接链接已复制到粘贴板!
属性名称 | 类型 | 描述 |
---|---|---|
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-parameter> | 指定 XSLTTransformation 参数作为属性值对 <xslt-parameter property="title" value="EJB Transformation"/>
|
3.3.2.5. 语法 复制链接链接已复制到粘贴板!
3.3.2.5.1. 概述 复制链接链接已复制到粘贴板!
<lineitem>
元素对应用程序提供常规的迁移要求,例如需要替换弃用的库,或需要解决潜在的类加载问题。此信息显示在项目或应用程序概览页面中。要更好地了解 <lineitem>
条件,请参阅 LineItem 类的 JavaDoc。
以下是创建 lineitem 消息的规则示例。
3.3.2.5.2. 元素属性 复制链接链接已复制到粘贴板!
属性名称 | 类型 | 描述 |
---|---|---|
message | 字符串 | 一个 lineitem 信息。 message="Proprietary code found."
|
3.3.2.6. 语法 复制链接链接已复制到粘贴板!
3.3.2.6.1. 概述 复制链接链接已复制到粘贴板!
<iteration>
元素指定迭代规则中定义的隐式或显式变量。要更好地了解 <iteration>
条件,请参阅 Iteration 类的 JavaDoc。
以下是执行迭代的规则示例。
3.3.2.6.2. 元素属性 复制链接链接已复制到粘贴板!
属性名称 | 类型 | 描述 |
---|---|---|
over | VARIABLE_NAME | 迭代此 VARIABLE_NAME 标识的条件。 over="jboss-app"
|
3.3.2.6.3. 子元素 复制链接链接已复制到粘贴板!
子元素 | 描述 |
---|---|
<iteration> |
子元素包括 |
3.3.3. 语法 复制链接链接已复制到粘贴板!
您可以定义用于指定在 XML 规则的其他元素中使用的匹配模式的参数。这有助于简化复杂匹配表达式的模式。
使用 <where>
元素来定义参数。使用 param
属性指定参数名,使用 <matches>
元素提供特征。然后可以使用 {<PARAM_NAME>}
语法在规则定义中引用此参数。
您可以查看 完整的 XML 规则模式。
以下的示例规则定义了一个名为 subpackage
的参数,它指定 (activeio|activemq)
的特征。
由 subpackage
定义的特征然后会在 <javaclass>
references
属性中别替换。这会导致规则与 org.apache.activeio.*
和 org.apache.activemq.*
软件包匹配。