2
У меня очень похожая проблема в этой теме unexpected element error while unmarshalling, но все же я не могу решить исключение. Поскольку пространство имен в XML и package-info точно такое же ... или это из-за xsd-файла?Unmarshalling неожиданный элемент error
Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.example.org/Uni", local:"Uni"). Expected elements are <{http://www.example.org/Uni}uni>
XML:
<?xml version="1.0" encoding="UTF-8"?>
<tns:Uni xmlns:tns="http://www.example.org/Uni" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/Uni Uni.xsd ">
<tns:Semester>
<tns:nr>1</tns:nr>
<tns:datum>01.02.2012</tns:datum>
</tns:Semester>
<tns:Semester>
<tns:nr>2</tns:nr>
<tns:datum>01.02.2012</tns:datum>
</tns:Semester>
</tns:Uni>
XSD
<complexType name="Uni">
<choice>
<element name="Semester" type="tns:Semester" maxOccurs="unbounded"></element>
</choice>
</complexType>
<complexType name="Semester">
<sequence>
<element name="nr" type="int"></element>
<element name="datum" type="string"></element>
</sequence>
</complexType>
пакет-инфо
@javax.xml.bind.annotation.XmlSchema(
namespace = "http://www.example.org/Uni", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package parserTest;
Uni.java
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Uni
{
@XmlElement(name = "Semester")
protected List<Semester> semester;
public List<Semester> getSemester()
{
if (this.semester == null)
{
this.semester = new ArrayList<Semester>();
}
return this.semester;
}
}
Демаршаллизация
public static void main(String[] args) throws JAXBException
{
ObjectFactory factoryForElementObjects = new ObjectFactory();
List<Semester> semesterL = new ArrayList<Semester>();
Uni uni = new Uni();
uni.semester = semesterL;
JAXBContext context = JAXBContext.newInstance(Uni.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Uni un = (Uni) unmarshaller.unmarshal(new File("src/main/resources/Uni.xml"));
List<Semester> semesterA = un.semester;
System.out.println(semesterA.get(0).nr);
}
Thx .. Я помечать как ответил ... только почему он ожидает уни, я использовал только заглавные буквы, Я вижу до сих пор ... или из-за объекта uni? – Fendrix
Ну, я не эксперт в JAXB, но я думаю, что он всегда будет «предпочитать» создание элементов XML с нижним регистром. Нашел ответ, упорядочивающий объект 'Uni'. –
возможно ... u re right ... все теги должны быть в нижнем регистре ... – Fendrix