`

Unmarshaller异常javax.xml.bind.UnmarshalException: unexpected element处理方法

阅读更多

在marshaller/Unmarshaller开发过程中可能会遇到javax.xml.bind.UnmarshalException: unexpected element异常,比如

unexpected element (uri:"", local:"Group"). Expected elements are <{}group>

Meet an exception when unmarshalling from xml

JAXBContext
 jc 
=
 
JAXBContext
.
newInstance
(
Group
.
class
);
 

Unmarshaller
 unmarshaller 
=
 jc
.
createUnmarshaller
();


Group
 group 
=
 
(
User
)
unmarshaller
.
unmarshal
(
new
 
File
(
"group.xml"
));



通常的解决方法是:

  1. Change the root element on your XML to be "group"
  2. Add the annotation @XmlRootElement(name="Group") to the Group classs.

但有时这样做了,还是不能解决问题。原因在于ObjectFactory类。

在开发的过程中我们可能是根据XSD文件(XML文件的格式文件),通过JDK的/bin/xjc.exe生成java文件。有些时候我们会手工修改生成后的java文件;有些时候XSD文件会有冲突,我们会删除冲突的文件,分别生成java文件,这样就导致了xjc生成的ObjectFactory.java中没有包含全部的与XSD文件对应的方法。所以在删除冲突的XSD文件,分别生成java文件以后,要手动修改ObjectFactory.java,使之包含所有生成的java类的createXXX()方法。这样再编译打包,重现运行,就不会出现javax.xml.bind.UnmarshalException: unexpected element异常了。

分享到:
评论
1 楼 jidu01 2012-12-07  
没明白后面的一段,LZ 能否详细说一下呢。怎样删除XSD,又怎样手动修改ObjectFactory.java呢?

相关推荐

    javax.xml.rpc相关jar包

    - `javax.xml.rpc.encoding`包:包含了编码和解码相关的类,如`Marshaller`和`Unmarshaller`,用于将Java对象序列化为XML和反序列化为Java对象。 使用`javax.xml.rpc` API进行Web服务开发时,通常会遵循以下步骤: ...

    [转载] JAXB中Java对象和XML之间的转换

    它提供了一种自动的方式,使得开发者能够方便地在XML文档和Java对象之间进行数据交换,极大地简化了XML处理。JAXB允许我们将Java类与XML Schema定义的元素和类型绑定,从而实现XML的序列化和反序列化。 在Java对象...

    JAXBContext测试Java对象与xml的相互转换Demo

    Person person = (Person) unmarshaller.unmarshal(new File("person.xml")); // 使用Marshaller从Java到XML marshaller.marshal(person, new File("person_out.xml")); ``` 这里,`unmarshal`方法将XML文件转换为...

    xml和bean 互相转换

    MyBean myBean = (MyBean) unmarshaller.unmarshal(new File("mybean.xml")); // 使用转换后的Bean进行业务操作 } catch (JAXBException e) { e.printStackTrace(); } } } ``` Bean到XML的转换相对简单,主要...

    JAXB工具类 xml转为java对象 java对象转为xml

    Person person = (Person) unmarshaller.unmarshal(new File("person.xml")); System.out.println("Name: " + person.getName()); System.out.println("Age: " + person.getAge()); } } ``` ### Java对象到XML...

    java读取和写入xml文件

    Person person = (Person) unmarshaller.unmarshal(xmlFile); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.marshal(person, System.out); ``` 这四种方法各有优缺点,选择哪种取决于具体...

    java四种xml读写demo

    Employee employee = (Employee) unmarshaller.unmarshal(new File("employee.xml")); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, ...

    Java中四种XML解析技术详解

    在Java中,`javax.xml.bind.JAXBContext`和`Unmarshaller`、`Marshaller`类用于实现JAXB操作。 每种解析技术都有其优势和适用场景: - DOM适合对XML文档进行频繁的随机访问和修改,但不适合大文件。 - SAX适合处理...

    java 解析xml

    - `javax.xml.bind.Marshaller` 和 `javax.xml.bind.Unmarshaller` 分别用于将Java对象序列化为XML和从XML反序列化为Java对象。 总结,Java解析XML的方法有DOM、SAX、StAX和JAXB,每种都有其适用场景和优势。理解...

    xml.rar_java xml_操作 xml

    `javax.xml.bind.JAXBContext`和`javax.xml.bind.Marshaller`、`Unmarshaller`是关键组件。 总的来说,这个“xml.rar”资源提供的源代码将涵盖XML的读取、写入、解析、转换等多种操作,对于学习和掌握Java中XML处理...

    支持XML转Bean

    同样,也可以通过`Unmarshaller.unmarshal()`方法的其他重载版本来处理XML字符串或Reader等不同输入源。 总结起来,Java的JAXB框架提供了从XML到Java Bean的自动映射功能,极大地简化了处理XML数据的工作。通过定义...

    JAVA的XML解析的四种方法

    Employee employee = (Employee) unmarshaller.unmarshal(new File("XMLTest.xml")); // 序列化 Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_...

    JavaXml及Bean互转

    JAXBPerson deserializedPerson = (JAXBPerson) unmarshaller.unmarshal(new StringReader(xml)); System.out.println(deserializedPerson); } } ``` 在提供的`xml-demo`压缩包中,可能包含了使用这两种方法的...

    读写xml文件的方法

    User user = (User) unmarshaller.unmarshal(new File("user.xml")); ``` 总的来说,XML文件的读写涉及多种方法和库,选择哪种取决于具体需求,如文件大小、性能要求和便捷性。理解这些基础,将有助于你在实际项目...

    java读写xml

    MyObject objFromXml = (MyObject) unmarshaller.unmarshal(new File("path_to_xml_file")); ``` 三、XML处理工具 1. JDom:JDom是一个轻量级的API,简化了XML文档的处理。它提供了与DOM类似的功能,但更易于使用...

    java调用XML

    MyObject myObject = (MyObject) unmarshaller.unmarshal(new File("path_to_xml_file.xml")); ``` 4. **StAX(Streaming API for XML)**: StAX也是事件驱动的,但提供了向前和向后遍历XML的能力,因此更节省...

    java读取XML内容源代码

    Employee employee = (Employee) unmarshaller.unmarshal(new File("example.xml")); System.out.println(employee.getName()); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个例子中,`...

    XML和类对象互转 (java) 并含有测试例子

    Student student = (Student) unmarshaller.unmarshal(new StringReader(xml)); System.out.println("Name: " + student.getName()); System.out.println("Age: " + student.getAge()); } catch (JAXBException ...

    Java四种操作XML语言入门案例

    JAXBElement&lt;Employee&gt; jaxbElement = unmarshaller.unmarshal(new StreamSource("input.xml"), Employee.class); Employee employee = jaxbElement.getValue(); XPathFactory xpathFactory = XPathFactory.new...

    JAVA XML 解析

    `javax.xml.bind.JAXBContext`和`javax.xml.bind.Marshaller/Unmarshaller`是主要组件。JAXB特别适用于处理复杂的数据结构和XML文档。 5. XML Schema验证: Java还提供了XML Schema(XSD)验证功能,确保XML文档...

Global site tag (gtag.js) - Google Analytics