2014年7月4日金曜日

JAXBでXMLとJavaオブジェクトのマッピング

しょーもないところで詰まってしまったメモ。

今回はJAXBでのXMLとJavaオブジェクトのマッピングについて。

JAXB(Java Architecture for XML Binding)とは、
XMLとJavaオブジェクトを相互変換するためのAPI 仕様。
Java SE6 からは標準ライブラリに組み込まれてる。


例えばこんなXMLをマッピングしたい場合。
※ほんとはもっと複雑な構造だったので分けわかんなくなったんだけど…

 
  
   
    
    
   
  
  
   
    
    
   
  
 


でマッピングさせたいJavaオブジェクトはこんな感じで書く。

@XmlRootElement(name = "hoge")
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
public class XmlData {

 @XmlElementWrapper(name = "samples")
 @XmlElement(name = "sample")
 public List samples;

}

@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
class Sample {

 @XmlAttribute
 public String id;

 @XmlAttribute
 public String name;

 @XmlElementWrapper(name = "datas")
 @XmlElement(name = "data")
 public List data;

}

@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
class Data {

 @XmlAttribute
 public String id;
}
←これ無視して…


詰まってたのは、
<samples>とか<datas>とかの部分。
ここを要素(@XmlElement)だけアノテーションつけてクラス作ってたらエラーになった。

属性とかなくてただ要素がぶらさがってるだけのタグには、
@XmlElementWrapper
のアノテーションをつけて、そこのnameにタグ名を。 そんでぶらさがる要素を@XmlElementで指定。

作るときに参考にしてたXMLにはそうゆうタグがなかったんでミスった。。

ちなみにルートタグ(今回のだと<hoge>)は、@XmlRootElementで指定する。


なんかpreタグでソース埋め込むときに勝手に変換されたりしてクソ

0 件のコメント:

コメントを投稿