2013-09-06 6 views
1

매우 호기심이 많은 상황이 있습니다.속성 컬렉션에만있는 @XmlElement는 xsi : nil을 인쇄하지 않습니다.

public class Child { 

    @XmlAttribute 
    public String name; 
} 
@XmlRootElement 
public class Parent { 

    public static void main(final String[] args) throws Exception { 
     final Parent parent = new Parent(); 
     parent.children = new ArrayList<>(); 
     for (int i = 0; i < 3; i++) { 
      final Child child = new Child(); 
      child.name = Integer.toString(i); 
      parent.children.add(child); 
     } 
     final JAXBContext context = JAXBContext.newInstance(Parent.class); 
     final Marshaller marshaller = context.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 
     marshaller.marshal(parent, System.out); 
    } 

    @XmlElement(name = "child", nillable = true) 
    public List<Child> children; 
} 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<parent> 
    <child name="0"/> <!-- xsi:nil expected --> 
    <child name="1"/> 
    <child name="2"/> 
</parent> 

질문 1 : 그 children에는 xsi:nil 속성이없는 이유는 무엇입니까?

답변

1

xsi:nil은 cle 필름의 항목이 null 인 경우에만 작성됩니다. 귀하의 예에서 List의 모든 항목은 Child입니다.

당신이 childrenList에 널을 추가 할 Parent 클래스의 코드를 업데이트하는 경우

부모.

public static void main(final String[] args) throws Exception { 
     final Parent parent = new Parent(); 
     parent.children = new ArrayList<>(); 
     for (int i = 0; i < 3; i++) { 
      final Child child = new Child(); 
      child.name = Integer.toString(i); 
      parent.children.add(child); 
     } 

     // UPDATE - Add a null entry to the List 
     parent.children.add(null); 

     final JAXBContext context = JAXBContext.newInstance(Parent.class); 
     final Marshaller marshaller = context.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 
     marshaller.marshal(parent, System.out); 
    } 

출력

null 엔트리에 대응하는 요소는 childxsi:nil 속성을 포함한다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<parent> 
    <child name="0"/> 
    <child name="1"/> 
    <child name="2"/> 
    <child xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
</parent>