3.3. XML ルール構文


3.3.1. <when> 構文

ルールの when で許可される条件は、GraphOperation を拡張する必要があり、現在、Java クラス、XML ファイル、プロジェクト、およびファイルコンテンツの評価が含まれます。XML ルールは Java ベースのルールアドオンの後にモデル化されるため、関連する Java クラスの JavaDocs へのリンクは、その動作をよりよく理解するために提供されます。

完全な 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> syntax

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>
Copy to Clipboard
3.3.1.1.2. <javaclass> 要素の作成
3.3.1.1.2.1. <javaclass> 要素属性
属性名タイプ説明

references

CLASS_NAME

一致するパッケージまたはクラス名。ワイルドカード文字を使用できます。この属性は必須です。

注記

パフォーマンス上の理由から、ワイルドカード文字を使用して参照を開始しないでください。たとえば、{web}.apache.xml.{*} の代わりに weblogic.apache.xml.{*} を使用します。

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

matchesSource

STRING

一致する正確な正規表現。これは、ハードコーディングされた文字列を区別する場合に便利です。この属性は必須です。

matchesSource="log4j.logger"
Copy to Clipboard

as

VARIABLE_NAME

ルールに割り当てられた変数名。これにより、後で処理した参照として使用できるようになります。以下の from 属性を参照してください。

as="MyEjbRule"
Copy to Clipboard

from

VARIABLE_NAME

as VARIABLE_NAME として識別される前の検索からのフィルターリングされた結果から検索クエリーを開始します。

from="MyEjbRule"
Copy to Clipboard

in

PATH_FILTER

この正規表現 (regex) の命名パターンに一致する入力ファイルをフィルターします。ワイルドカード文字を使用できます。

in="{*}File1"
Copy to Clipboard
3.3.1.1.2.2. <javaclass> 子要素
子要素説明

<location>

参照が Java クラスで見つかった場所。場所は、アノテーション、フィールドおよび変数宣言、インポート、およびメソッドを参照できます。有効な値の完全なリストは、TypeReferenceLocation の JavaDoc を参照してください。

<location>IMPORT</location>
Copy to Clipboard

<annotation-literal>

アノテーション内のリテラル値に一致します。

以下の例は @MyAnnotation(myvalue="test") で一致します。

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

この場合、<javaclass> はアノテーション (@MyAnnotation) を参照します。そのため、最上位アノテーションフィルター <annotation-literal>name 属性を指定する必要があります。アノテーションが付いたクラスを参照する <javaclass> が参照される場合、使用される最上位アノテーションフィルターは <annotation-type> になります。

<annotation-type>

特定のアノテーションタイプで一致します。アノテーション要素に対して照合されるサブ条件を指定できます。

以下の例は、@MyAnnotation(myvalue="test") アノテーションが付けられた Calendar フィールド宣言で一致します。

<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

<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

この場合、<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>
Copy to Clipboard
3.3.1.2.2. <xmlfile> 要素の作成
3.3.1.2.2.1. <xmlfile> 要素属性
属性名タイプ説明

matches

XPATH

XML ファイル条件で一致します。

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

xpathResultMatch

XPATH_RESULT_STRING

指定の正規表現に一致する結果を返します。

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

as

VARIABLE_NAME

ルールに割り当てられた変数名。これにより、後で処理した参照として使用できるようになります。以下の from 属性を参照してください。

as="MyEjbRule"
Copy to Clipboard

in

PATH_FILTER

この正規表現 (regex) の命名パターンに一致する入力ファイルをフィルターを設定するのに使用されます。ワイルドカード文字を使用できます。

in="{*}File1"
Copy to Clipboard

from

VARIABLE_NAME

as VARIABLE_NAME として識別される前の検索からのフィルターリングされた結果から検索クエリーを開始します。

from="MyEjbRule"
Copy to Clipboard

public-id

PUBLIC_ID

DTD public-id 正規表現。

public-id="public"
Copy to Clipboard
3.3.1.2.2.2. <xmlfile> がカスタム関数と 一致 します。

matches 属性は、ルール変数スタックに一致した値の設定など、有用な影響を及ぼす可能性のある組み込みのカスタム XPath 関数をいくつか使用できます。

機能説明

windup:matches()

XPath 式を文字列と照合します。MTA パラメーター化プレースホルダーが含まれている可能性があります。

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

