JavaとJavaEEプログラマのブログ

JavaEEを中心にしたをソフトウェア開発についてのブログ

JAXBを使って、xml文字列をJavaオブジェクトとして扱う方法。

Trangのプロジェクトページ
ここから最新のtrang-*.zipをダウンロードして解凍。解凍したフォルダにあるtrang.jarを使う。
%JAVA_HOME%\binにパスが通っている前提で、次のコマンドを実行。

C:\trang>Java -jar trang.jar -I xml -O xsd XMLファイル.xml 出力されるXSDファイル.xsd

%JAVA_HOME%\binにあるxjcコマンドを使う。

C:\trang>xjc 出力されるXSDファイル.xsd

xjcを実行したフォルダにgenarateフォルダが作成され、その中にクラスファイルが生成される。
生成されたクラスファイルをJavaソースフォルダ内の適当なpackageにコピーする。

以下のようにbatファイルにしておくと便利。

@echo off
rem XMLファイルからJAXB2.0で使用するスキーマファイルを作り、そのスキーマファイルからJavaクラスを生成する。


@echo on
.\trang-20081028\trang.jar -I xml -O xsd .\contract.xml .\contract.xsd
xjc .\contract.xsd -p jp.co.scratchsoft.basil.demodata.entity.contractXml -d ..\src
  • JAXBでXML文字列をJavaオブジェクトに変換する。
final String xml = "<XmlRoot><value></value></XmlRoot>"; 
JAXBContext jc = JAXBContext.newInstance(XmlRoot.class);
StringReader reader = new StringReader(xml);
Unmarshaller u = jc.createUnmarshaller();
XmlRoot root = (XmlRoot) u.unmarshal(reader);
 
  • JAXBでJavaオブジェクトをXML文字列を作成する。
// XmlRoot root を更新する。 
StringWriter writer = new StringWriter();
Marshaller mu = jc.createMarshaller();
mu.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,  new Boolean(true));
mu.marshal(root, writer);

String xml = writer.toString(); //見やすくフォーマットされたXML形式の文字列を取得できる。