3.3. XML ルールの構文
3.3.1. 条件構文
ルールの when
一部として許可される条件は GraphOperation を拡張する必要があり、現在、Java クラス、XML ファイル、プロジェクト、およびファイルコンテンツの評価が含まれ ます。XML ルールは Java ベースのルールアドオンの後にモデル化されるため、関連する Java クラスの JavaDocs へのリンクは、その動作をよりよく理解するために提供されます。
完全な XML ルールスキーマは http://windup.jboss.org/schema/windup-jboss-ruleset.xsd にあります。
以下のセクションでは、より一般的な XML when
ルール条件を説明します。
デフォルトでは、複数の when
ルール条件が指定されている場合は、ルールが一致できるようすべての条件を満たす必要があります。
3.3.1.1. <javaclass> Syntax
3.3.1.1.1. Summary
<javaclass>
要素を使用して、Java クラスに関連するインポート、メソッド、変数宣言、アノテーション、クラス実装、およびその他の項目を検索します。<javaclass>
条件をより理解するには、JavaClass クラスの JavaDoc を参照してください。
以下は、個別の 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>
<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> 要素属性
属性名 | タイプ | 説明 |
---|---|---|
references | CLASS_NAME | 一致するパッケージまたはクラス名。ワイルドカード文字を使用できます。この属性は必須です。 注記
パフォーマンス上の理由から、ワイルドカード文字を使用して参照を開始しないでください。たとえば、の references="weblogic.apache.xml.{*}"
|
matchesSource | STRING | 一致する正確な正規表現。これは、ハードコーディングされた文字列を区別する場合に便利です。この属性は必須です。 matchesSource="log4j.logger"
|
as | VARIABLE_NAME |
ルールに割り当てられた変数名。これにより、後で処理した参照として使用できるようになります。以下の as="MyEjbRule"
|
from | VARIABLE_NAME |
from="MyEjbRule"
|
in | PATH_FILTER | この正規表現 (regex) の命名パターンに一致する入力ファイルをフィルターします。ワイルドカード文字を使用できます。 in="{*}File1"
|
3.3.1.1.2.2. <javaclass> はサポートされていません要素
子要素 | 説明 |
---|---|
<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> | 特定のアノテーションタイプで一致します。アノテーション要素に対して照合されるサブ条件を指定できます。
以下の例は、にアノテーションが付けられた <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> | アノテーション内の配列の項目で一致します。配列インデックスが指定されていない場合は、配列内の任意のアイテムに適用されると条件が一致します。この要素と照合するサブ条件を指定できます。
以下の例では、と一致してい <javaclass references="org.package.MyAnnotation" > <location>ANNOTATION</location> <annotation-list name="mylist"> <annotation-literal pattern="two"/> </annotation-list> </javaclass>
この場合、はアノテーション( |
3.3.1.2. <xmlfile> Syntax
3.3.1.2.1. Summary
<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>
<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. <xmlfile> 要素属性
属性名 | タイプ | 説明 |
---|---|---|
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 | この正規表現 (regex) の命名パターンに一致する入力ファイルをフィルターを設定するのに使用されます。ワイルドカード文字を使用できます。 in="{*}File1"
|
from | VARIABLE_NAME |
from="MyEjbRule"
|
public-id | PUBLIC_ID | DTD public-id 正規表現。 public-id="public"
|
3.3.1.2.2.2. <xmlfile> matches
カスタム関数
matches
属性は、ルール変数スタックにマッチした値を設定するなど、有用な副次的影響を持つ複数の組み込みカスタム F を使用できます。
機能 | 説明 |
---|---|
| XPath 式を文字列と照合します。MTA パラメーター化プレースホルダーが含まれている可能性があります。 matches="windup:matches(//foo/@class, '{javaclassname}'"
これは、 |
3.3.1.2.2.3. <xmlfile> 等号要素
子要素 | 説明 |
---|---|
<namespace> |
XML ファイルで参照される名前空間。この要素には <namespace prefix="abc" uri="http://maven.apache.org/POM/4.0.0"/>
|
3.3.1.3. <project> Syntax
3.3.1.3.1. Summary
<project>
要素を使用してプロジェクトの特性の Maven POM ファイルをクエリーします。<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>
<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> |
プロジェクト依存関係に対する |
3.3.1.3.2.3. <artifact> 要素の属性
属性名 | タイプ | 説明 |
---|---|---|
groupId | PROJECT_GROUP_ID |
依存関係 |
artifactId | PROJECT_ARTIFACT_ID |
依存関係 |
fromVersion | FROM_VERSION |
アーティファクトの下位バージョンバインドを指定します。例: |
toVersion | TO_VERSION |
アーティファクトの上位バージョンバインドを指定します。例: |
3.3.1.4. <filecontent> Syntax
3.3.1.4.1. Summary
<filecontent>
要素を使用してファイル内で文字列またはテキストを見つけます(プロパティーファイルの行など)。<filecontent>
条件の詳細は、FileContent クラスの JavaDoc を参照し て ください。
3.3.1.4.2. <filecontent> 要素の構築
3.3.1.4.2.1. <filecontent> 要素属性
属性名 | タイプ | 説明 |
---|---|---|
pattern | String | 指定されたパラメーター化された文字列に対してファイルの内容を一致させます。この属性は必須です。 |
filename | String | 提供されるパラメーター化された文字列に対してファイル名を一致させます。 |
as | VARIABLE_NAME |
ルールに割り当てられた変数名。これにより、後で処理した参照として使用できるようになります。以下の as="MyEjbRule"
|
from | VARIABLE_NAME |
from="MyEjbRule"
|
3.3.1.5. <file> Syntax
3.3.1.5.1. Summary
<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 |
ルールに割り当てられた変数名。これにより、後で処理した参照として使用できるようになります。以下の as="MyEjbRule"
|
from | VARIABLE_NAME |
たとえば、以下のようになります。 from="MyEjbRule"
|
3.3.1.6. <has-hint> Syntax
3.3.1.6.1. Summary
<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>
<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. <has-hint> 要素属性
属性名 | タイプ | 説明 |
---|---|---|
message | String | ヒントを提供されたメッセージ文字列と照合できるようにする任意の引数。 |
3.3.1.7. <has-classification> Syntax
3.3.1.7.1. Summary
<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> Syntax
3.3.1.8.1. Summary
<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>
<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. <graph-query> 要素属性
属性名 | タイプ | 説明 |
---|---|---|
discriminator | MODEL_TYPE |
検索に使用するモデルのタイプ。これは有効なモデルにすることができますが、を使用してアーカイブを |
as | VARIABLE_NAME |
ルールに割り当てられた変数名。これにより、後で処理した参照として使用できるようになります。以下の as="MyEjbRule"
|
from | VARIABLE_NAME |
from="MyEjbRule"
|
3.3.1.8.2.2. <graph-query> プロパティー
プロパティー名 | タイプ | 説明 |
---|---|---|
name | String |
選択したモデル内で照合する属性の名前。ファイルベースのモデルを使用する場合は、に一致させることが推奨され |
type | property-type |
予想されるプロパティーのタイプ( |
searchType | property-search-type |
条件の一致方法を定義します。に設定すると |