2010-11-01 12 views
0

Это XMLXML десериализации Java XSTREAM вопрос

<?xml version="1.0" encoding="UTF-8"?> 
<person> 
    <fullname>Guilherme</fullname> 
    <age>10</age> 
    <address>address,address,address,address,</address> 
</person> 

<person> 
    <fullname>Guilherme</fullname> 
    <age>10</age> 
    <address>address,address,address,address,</address> 
</person> 

Это POJO,

public class Person { 

    private String name; 
    private int age; 
    private String address; 

    public Person(String name) { 
     this.name = name; 
    } 

    public Person(String name, int age, String address) { 
     this.name = name; 
     this.age = age; 
     this.address = address; 
    } 

    public Person() { 
    } 

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

Это unmarshaller логика:

@Override 
    public Object unmarshal(HierarchicalStreamReader reader, 
      UnmarshallingContext context) { 
     List<Person> persons = new ArrayList<Person>(); 
     while (reader.hasMoreChildren()) { 

      Person person = new Person(); 
      reader.moveDown(); 
      System.out.println("+" + reader.getValue()); 
      person.setName(reader.getValue()); 
      reader.moveUp(); 
      reader.moveDown(); 
      System.out.println("+" + reader.getValue()); 
      person.setAge(Integer.parseInt(reader.getValue())); 
      reader.moveUp(); 
      reader.moveDown(); 
      System.out.println("+" + reader.getValue()); 
      person.setAddress(reader.getValue()); 
      reader.moveUp(); 
      persons.add(person); 
     } 
     return persons; 
    } 

Я получаю следующее исключение:

[Fatal Error] :8:2: The markup in the document following the root element must be well-formed. 
Exception in thread "main" com.thoughtworks.xstream.io.StreamException: : The markup in the document following the root element must be well-formed. 
     at com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:86) 
     at com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:70) 
     at com.thoughtworks.xstream.XStream.fromXML(XStream.java:861) 
     at com.mycompany.xstreamconvertersample.App.main(App.java:34) 
Caused by: org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed. 
     at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:239) 
     at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283) 
     at com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:79) 
     ... 3 more 
------------------------------------------------------------------------ 
[ERROR]BUILD ERROR 

ответ

1

XML-файл не является корректным. Он не может иметь два отдельных корневых элемента, в вашем случае <person>. Должен быть один элемент верхнего уровня, такой как <persons>, вокруг обоих персональных элементов.

EDIT: Для того, чтобы быть хорошо сформирован, он должен был бы выглядеть следующим образом

<persons> 
    <person> 
    . 
    . 
    </person> 
    <person> 
    . 
    . 
    </person> 
<persons> 
+0

ОК, как я могу проверить это против моей XSD? и можете ли вы обновить свой ответ, содержащий требуемый XML – 2010-11-01 16:40:14

+0

Как был создан XML? Как выглядит xsd? –

+0

Я хочу создать xsd для данного формата XML. Я сгенерировал этот XML вручную – 2010-11-01 16:45:32

Смежные вопросы