ぺーぺーSEのブログ

備忘録・メモ用サイト。

JAXBアノテーション

JAXBアノテーション

JAXB.2.2.6で動確した。

アノテーション一覧

全部書くのはつらいので、よく使うものだけ。

@XmlAccessorType

クラスに指定して、フィールドやプロパティをデフォルトでマッピングするかどうかを指定する。

  • value要素
    • FIELD
      • フィールドがXMLにバインドされる
    • PROPERTY
      • JavaBeanプロパティ(ゲッター/セッターのペア)がXMLにバインドされる
    • PUBLIC_MEMBER
      • パブリックフィールドおよびJavaBeanプロパティがXMLにバインドされる(これがデフォルト)
    • NONE
      • フィールドもJavaBeanプロパティもXMLにバインドされない
@XmlAccessorType(XmlAccessType.FIELD)


@XmlRootElement

クラスをXMLタグへマッピングする。
プロパティnameを指定する事によって要素名をできる。nameを省略した場合は、クラス名の先頭を小文字にした要素対応付けられる。

  • name要素
    • XMLタグ名を設定する。
  • namespace要素
    • XML要素のネームスペースを設定する。
@XmlRootElement(name="hoge")


@XmlElement

クラスフィールドをXMLタグへマッピングする。

  • defaultValue要素
    • デフォルトの値を設定する。
  • name要素
    • XMLタグ名を設定する。
  • namespace要素
    • XML要素のネームスペースを設定する。
  • nillable要素
    • nullを許容するかどうかを設定する。
  • required要素
    • 値が必須かどうかを設定する。
  • type要素
    • 参照するJavaクラスを設定する。
@XmlElement(name="hoge", nillable=true, required=true)


@XmlAttribute

フィールドをXMLの属性にXMLの属性にマッピングする

  • name要素
    • 属性名を設定する。
  • namespace要素
    • XML要素のネームスペースを設定する。
  • required要素
    • 属性値が必須かどうかを設定する。
@XmlAttribute(name="hoge")


@XmlElementWrapper

アノテーションを付与したフィールドをnameプロパティで指定したXMLタグでラッピングする。

  • name要素
    • XMLタグ名を設定する。
  • namespace要素
    • XML要素のネームスペースを設定する。
  • nillable要素
    • nullを許容するかどうかを設定する。
  • required要素
    • 値が必須かどうかを設定する。
@XmlElementWrapper(name="hoge", nillable=true)

その他アノテーション
http://docs.oracle.com/javase/jp/8/docs/api/

動作確認

ちょいと動かしてみる。

  • 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 : []