JAXB (Java Architecture for XML Binding)

JAXB (Java Architecture for XML Binding)はJava EEのAPIであり、JavaオブジェクトとXMLを相互に変換することができる。JavaのオブジェクトをXMLに変換することを「シリアライズ」、XMLをJavaのオブジェクトに変換することを「デシリアライズ」と呼ぶ。

概要

JAXBでは以下のことができる。

アノテーション

JAXBでは、アノテーションでJavaプログラム要素とXMLスキーマをマッピングする。

javax.xml.bind.annotationは、Javaプログラム要素からXMLスキーマのマッピングをカスタマイズするための注釈を定義するパッケージである。

JAXBのアノテーション一覧
アノテーション 説明
@XmlAccessorType デフォルトでフィールドやプロパティをマップするかどうか。
@XmlElement XMLスキーマの複合型のローカル要素へマップする。
@XmlMimeType Java型とMIMEタイプを関連付ける。
@XmlRootElement XMLのルート要素を指定。
@XmlSeeAlso このクラスをバインドするときに他のクラスもバインドするようにJAXBに指示する。
@XmlType XMLスキーマ型にクラス又は列挙型をマップする。

@javax.xml.bind.annotation.XmlAccessorType

@XmlAccessorType は、JAXB(Java Architecture for XML Binding)で「クラスのどのメンバーをXMLにマッピングするか」を指定するアノテーションである。

主に @XmlRootElement と組み合わせて使う。

@XmlAccessorType(xmlaccesstype)
@XmlAccessorType(value=xmlaccesstype)

XmlAccessType には、以下に示す4種類がある。

XmlAccessType
説明
FIELD フィールド(変数)を対象にする
PROPERTY Getter/Setterを対象にする
PUBLIC_MEMBER publicフィールドとpublic Getter/Setterを対象にする
NONE 明示的にアノテーションを付けたものだけ対象にする

JAXBアノテーション「@XmlAccessorType」の使用例を次に示す。

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Person {
    private String name;
    private int age;
}

@javax.xml.bind.annotation.XmlElement

@XmlElement(name=name, namespace=uri, propOrder=propOrder)

@javax.xml.bind.annotation.XmlRootElement

@XmlRootElement(name=name, namespace=uri)

Mavenリポジトリ

JAXBに関するMavenリポジトリを次の表に示す。

groupId artifactId 説明
javax.xml.bind jaxb-api JAXB API

Mavenのpom.xmlに依存関係を記述するサンプルを示す。

<dependencies>
  <dependency>
      <groupId>javax.xml.bind</groupId>
      <artifactId>jaxb-api</artifactId>
  </dependency>
</dependencies>