Java 解组意外元素错误

Java 解组意外元素错误,java,xml,xsd,jaxb2,Java,Xml,Xsd,Jaxb2,我有一个与这个主题非常相似的问题,但我仍然无法解决这个异常。因为XML中的名称空间和包信息完全相同。。。还是因为xsd文件 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中的名称空间和包信息完全相同。。。还是因为xsd文件

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>
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;
    }

}
@xmlacessortype(xmlacesstype.FIELD)
@XmlRootElement
公立大学
{
@xmlement(name=“学期”)
受保护名单;
公共列表
{
如果(this.sement==null)
{
this.sement=new ArrayList();
}
本学期返回;
}
}
拆封

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);
}
publicstaticvoidmain(字符串[]args)抛出jaxbeexception
{
ObjectFactoryForElementObjects=new ObjectFactory();
List semestel=new ArrayList();
Uni Uni=新Uni();
大学学期=学期;
JAXBContext context=JAXBContext.newInstance(Uni.class);
Unmarshaller Unmarshaller=context.createUnmarshaller();
Uni un=(Uni)unmarshaller.unmarshal(新文件(“src/main/resources/Uni.xml”);
列表semesterA=un.semterm;
系统输出打印项数(semesterA.get(0.nr);
}

问题是解组程序需要元素
uni
,但它会找到
uni

为Uni类设置XML元素名称应该可以做到以下几点:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Uni")
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;
    }

}
@xmlacessortype(xmlacesstype.FIELD)
@XmlRootElement(name=“Uni”)
公立大学
{
@xmlement(name=“学期”)
受保护名单;
公共列表
{
如果(this.sement==null)
{
this.sement=new ArrayList();
}
本学期返回;
}
}

Thx。。我会把它贴上回答的标签。。。只是为什么它期待uni,我只是用大写字母,因为我可以看到目前为止。。。或者因为对象uni?嗯,我不是JAXB方面的专家,但我认为它总是“更喜欢”使用小写创建XML元素。找到了编组
Uni
对象的答案。就我个人而言,我使用JAXB在同一个应用程序上编组和解编组对象。甚至不要使用模式。正如我所说,我不是JAXB专家。但您可以使用绑定编译器(xjc)创建给定模式的Java类。您还可以验证给定模式的XML(通过应用程序中的JAXB)。如果它听起来很有趣,请看一看:和
@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);
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Uni")
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;
    }

}