Java XML Binding

Java XML Binding について軽く調べたのでメモっておく。
Javaで、XMLを扱う方法はいろいろあるけど、SAXやらDOMというので、アプリのデータを扱うのは、面倒なので、後回しにしていた。が、そろそろ、どんなもんか軽く勉強しとくかと思って、調べてみた。私が、昔から知っていたのは、Jaxb というやつで、技術カンファレンス?に行った時に、聞いたので雰囲気は分かってた。Googleで調べてみると、次のページからたどれそう。

http://java.sun.com/webservices/webservicespack.html

で、とりあえず、見てみたが、インストールがめんどそう。いや、普通にインストーラで良い感じにはいるのだが、他にもわんさか入っておなかいっぱい。で、他に、似たような実装がないか、探したら、Apache XML Project でもやってました。

http://xml.apache.org/ -> XMLBeans ( http://xmlbeans.apache.org/ )

とたどったやつが、いけそうだ。他にも色々ツールがありそうだが、別の機会に確認しよう。で、とりあえず、どんな風に使うかは、サンプルで確認してみた。

サンプルを見てみると、ANTに組み込んですぐに使えそうだったので、あとは、 XML Schema ってやつを書ければ良いって事か。XML Schema なんて書いたこと無いので、サンプルのファイルを見たり、Googleで調べたりしてみた。

私の理解では、 DTD + Namespace + データ型の指定 というところか。これを書いとけば、どんなXMLファイルを扱うかを定義して、Javaから、比較的楽に(DOMのツリーをたどるよかかんたん) になりそうだ(まだ、実際に使ってないので)。

build.xml を確認してると、ANT の知らない機能があったので、確認しといた。忘れずにめもっておく(今まで、基本的なことしかしらなかったので...)。

次のようにして、ファイルがあれば、値を定義しておく動作が可能になる。つまり、fileで指定したファイルがあれば、value の値を property に設定する、ということか。

< available
property="xmlbeans.lib"
value="${xmlbeans.home}/lib"
file="${xmlbeans.home}/lib/xbean.jar" />

で、そのpropertyの値が無い場合は、次のようにして失敗すると。まぁ、基本なんだろうけど、知らなかった。

<fail message="Set XMLBEANS_HOME in your enviornment."
unless="xmlbeans.lib"/>

次のようにして、新しいタスクを定義する。これは、後から参照できるし、xmlbean がクラスを生成するのも、ANT に組み込めるから便利だ。

<taskdef name="xmlbean"
classname="org.apache.xmlbeans.impl.tool.XMLBean"
classpathref="xmlbeans.path"/>

必要なところで、xmlbean ... のタスクとして読み出せばいい。やり方は、サンプル見ればわかる。あとは、xsdファイルを適当にでっち上げて、読み込ませれば利用できそうだ。