Eclipseプラグイン実践テクニック(4)
ビルド機能を応用してXML検証機能を作る
NTTデータ先端技術 竹添直樹
NTTデータ 基盤システム事業本部 岡本隆史
2006/12/9
ビルダの機能を応用してSAXパースする |
続いて、XMLファイルのバリデーションを行うビルダに移ります。ビルダを定義するには拡張ポイントorg.eclipse.core.resources.buildersを使用します。また、このビルダはすでに作成したXMLNatureと関連付けますので、ネイチャの定義にビルダとの関連付けを追加します。plugin.xmlは以下のようになります(追加部分を赤字にしてあります)。
リスト4 ビルダの定義 |
<extension |
(1)で指定されているXMLBuilderがビルド処理を行うクラスです。このクラスはorg.eclipse.core.resources.IncrementalProjectBuilderクラスを継承して実装します。
リスト5 XMLBuilder |
public class XMLBuilder extends IncrementalProjectBuilder { |
ビルドを行う場合、(1)のbuild()メソッドが呼び出されます。ビルドは場合によって、プロジェクト全体のビルドを行うフルビルドと、変更されたファイルのみビルドを行うインクリメンタル・ビルドに分かれます。上記の例では、フルビルドの場合は(2)のfullBuild()メソッド、インクリメンタル・ビルドの場合は(3)のincrementalBuild()メソッドを呼び出しています。
■フルビルドの場合はリソースビジタ
フルビルドの場合は、プロジェクト内のすべてのファイルを処理する必要があります。そこで、リソースビジタを使用してプロジェクト内のすべてのリソースをツリーウォークします。リソースビジタはorg.eclipse.core.resources.IResourceVisitorインターフェイスを実装して作成します。実装しなければならないのはvisit()メソッドだけです。
リスト6 XMLResourceVisitor |
public class XMLResourceVisitor implements IResourceVisitor { |
XMLValidator#doValidate()でXMLのバリデーションを行っています。バリデーション処理の実装については、後述します。
■インクリメンタル・ビルドの場合はリソースデルタ
インクリメンタル・ビルドの場合は、変更の
リスト7 XMLDeltaVisitor |
public class XMLDeltaVisitor implements IResourceDeltaVisitor { |
差分を格納したリソースデルタ(IResourceDelta)をツリーウォークします。この場合、ビジタクラスはorg.eclipse.core.resources.IResourceDeltaVisitorインターフェイスを実装します。
リソースデルタには、プロジェクト内のどのリソースが追加、変更、削除されたのかがツリー状に格納されています。ここでは、追加もしくは変更されたリソースに対してXMLバリデーションを行っています。
■バリデーションとリソース・マーカ
さて、肝心のXMLのバリデーション処理ですが、SAXパーサのエラーハンドラで行うことにします。エラーハンドラは、エラーが発生した際にバリデーション対象のファイルに対してリソース・マーカを付与するよう実装します。リソース・マーカはエディタ左端のルーラや問題ビューなどに表示されます。
編集部注:SAXパーサについて詳しく知りたい読者は、@IT XML&SOA フォーラムの、「SAXによるシンプルなXML文書の操作」や「XMLプログラミングのためのAPI」を参照してください。
図1 リソース・マーカ |
バリデーション処理の実装は以下のとおりです。
リスト8 XMLValidator |
public class XMLValidator { |
SAXパーサのエラーハンドラでエラーを捕捉すると、(1)のaddMarker()メソッドでリソース・マーカを作成するようになっています。処理自体は普通にSAXパースしているだけですので、特に難しい部分はないでしょう。
2/3 |
INDEX | ||
第4回 ビルド機能を応用してXML検証機能を作る | ||
Page1 XMLのバリデーションを行うビルダの実装 ネイチャについて |
||
Page2 ビルダの機能を応用してSAXパースする |
||
Page3 ネイチャをプロジェクトに追加する Eclipseの持つ機能を実践的に利用する |
Java Solution全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|