JAXBアノテーション
JAXBアノテーション
JAXB.2.2.6で動確した。
アノテーション一覧
全部書くのはつらいので、よく使うものだけ。
@XmlAccessorType
クラスに指定して、フィールドやプロパティをデフォルトでマッピングするかどうかを指定する。
- value要素
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
クラスをXMLタグへマッピングする。
プロパティnameを指定する事によって要素名をできる。nameを省略した場合は、クラス名の先頭を小文字にした要素対応付けられる。
@XmlRootElement(name="hoge")
@XmlElement
- defaultValue要素
- デフォルトの値を設定する。
- name要素
- XMLタグ名を設定する。
- namespace要素
- XML要素のネームスペースを設定する。
- nillable要素
- nullを許容するかどうかを設定する。
- required要素
- 値が必須かどうかを設定する。
- type要素
- 参照するJavaクラスを設定する。
@XmlElement(name="hoge", nillable=true, required=true)
@XmlAttribute
- name要素
- 属性名を設定する。
- namespace要素
- XML要素のネームスペースを設定する。
- required要素
- 属性値が必須かどうかを設定する。
@XmlAttribute(name="hoge")
動作確認
ちょいと動かしてみる。
- jaxb-api-2.2.6
■main.Car
package main; public class Car { protected String name; protected int price; public Car() { } public Car(String name, int price) { this.name = name; this.price = price; } // setter,getter省略 }
マーシャル「オブジェクト→XML」
■main.SampleOutput
package main; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "sampleoutput") public class SampleOutput { protected int int1 = 100; protected int int2; protected Integer integer1 = new Integer(100); @XmlElement(nillable = true) protected Integer integer2 = null; @XmlElement(nillable = false) protected Integer integer3 = null; protected String str1 = "aaa"; protected String str2 = ""; protected String str3 = new String(); @XmlElement(nillable = true) protected String str4 = null; @XmlElement(nillable = false) protected String str5 = null; protected Car car1 = new Car("aaa", 10000); protected Car car2 = new Car(); @XmlElement(nillable = true) protected Car car3 = null; @XmlElement(nillable = false) protected Car car4 = null; @XmlTransient protected String result; @XmlElement(name = "intList1") protected List<Integer> intList1 = Arrays.asList(new Integer[] { new Integer("100"), null }); @XmlElement(name = "intList2") protected List<Integer> intList2 = new ArrayList<Integer>(); @XmlElement(name = "intList3", nillable = true) protected List<Integer> intList3 = null; @XmlElement(name = "intList4", nillable = false) protected List<Integer> intList4 = null; @XmlElement(name = "strList1") protected List<String> strList1 = Arrays.asList(new String[] { "aaa", "", null }); @XmlElement(name = "strList2") protected List<String> strList2 = new ArrayList<String>(); @XmlElement(name = "strList3", nillable = true) protected List<String> strList3 = null; @XmlElement(name = "strList4", nillable = false) protected List<String> strList4 = null; @XmlElementWrapper(name = "intListW1") @XmlElement(name = "integer") protected List<Integer> intListW1 = Arrays.asList(new Integer[] { new Integer("100"), null }); @XmlElementWrapper(name = "intListW2") @XmlElement(name = "integer") protected List<Integer> intListW2 = new ArrayList<Integer>(); @XmlElementWrapper(name = "intListW3", nillable = true) @XmlElement(name = "integer") protected List<Integer> intListW3 = null; @XmlElementWrapper(name = "intListW4", nillable = false) @XmlElement(name = "integer") protected List<Integer> intListW4 = null; @XmlElementWrapper(name = "strListW1") @XmlElement(name = "str") protected List<String> strListW1 = Arrays.asList(new String[] { "aaa", "", null }); @XmlElementWrapper(name = "strListW2") @XmlElement(name = "str") protected List<String> strListW2 = new ArrayList<String>(); @XmlElementWrapper(name = "strListW3", nillable = true) @XmlElement(name = "str") protected List<String> strListW3 = null; @XmlElementWrapper(name = "strListW4", nillable = false) @XmlElement(name = "str") protected List<String> strListW4 = null; @XmlElementWrapper(name = "carList") @XmlElement(name = "car") protected List<Car> carList = Arrays.asList(new Car[] { new Car("aaa", 10000), new Car(), null }); // setter,getter省略 }
■main.Marshal
package main; import javax.xml.bind.JAXB; public class Marshal { public static void main(String[] args) { JAXB.marshal(new SampleOutput(), System.out); } }
■結果
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <sampleoutput> <int1>100</int1> <int2>0</int2> <integer1>100</integer1> <integer2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> <str1>aaa</str1> <str2></str2> <str3></str3> <str4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> <car1> <name>aaa</name> <price>10000</price> </car1> <car2> <price>0</price> </car2> <car3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> <intList1>100</intList1> <strList1>aaa</strList1> <strList1></strList1> <intListW1> <integer>100</integer> </intListW1> <intListW2/> <intListW3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> <strListW1> <str>aaa</str> <str></str> </strListW1> <strListW2/> <strListW3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> <carList> <car> <name>aaa</name> <price>10000</price> </car> <car> <price>0</price> </car> </carList> </sampleoutput>
アンマーシャル「XML→オブジェクト」
■sample.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <sampleform> <int1>100</int1> <int2></int2> <int3 /> <int4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <int5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <!-- <int6 /> --> <!-- <int7 /> --> <integer1>100</integer1> <integer2></integer2> <integer3 /> <integer4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <integer5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <!-- <integer6 /> --> <!-- <integer7 /> --> <str1>aaa</str1> <str2></str2> <str3 /> <str4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <str5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <!-- <str6 /> --> <!-- <str7 /> --> <car1> <name>aaa</name> <price>10000</price> </car1> <car2></car2> <car3 /> <car4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <car5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <!-- <car6 /> --> <!-- <car7 /> --> <intList1>100</intList1> <intList1></intList1> <intList1 /> <!-- <intList2 /> --> <!-- <intList3 /> --> <intList4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <intList5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <strList1>aaa</strList1> <strList1></strList1> <strList1 /> <!-- <strList2 /> --> <!-- <strList3 /> --> <strList4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <strList5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <carList1> <name>aaa</name> <price>1000</price> </carList1> <carList1></carList1> <carList1 /> <!-- <carList2 /> --> <!-- <carList3 /> --> <carList4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <carList5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <intListW1> <integer>100</integer> <integer></integer> <integer /> </intListW1> <intListW2 /> <!-- <intListW3/> --> <!-- <intListW4/> --> <intListW5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <intListW6 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <strListW1> <str>aaa</str> <str></str> <str /> </strListW1> <strListW2 /> <!-- <strListW3/> --> <!-- <strListW4/> --> <strListW5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <strListW6 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <carListW1> <car> <name>aaa</name> <price>10000</price> </car> <car></car> <car /> </carListW1> <carListW2 /> <!-- <carListW3/> --> <!-- <carListW4/> --> <carListW5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <carListW6 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> </sampleform>
■main.SampleInput
package main; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "sampleform") public class SampleInput { protected int int1; protected int int2; protected int int3; @XmlElement(nillable = true) protected int int4; @XmlElement(nillable = false) protected int int5; @XmlElement(nillable = true) protected int int6; @XmlElement(nillable = false) protected int int7; protected Integer integer1; protected Integer integer2; protected Integer integer3; @XmlElement(nillable = true) protected Integer integer4; @XmlElement(nillable = false) protected Integer integer5; @XmlElement(nillable = true) protected Integer integer6; @XmlElement(nillable = false) protected Integer integer7; protected String str1; protected String str2; protected String str3; @XmlElement(nillable = true) protected String str4; @XmlElement(nillable = false) protected String str5; @XmlElement(nillable = true) protected String str6; @XmlElement(nillable = false) protected String str7; @XmlElement(nillable = false, required = true) protected String name4; protected Car car1; protected Car car2; protected Car car3; @XmlElement(nillable = true) protected Car car4; @XmlElement(nillable = false) protected Car car5; @XmlElement(nillable = true) protected Car car6; @XmlElement(nillable = false) protected Car car7; @XmlTransient protected String result; @XmlElement(name = "intList1") protected List<Integer> intList1; @XmlElement(name = "intList2", nillable = true) protected List<Integer> intList2; @XmlElement(name = "intList3", nillable = false) protected List<Integer> intList3; @XmlElement(name = "intList4", nillable = true) protected List<Integer> intList4; @XmlElement(name = "intList5", nillable = false) protected List<Integer> intList5; @XmlElement(name = "strList1") protected List<String> strList1; @XmlElement(name = "strList2", nillable = true) protected List<String> strList2; @XmlElement(name = "strList3", nillable = false) protected List<String> strList3; @XmlElement(name = "strList4", nillable = true) protected List<String> strList4; @XmlElement(name = "strList5", nillable = false) protected List<String> strList5; @XmlElement(name = "carList1") protected List<Car> carList1; @XmlElement(name = "carList2", nillable = true) protected List<Car> carList2; @XmlElement(name = "carList3", nillable = false) protected List<Car> carList3; @XmlElement(name = "carList4", nillable = true) protected List<Car> carList4; @XmlElement(name = "carList5", nillable = false) protected List<Car> carList5; @XmlElementWrapper(name = "intListW1") @XmlElement(name = "integer") protected List<Integer> intListW1; @XmlElementWrapper(name = "intListW2") @XmlElement(name = "integer") protected List<Integer> intListW2; @XmlElementWrapper(name = "intListW3", nillable = true) @XmlElement(name = "integer") protected List<Integer> intListW3; @XmlElementWrapper(name = "intListW4", nillable = false) @XmlElement(name = "integer") protected List<Integer> intListW4; @XmlElementWrapper(name = "intListW5", nillable = true) @XmlElement(name = "integer") protected List<Integer> intListW5; @XmlElementWrapper(name = "intListW6", nillable = false) @XmlElement(name = "integer") protected List<Integer> intListW6; @XmlElementWrapper(name = "strListW1") @XmlElement(name = "str") protected List<String> strListW1; @XmlElementWrapper(name = "strListW2") @XmlElement(name = "str") protected List<String> strListW2; @XmlElementWrapper(name = "strListW3", nillable = true) @XmlElement(name = "str") protected List<String> strListW3; @XmlElementWrapper(name = "strListW4", nillable = false) @XmlElement(name = "str") protected List<String> strListW4; @XmlElementWrapper(name = "strListW5", nillable = true) @XmlElement(name = "str") protected List<String> strListW5; @XmlElementWrapper(name = "strListW6", nillable = false) @XmlElement(name = "str") protected List<String> strListW6; @XmlElementWrapper(name = "carListW1") @XmlElement(name = "car") protected List<Car> carListW1; @XmlElementWrapper(name = "carListW2") @XmlElement(name = "car") protected List<Car> carListW2; @XmlElementWrapper(name = "carListW3", nillable = true) @XmlElement(name = "car") protected List<Car> carListW3; @XmlElementWrapper(name = "carListW4", nillable = false) @XmlElement(name = "car") protected List<Car> carListW4; @XmlElementWrapper(name = "carListW5", nillable = true) @XmlElement(name = "car") protected List<Car> carListW5; @XmlElementWrapper(name = "carListW6", nillable = false) @XmlElement(name = "car") protected List<Car> carListW6; }
■main.Unmarshal
package main; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.StringReader; import java.util.List; import javax.xml.bind.JAXB; public class Unmarshal { private static final String[] FILE_NAME = { "sample1.txt" }; private static final String DIR_PATH = "C:\\tools\\workspace\\xmlSample2\\src\\main\\resources\\"; public static void main(String[] args) { for (int i = 0; i < FILE_NAME.length; i++) { String xml = getXML(DIR_PATH + FILE_NAME[i]); SampleInput si = JAXB.unmarshal(new StringReader(xml), SampleInput.class); printSampleForm(si); System.out.println(); } } public static String getXML(String xmlFilePath) { StringBuilder sb = new StringBuilder(); try { BufferedReader br = new BufferedReader(new FileReader(new File( xmlFilePath))); String str; while ((str = br.readLine()) != null) { sb.append(str); } br.close(); } catch (FileNotFoundException e) { System.out.println(e); } catch (IOException e) { System.out.println(e); } return sb.toString(); } public static void printSampleForm(SampleInput si) { System.out.println("int1 : " + si.getInt1()); System.out.println("int2 : " + si.getInt2()); System.out.println("int3 : " + si.getInt3()); System.out.println("int4 : " + si.getInt4()); System.out.println("int5 : " + si.getInt5()); System.out.println("int6 : " + si.getInt6()); System.out.println("int7 : " + si.getInt7()); System.out.println("integer1 : " + si.getInteger1()); System.out.println("integer2 : " + si.getInteger2()); System.out.println("integer3 : " + si.getInteger3()); System.out.println("integer4 : " + si.getInteger4()); System.out.println("integer5 : " + si.getInteger5()); System.out.println("integer6 : " + si.getInteger6()); System.out.println("integer7 : " + si.getInteger7()); System.out.println("str1 : " + si.getStr1()); System.out.println("str2 : " + si.getStr2()); System.out.println("str3 : " + si.getStr3()); System.out.println("str4 : " + si.getStr4()); System.out.println("str5 : " + si.getStr5()); System.out.println("str6 : " + si.getStr6()); System.out.println("str7 : " + si.getStr7()); printCar(si.getCar1(), "car1"); printCar(si.getCar2(), "car2"); printCar(si.getCar3(), "car3"); printCar(si.getCar4(), "car4"); printCar(si.getCar5(), "car5"); printCar(si.getCar6(), "car6"); printCar(si.getCar7(), "car7"); List<Integer> il1 = si.getIntList1(); printList(il1, "intList1"); List<Integer> il2 = si.getIntList2(); printList(il2, "intList2"); List<Integer> il3 = si.getIntList3(); printList(il3, "intList3"); List<Integer> il4 = si.getIntList4(); printList(il4, "intList4"); List<Integer> il5 = si.getIntList5(); printList(il5, "intList5"); List<String> sl1 = si.getStrList1(); printList(sl1, "strList1"); List<String> sl2 = si.getStrList2(); printList(sl2, "strList2"); List<String> sl3 = si.getStrList3(); printList(sl3, "strList3"); List<String> sl4 = si.getStrList4(); printList(sl4, "strList4"); List<String> sl5 = si.getStrList5(); printList(sl5, "strList5"); List<Car> cl1 = si.getCarList1(); printCarList(cl1, "carList1"); List<Car> cl2 = si.getCarList2(); printCarList(cl2, "carList2"); List<Car> cl3 = si.getCarList3(); printCarList(cl3, "carList3"); List<Car> cl4 = si.getCarList4(); printCarList(cl4, "carList4"); List<Car> cl5 = si.getCarList5(); printCarList(cl5, "carList5"); List<Integer> ilw1 = si.getIntListW1(); printListW(ilw1, "intListW1", "integer"); List<Integer> ilw2 = si.getIntListW2(); printListW(ilw2, "intListW2", "integer"); List<Integer> ilw3 = si.getIntListW3(); printListW(ilw3, "intListW3", "integer"); List<Integer> ilw4 = si.getIntListW4(); printListW(ilw4, "intListW4", "integer"); List<Integer> ilw5 = si.getIntListW5(); printListW(ilw5, "intListW5", "integer"); List<Integer> ilw6 = si.getIntListW6(); printListW(ilw6, "intListW6", "integer"); List<String> slw1 = si.getStrListW1(); printListW(slw1, "strListW1", "str"); List<String> slw2 = si.getStrListW2(); printListW(slw2, "strListW2", "str"); List<String> slw3 = si.getStrListW3(); printListW(slw3, "strListW3", "str"); List<String> slw4 = si.getStrListW4(); printListW(slw4, "strListW4", "str"); List<String> slw5 = si.getStrListW5(); printListW(slw5, "strListW5", "str"); List<String> slw6 = si.getStrListW6(); printListW(slw6, "strListW6", "str"); List<Car> clw1 = si.getCarListW1(); printCarListW(clw1, "carListW1", "car"); List<Car> clw2 = si.getCarListW2(); printCarListW(clw2, "carListW2", "car"); List<Car> clw3 = si.getCarListW3(); printCarListW(clw3, "carListW3", "car"); List<Car> clw4 = si.getCarListW4(); printCarListW(clw4, "carListW4", "car"); List<Car> clw5 = si.getCarListW5(); printCarListW(clw5, "carListW5", "car"); List<Car> clw6 = si.getCarListW6(); printCarListW(clw6, "carListW6", "car"); } public static void printCar(Car car, String name) { if (car != null) { System.out.println(name + ".name : " + car.getName()); System.out.println(name + ".price : " + car.getPrice()); } else { System.out.println(name + " : " + car); } } public static <E> void printList(List<E> list, String name) { if (list != null) { int i = 0; for (E obj : list) { System.out.println(name + "[" + i + "] : " + obj); i++; } } else { System.out.println(name + " : " + list); } } public static void printCarList(List<Car> carList, String name) { if (carList != null) { int i = 0; for (Car car : carList) { printCar(car, name + "[" + i + "]"); i++; } } else { System.out.println(name + " : " + carList); } } public static <E> void printListW(List<E> list, String listName, String itemName) { if (list != null && list.size() > 0) { int i = 0; for (E obj : list) { System.out.println(listName + "." + itemName + "[" + i + "] : " + obj); i++; } } else { System.out.println(listName + " : " + list); } } public static void printCarListW(List<Car> carList, String listName, String itemName) { if (carList != null && carList.size() > 0) { for (Car car : carList) { System.out.println(listName + "." + itemName + ".name : " + car.getName()); System.out.println(listName + "." + itemName + ".price : " + car.getPrice()); } } else { System.out.println(listName + " : " + carList); } } }
■結果
int1 : 100 int2 : 0 int3 : 0 int4 : 0 int5 : 0 int6 : 0 int7 : 0 integer1 : 100 integer2 : 0 integer3 : 0 integer4 : null integer5 : 0 integer6 : null integer7 : null str1 : aaa str2 : str3 : str4 : null str5 : str6 : null str7 : null car1.name : aaa car1.price : 10000 car2.name : null car2.price : 0 car3.name : null car3.price : 0 car4 : null car5.name : null car5.price : 0 car6 : null car7 : null intList1[0] : 100 intList1[1] : 0 intList1[2] : 0 intList2 : null intList3 : null intList4[0] : null intList5[0] : 0 strList1[0] : aaa strList1[1] : strList1[2] : strList2 : null strList3 : null strList4[0] : null strList5[0] : carList1[0].name : aaa carList1[0].price : 1000 carList1[1].name : null carList1[1].price : 0 carList1[2].name : null carList1[2].price : 0 carList2 : null carList3 : null carList4[0] : null carList5[0].name : null carList5[0].price : 0 intListW1.integer[0] : 100 intListW1.integer[1] : 0 intListW1.integer[2] : 0 intListW2 : [] intListW3 : null intListW4 : null intListW5 : null intListW6 : [] strListW1.str[0] : aaa strListW1.str[1] : strListW1.str[2] : strListW2 : [] strListW3 : null strListW4 : null strListW5 : null strListW6 : [] carListW1.car.name : aaa carListW1.car.price : 10000 carListW1.car.name : null carListW1.car.price : 0 carListW1.car.name : null carListW1.car.price : 0 carListW2 : [] carListW3 : null carListW4 : null carListW5 : null carListW6 : []