在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"
));
通常的解决方法是:
- Change the root element on your XML to be "group"
- 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异常了。
分享到:
相关推荐
- `javax.xml.rpc.encoding`包:包含了编码和解码相关的类,如`Marshaller`和`Unmarshaller`,用于将Java对象序列化为XML和反序列化为Java对象。 使用`javax.xml.rpc` API进行Web服务开发时,通常会遵循以下步骤: ...
它提供了一种自动的方式,使得开发者能够方便地在XML文档和Java对象之间进行数据交换,极大地简化了XML处理。JAXB允许我们将Java类与XML Schema定义的元素和类型绑定,从而实现XML的序列化和反序列化。 在Java对象...
Person person = (Person) unmarshaller.unmarshal(new File("person.xml")); // 使用Marshaller从Java到XML marshaller.marshal(person, new File("person_out.xml")); ``` 这里,`unmarshal`方法将XML文件转换为...
MyBean myBean = (MyBean) unmarshaller.unmarshal(new File("mybean.xml")); // 使用转换后的Bean进行业务操作 } catch (JAXBException e) { e.printStackTrace(); } } } ``` Bean到XML的转换相对简单,主要...
Person person = (Person) unmarshaller.unmarshal(new File("person.xml")); System.out.println("Name: " + person.getName()); System.out.println("Age: " + person.getAge()); } } ``` ### Java对象到XML...
Person person = (Person) unmarshaller.unmarshal(xmlFile); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.marshal(person, System.out); ``` 这四种方法各有优缺点,选择哪种取决于具体...
Employee employee = (Employee) unmarshaller.unmarshal(new File("employee.xml")); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, ...
在Java中,`javax.xml.bind.JAXBContext`和`Unmarshaller`、`Marshaller`类用于实现JAXB操作。 每种解析技术都有其优势和适用场景: - DOM适合对XML文档进行频繁的随机访问和修改,但不适合大文件。 - SAX适合处理...
- `javax.xml.bind.Marshaller` 和 `javax.xml.bind.Unmarshaller` 分别用于将Java对象序列化为XML和从XML反序列化为Java对象。 总结,Java解析XML的方法有DOM、SAX、StAX和JAXB,每种都有其适用场景和优势。理解...
`javax.xml.bind.JAXBContext`和`javax.xml.bind.Marshaller`、`Unmarshaller`是关键组件。 总的来说,这个“xml.rar”资源提供的源代码将涵盖XML的读取、写入、解析、转换等多种操作,对于学习和掌握Java中XML处理...
同样,也可以通过`Unmarshaller.unmarshal()`方法的其他重载版本来处理XML字符串或Reader等不同输入源。 总结起来,Java的JAXB框架提供了从XML到Java Bean的自动映射功能,极大地简化了处理XML数据的工作。通过定义...
Employee employee = (Employee) unmarshaller.unmarshal(new File("XMLTest.xml")); // 序列化 Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_...
JAXBPerson deserializedPerson = (JAXBPerson) unmarshaller.unmarshal(new StringReader(xml)); System.out.println(deserializedPerson); } } ``` 在提供的`xml-demo`压缩包中,可能包含了使用这两种方法的...
User user = (User) unmarshaller.unmarshal(new File("user.xml")); ``` 总的来说,XML文件的读写涉及多种方法和库,选择哪种取决于具体需求,如文件大小、性能要求和便捷性。理解这些基础,将有助于你在实际项目...
MyObject objFromXml = (MyObject) unmarshaller.unmarshal(new File("path_to_xml_file")); ``` 三、XML处理工具 1. JDom:JDom是一个轻量级的API,简化了XML文档的处理。它提供了与DOM类似的功能,但更易于使用...
MyObject myObject = (MyObject) unmarshaller.unmarshal(new File("path_to_xml_file.xml")); ``` 4. **StAX(Streaming API for XML)**: StAX也是事件驱动的,但提供了向前和向后遍历XML的能力,因此更节省...
Employee employee = (Employee) unmarshaller.unmarshal(new File("example.xml")); System.out.println(employee.getName()); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个例子中,`...
Student student = (Student) unmarshaller.unmarshal(new StringReader(xml)); System.out.println("Name: " + student.getName()); System.out.println("Age: " + student.getAge()); } catch (JAXBException ...
JAXBElement<Employee> jaxbElement = unmarshaller.unmarshal(new StreamSource("input.xml"), Employee.class); Employee employee = jaxbElement.getValue(); XPathFactory xpathFactory = XPathFactory.new...
`javax.xml.bind.JAXBContext`和`javax.xml.bind.Marshaller/Unmarshaller`是主要组件。JAXB特别适用于处理复杂的数据结构和XML文档。 5. XML Schema验证: Java还提供了XML Schema(XSD)验证功能,确保XML文档...