Java Architecture for XML Binding
From Wikipedia, the free encyclopedia
Java Architecture for XML Binding(JAXB)は、Javaのクラスを XMLで表現可能にする仕様である。JAXBには主に2つの機能がある。すなわち、JavaのオブジェクトをXMLにシリアライズすることと、逆にXMLからJavaオブジェクトにデシリアライズすることである。言い換えれば、JAXBはメモリ上のデータをXML形式に変換して保存することができ、そのためにプログラム内の各クラスにXMLロード/セーブルーチンを実装する必要がない。
JAXBは仕様が複雑で頻繁に変更される場合に特に便利である。その場合、Javaの定義の変更に合わせてXML Schemaの定義を更新することは、時間もかかるしバグを作りこみやすい作業となる。
JAXBはJakarta EEのAPIの一種であり、Java Web Services Development Pack (JWSDP) の一部でもある。WSITの基盤の一部にもなっている。JAXBはJava 1.6にも含まれている。
JAXB 1.0は、Java Community ProcessのJSR 31において2003年に開発された。続いて2006年、JAXB 2.0がJSR 222において開発され、2017年9月にMaintenance Release 3がリリースされている[1]。リファレンス実装は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 |