Java Architecture for XML Binding
Java Architecture for XML Binding(JAXB)は、Javaのクラスを XMLで表現可能にする仕様である。JAXB には主に2つの機能がある。すなわち、Java のオブジェクトを XML にシリアライズすることと、逆に XML から Java オブジェクトにデシリアライズすることである。言い換えれば、JAXB はメモリ上のデータを XML 形式に変換して保存することができ、そのためにプログラム内の各クラスにXMLロード/セーブルーチンを実装する必要がない。
JAXB は仕様が複雑で頻繁に変更される場合に特に便利である。その場合、Java の定義の変更に合わせて XML Schema の定義を更新することは、時間もかかるしバグを作りこみやすい作業となる。
JAXB は Java EE の API の一種であり、Java Web Services Development Pack (JWSDP) の一部でもある。WSIT の基盤の一部にもなっている。JAXB は Java SE version 1.6 にも含まれている。
JAXB 1.0 は、Java Community Process において JSR 31 として開発された。2006年現在、JAXB 2.0 が JSR 222 として開発されている。リファレンス実装は java.net にCDDLライセンスで公開されている。
利用
"xjc" ツールは、XML Schemaや他のスキーマファイル形式(Java 1.6 では、RELAX NG、XML DTD が実験的にサポートされている)をクラス表現に変換するのに使われる。クラス群は、javax.xml.bind.annotation.* の名前空間(例えば @XmlRootElement や @XmlElement)からアノテーションを使ってマークアップされる。XML リストシーケンスは、java.util.List の属性を使って表現される。マーシャルとアンマーシャルを行うコードは JAXBContext のインスタンスを通して生成される。
さらに、JAXB には "schemagen" ツールがある。これは基本的に "xjc" の逆を行うもので、アノテーション付きのクラス群のコードから XML Schema を生成する。
データ型の既定バインディング
Java のデータ型の種類は XML Schema のものより豊富である。以下の表は JAXB において、XML のデータ型をどのように Java のデータ型にマッピングしているかを示したものである。
XML Schema 型 | Java データ型 |
---|---|
xsd:string | java.lang.String |
xsd:integer | java.math.BigInteger |
xsd:int | int |
xsd:long | long |
xsd:short | short |
xsd:decimal | java.math.BigDecimal |
xsd:float | float |
xsd:double | double |
xsd:boolean | boolean |
xsd:byte | byte |
xsd:QName | javax.xml.namespace.QName |
xsd:dateTime | javax.xml.datatype.XMLGregorianCalendar |
xsd:base64Binary | byte[] |
xsd:hexBinary | byte[] |
xsd:unsignedInt | long |
xsd:unsignedShort | int |
xsd:unsignedByte | short |
xsd:time | javax.xml.datatype.XMLGregorianCalendar |
xsd:date | javax.xml.datatype.XMLGregorianCalendar |
xsd:g | javax.xml.datatype.XMLGregorianCalendar |
xsd:anySimpleType | java.lang.Object |
xsd:anySimpleType | java.lang.String |
xsd:duration | javax.xml.datatype.Duration |
xsd:NOTATION | javax.xml.namespace.QName |
関連項目
- XMLBeans – Apacheソフトウェア財団による JAXB と類似・関連する技術
参考文献
外部リンク
- JAXB home page on Project GlassFish
- 従来の JAXB home page
- JaxMe – Apacheソフトウェア財団による JAXB のオープンソース実装
- EclipseLink MOXy – Eclipse Foundationによる JAXB のオープンソース実装
- JSR 222 (JAXB 2.0)
- JSR 31 (JAXB 1.0)
- JAXB chapter of the Java EE 5 Tutorial
- JAXB Wizard