JAXBの簡単な解説(2)

前回はまず使ってみるということで、単純なJavaオブジェクトからXMLへ変換する方法を解説しました。

今回は、XMLからJavaオブジェクトへ変換する方法と、また一歩進んでバインディングを制御するアノテーションについて解説します。

XMLからJavaオブジェクトへの変換

データ構造としては前回と同じものを使いましょう。

会社(従業員*)
従業員(名前,給料)

これらを表すJavaクラスも前回と基本は同じなのですが、オブジェクトの中身を見たいのでtoString()を追加しています。 続きを読む JAXBの簡単な解説(2)

JAXBの簡単な解説(1)

JavaとXML間のバインディングを行うJAXB

JavaオブジェクトからXMLへ変換したい、またはXMLからJavaオブジェクトへ変換したい、ということはよくあるものです。

方法はいくつか考えられますが、JavaSE6 にある標準技術 JAXB (Java Architecture for XML Binding) では、この変換を手軽に実装できるようになっています。その使い方を解説しようと思います。

JAXBの考え方

まずはJAXBの考え方を俯瞰しておきます。

続きを読む JAXBの簡単な解説(1)

XPath処理エンジンjaxenを使う

デフォルトのXPathは遅くて使い物にならない、と思ったらjaxenを試してみましょう。

jaxen: universal Java XPath engine

使い方はごく簡単です。

XPath xpath = new DOMXPath("/foo/bar");
List<?> nodes = xpath.selectNodes(document);

しかもこのjaxen、universalと謳っているだけあって扱えるのはデフォルトのDOMだけではありません。dom4j, JDOM, XOMを扱えます。使い方はみんな同じで、newするクラスが違うだけです。

ちなみにdom4jとXOMはXPathの処理でjaxenを呼んでいるようです(dom4jの実装は見てないですが)。

XOMでは

nu.xom.Node node;
Nodes nodes = node.query("/foo/bar");

このとき、jaxenのベースクラスを継承したクラスを使ってXPathの評価を行っています。

ちなみにMavenを使っている場合は、pom.xmlに

<dependency>
    <groupId>jaxen</groupId>
    <artifactId>jaxen</artifactId>
    <version>1.1.1</version>
</dependency>

を追加すれば使用可能になります。

XMLDB Apache Xindice のコマンド

XMLDBの一つに、Apache Xindice(アパッチ ジンディーチェ)があります。ちょっと動きを試してみました。

アプリケーション自体は、warをtomcatに放り込むだけで起動しました。

で、コレクション(スキーマみたいなもの)を作ろうとしてコマンドを発行

$ xindice add_collection -c /db -n test

trying to register database
XMLDB Exception 0: Cannot communicate with the server: http://127.0.0.1:8888/xindice/

接続できません。っていうか、tomcatのリッスンポートは8888ではないのですが。

どっかにconfigファイルでもあるのかと思って探したのですが見当たりません。

スタンドアロンのサーバだったときのコマンドのまま更新してないのかな??

コマンドのUsageをいくら見ても、ホストとかポートの指定方法が書いてありませんので、「こりゃダメだ、Xindiceってイケてないプロジェクトだったのかなあ・・・」と思ってのですが、

Wiki: How to change Xindice Command Line tool port number? に書いてありました。

$ xindice add_collection -c xmldb:xindice://localhost:8080/db -n test

trying to register database
Created : xmldb:xindice://localhost:8080/db/test

接続できました。-cオプションにはDSNを渡すということだったようですね。