以下は、ユース ケースをJAXB (JSR-222)実装にマップする 1 つの方法です。
アイテム
ルート オブジェクトに次のクラスを使用し、 で注釈を付けます@XmlRootElement
。注釈は、非@XmlRootElement
整列化されるドキュメントのルート要素が である場合、このクラスをインスタンス化する必要があることを JAXB に伝えます。items
別の名前を指定することもできます@XmlRootElement(name="foo")
。
package forum11152046;
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Items {
private List<Item> items;
@XmlElement(name="item")
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}
アイテム
この例では、すべてのプロパティ名が XML ドキュメント内の名前に直接対応するクラスを作成しました。これは、追加する必要がある注釈がないことを意味します。デフォルト名をオーバーライドする必要がある場合は、そのようなアノテーションを使用できます@XmlElement
。プロパティのクラスで@XmlElement
これを行うために注釈を使用しました。Items
items
package forum11152046;
public class Item {
private int code;
private String name;
private int price;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
デモ
package forum11152046;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Items.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum11152046/input.xml");
Items items = (Items) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(items, System.out);
}
}
input.xml/出力
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<items>
<item>
<code>12000</code>
<name>Samsung 620</name>
<price>9999</price>
</item>
<item>
<code>15000</code>
<name>NOKIA</name>
<price>19999</price>
</item>
<item>
<code>18000</code>
<name>HTC 620</name>
<price>29999</price>
</item>
</items>