JaxMe2 メモ

作成 2003/11/26

JaxMe

JaxMeって何?

JaxMeはJAXB(JSR-31)の実装です。Apache JaxMeプロジェクト(Apache WebServiceのサブプロジェクト)で開発されているオープンソースのプロダクトです。O/RマッピングやXMLデータバインディングが流行りらしいので、さわってみました。

ダウンロード

http://ws.apache.org/jaxme/ あるいは、http://ws.apache.org/ のDownloadsからダウンロードします。ここでは、Incubated JaxMe Version0.2 Binaryをダウンロードしました。ダウンロードしたアーカイブを展開し、適当なディレクトリに配置します。

環境

使ってみる

XSD→Java

XMLスキーマ(*.xsd)をJavaソースに変換してみます。マニュアルを見ると簡単にやるには、JaxMeで提供されているAntタスクを利用するとのこと。こんな感じ。

<project name="hoge" default="genereate">

    <path id="generate.class.path">
        <fileset dir="lib">
            <include name="*.jar"/>
        </fileset>
    </path>
    <taskdef name="xjc"
        classname="org.apache.ws.jaxme.generator.XJCTask"
        classpathref="generate.class.path"/>

    <target name="genereate">
        <xjc schema="hoge.xsd" 
            target="build/src"
            packageName="hoge"/>
    </target>

</project>

jaxmeのlibディレクトリ以下のJARをクラスパスに指定して、xjcタスクを定義します。でもってxjc実行。マニュアルでは、出力パッケージ指定はpackageと書いていますが、現状、実装はpackageNameのようです。サンプルについているxsdは設定、環境の問題か分かりませんが、ジェネレートに失敗したので、超シンプルなxsdファイルを対象にジェネレートしました。

C:\app\incubated-jaxme-0.2>ant
Buildfile: build.xml

genereate:

BUILD SUCCESSFUL
Total time: 1 second

使ったXMLファイル

マーシャリングとアンマーシャリング

JAXBの実験で使ったプログラムをそのまま流用。ちょっとだけ調整。

import hoge.Man;

import java.io.FileInputStream;
import java.math.BigDecimal;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class XSDMain {

    public static void main(String[] args) throws Exception {

        JAXBContext jc = JAXBContext.newInstance("hoge");

        Unmarshaller u = jc.createUnmarshaller();

        Man man = (Man) u.unmarshal(new FileInputStream("hoge.xml"));

        System.out.println(man.getName());
        System.out.println(man.getAge());

        man.setName("baba");
        man.setAge(new BigDecimal("21"));

        Marshaller m = jc.createMarshaller();
        m.marshal(man, System.out);

        System.out.println("END");
    }
}

実行結果

miya
10
<man>
  <name>baba</name>
  <age>21</age>
</man>

感想

Castor、XMLBeansなど、XMLバインディングツールはいろいろあるようですが、JaxMeは、、、JaxMeはどんな特徴があるんだろう。。。とりあえず、JAXB仕様に準拠して、オープンソースなところでしょうか。う〜む。まあ、名前がかわいいので、よしとしましょう。なお、名前の由来は、JAX○Eに、なんとなくMを入れてみたのが由来とのこと(FAQより。Eは何?)。


Top