2017-02-27 9 views
0

なぜこの例ではバゼのリストが正しくアンマーシャリングされていませんか?例では、ヌルプロパティーを持つArrayList内の単一のBazという結果になります。正しく動作させるには?jaxb unmarshallリストが正常に動作しています

public class Application { 

    private final static String FOO_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><FooBar><foo>foo</foo><bar>1</bar>" 
      + "<bazes><baz><baz1>baz11</baz1><baz2>baz12</baz2></baz><baz><baz1>baz21</baz1><baz2>baz22</baz2></baz></bazes>" 
      + "</FooBar>"; 

    public static void main(String[] args) throws JAXBException { 

     JAXBContext ctx = JAXBContext.newInstance(FooBar.class); 
     Unmarshaller u = ctx.createUnmarshaller(); 
     FooBar result = (FooBar) u.unmarshal(new ByteArrayInputStream(FOO_XML.getBytes())); 

     System.out.println(result); 
     System.out.println(result.bazes.size()); 
    } 

    @XmlRootElement(name = "FooBar") 
    @XmlAccessorType(XmlAccessType.FIELD) 
    public static class FooBar { 

     @XmlElement 
     private String foo; 
     @XmlElement 
     private int bar; 
     @XmlElement(name = "bazes") 
     public ArrayList<Baz> bazes; 

     @Override 
     public String toString() { 
      StringBuffer sb = new StringBuffer(); 
      sb.append(foo + " "); 
      sb.append(bar + " "); 
      for (Baz baz : bazes) { 
       sb.append(baz.baz1 + " " + baz.baz2 + " "); 
      } 
      return sb.toString(); 
     } 

     @XmlType 
     @XmlAccessorType(XmlAccessType.FIELD) 
     public static class Baz { 

      @XmlElement 
      private String baz1; 
      @XmlElement 
      private String baz2; 
     } 
    } 
} 

結果が

foo 1 null null 
1 

答えて

1

に従っているあなたは、これは完璧に動作し、この

@XmlElementWrapper(name = "bazes") 
@XmlElement(name = "baz", type = Baz.class) 
public ArrayList<Baz> bazes; 
+0

よう@XmlElementWrapperと何かを使用してラッパーオブジェクトを指定する必要があります。 –

関連する問題