JAXBの概念と使い方 実際にソースコードを書いてみた

会社でJAXBを使うことになりました。初見なので理解しながら概念と使い方をまとめていきます。

概念

まず JAXB とは、Java Architecture for XML Binding を省略したものです。読んで字のごとく、Javaのクラスを XMLで表現(バインド)する仕組みです。また、XML から Javaクラスを表現(バインド)することも出来ます。

使い方

私は今Java8系を使用していますが、JAXBはすでに標準実装されており追加でライブラリを読みこむ必要がありません。さっそくソースコードを書いていきます。

構成

全体の構成はこんな感じです。2ファイルだけです

ソースコード

それぞれのソースコードを見ていきます。これはPOJOです。

JaxbPojo.java
import javax.xml.bind.annotation.XmlRootElement;

//@XmlRootElementは無くても大丈夫。あるとRootディレクトリと認識される&要素名を定めることが出来る
@XmlRootElement(name="root")
public class JaxbPojo {

  private int id;
  private String value;

  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getValue() {
    return value;
  }
  public void setValue(String value) {
    this.value = value;
  }
}

mainメソッドのあるクラスです。ここでJAXBを使ってPOJOをXMLに変換しています。

JaxbMain.java
import javax.xml.bind.JAXB;

public class JaxbMain {

  public static void main(String[] args) {

    JaxbPojo pojo = new JaxbPojo();
    pojo.setId(100);
    pojo.setValue("String-Value");

    //Object , OutputStream でObjectをXMLに変換してOutputStreamに格納する
    //ここではSystem.outに格納したのですぐにコンソール出力される
    JAXB.marshal(pojo, System.out);

    //System.outってSystemクラスのPrintStream型変数だったんだなぁ
    //System.out.println()はPrintStreamクラスのメソッドだったんだ
  }
}

実行結果

実行結果のコンソールです。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
  <id>100</id>
  <value>String-Value</value>
</root>

こちらは@XmlRootElement(name=”root”)が無いときの実行結果のコンソールです。XMLのルートディレクトリ要素名はPOJOのクラス名になっています。なお、JAXBが気を利かせて1文字目を小文字に変換してくれています。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxbPojo>
  <id>100</id>
  <value>String-Value</value>
</jaxbPojo>

JavaのPOJOをXMLに変換することが出来ました。その逆はまた今度に。