これは、すべての <foo/> 要素と class 属性に一致し、それぞれの反復についてその値を javaclassname パラメーターに保存します。

3.3.1.2.2.3. <xmlfile> 子要素
子要素説明

<namespace>

XML ファイルで参照される名前空間。この要素には、prefixuri の 2 つの任意の属性が含まれます。

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

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>
Copy to Clipboard
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> 内で使用されるサブ条件。<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

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

String

指定されたパラメーター化された文字列に対してファイルの内容を一致させます。この属性は必須です。

filename

String

提供されるパラメーター化された文字列に対してファイル名を一致させます。

as

VARIABLE_NAME

ルールに割り当てられた変数名。これにより、後で処理した参照として使用できるようになります。以下の from 属性を参照してください。

as="MyEjbRule"
Copy to Clipboard

from

VARIABLE_NAME

as VARIABLE_NAME として識別される前の検索からのフィルターリングされた結果から検索クエリーを開始します。

from="MyEjbRule"
Copy to Clipboard

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. <file> 要素属性
属性名タイプ説明

filename

String

提供されるパラメーター化された文字列に対してファイル名を一致させます。この属性は必須です。

as

VARIABLE_NAME

ルールに割り当てられた変数名。これにより、後で処理した参照として使用できるようになります。以下の from 属性を参照してください。

as="MyEjbRule"
Copy to Clipboard

from

VARIABLE_NAME

as VARIABLE_NAME として識別される前の検索からのフィルターリングされた結果から検索クエリーを開始します。

以下に例を示します。

from="MyEjbRule"
Copy to Clipboard

3.3.1.6. <has-hint> 構文

3.3.1.6.1. 概要

<has-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
3.3.1.6.2. <has-hint> の作成

<has-hint> 要素は、ファイルまたは行のヒントが存在するかどうかを判断するために使用されます。子要素はありません。

3.3.1.6.2.1. <has-hint> 要素属性
属性名タイプ説明

message

String

ヒントを提供されたメッセージ文字列と照合できるようにする任意の引数。

3.3.1.7. <has-classification> 構文

3.3.1.7.1. 概要

<has-classification> 要素を使用して、ファイルまたは行に分類があるかどうかをテストします。これは主に、分類がすでに存在する場合に起動を防止するため、また他の条件が適用されない場合のデフォルト実行のルールを実装するために使用されます。<has-classification> 条件のより詳細な理解は、HasClassification クラスの JavaDoc を参照してください。

3.3.1.7.2. <has-classification> の作成

has-classification 要素は、指定された分類が存在するかどうかを判断するために使用されます。子要素はありません。

3.3.1.7.2.1. <has-classification> 要素属性
属性名タイプ説明

title

String

分類と照合する任意のタイトル。

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>
Copy to Clipboard
3.3.1.8.2. <graph-query> の作成
3.3.1.8.2.1. <graph-query> 要素属性
属性名タイプ説明

discriminator

MODEL_TYPE

検索に使用するモデルのタイプ。これは任意の有効なモデルにすることができます。ただし、アーカイブの調査には JarArchiveModel を使用することが推奨されます。この属性は必須です。

as

VARIABLE_NAME

ルールに割り当てられた変数名。これにより、後で処理した参照として使用できるようになります。以下の from 属性を参照してください。

as="MyEjbRule"
Copy to Clipboard

from

VARIABLE_NAME

as VARIABLE_NAME として識別される前の検索からのフィルターリングされた結果から検索クエリーを開始します。

from="MyEjbRule"
Copy to Clipboard
3.3.1.8.2.2. <graph-query> プロパティー
プロパティー名タイプ説明

name

String

選択したモデル内で照合する属性の名前。ファイルベースのモデルを使用する場合は、fileName と一致することが推奨されます。この属性は必須です。

type

property-type

予想されるプロパティーの型 (STRING または BOOLEAN のいずれか) を定義します。

searchType

property-search-type

条件の一致方法を定義します。equals に設定された場合は、完全に一致する必要があります。regex を使用すると、正規表現を使用できます。

3.3.1.9. <dependency> 構文

3.3.1.9.1. 概要

<dependency> 要素を使用して、アプリケーションの POM ファイル内で定義された依存関係を検索し、ターゲットランタイムでサポートされるかどうかを判別します。

以下は、1.6.0 までのバージョンがある org.springframework.boot グループに属するすべてのアーティファクトを確認するルールの例です。

<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>
Copy to Clipboard
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat