我正在使用JAXB解析器将通过http请求发送的XML转换为Java对象,同时根据我的XSD架构对其进行验证。问题是,当解组()方法被调用它会引发此异常:JAXB Unmarshaller - 意外的元素异常
javax.xml.bind.UnmarshalException:意外的元素 (URI: “http://www.somedomain.com/”,当地 “分配”)。预计元素 有(无)
如果我从我的根XML元素删除的命名空间它将产生一个URI部分为空同样的异常:
javax.xml.bind.UnmarshalException:意外元素 (uri:“”,local:“assign”)。预计元素 有(无)
解组代码:
ServletInputStream xmlFile = request.getInputStream();
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File("PatientAssignment.xsd"));
JAXBContext jc = JAXBContext.newInstance(AssignType.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.setSchema(schema);
unmarshaller.setEventHandler(new AssignValidationEventHandler(patientResponses));
assignments = (AssignType) unmarshaller.unmarshal(xmlFile);
我的Java类和package-info.java:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "AssignType", namespace = "http://www.somedomain.com/", propOrder = {
"patient"
})
public class AssignType {
@XmlElement(namespace = "http://www.somedomain.com/", required = true)
protected List<PatientAssignType> patient;
/* Getters and setters ommitted */
}
// package-info.java
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.somedomain.com/", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
我试图解析XML:
<?xml version="1.0" encoding="UTF-8"?>
<assign xmlns="http://www.somedomain.com/">
<patientAssign xmlns="http://www.somedomain.com/">
<firstName>Buddy</firstName>
<lastName>Holly</lastName>
<email></email>
<dob></dob>
<phone></phone>
...
</patientAssign>
</assign>
如果有人不能如果我错了,我会非常感激!
请将您的PatientAssignType类添加到问题中。 – Perception
仅供参考 - 由于您在'@ XmlSchema'注释中指定了命名空间和elementFormDefault,因此您无需在其他位置指定它(请参阅:http://blog.bdoughan.com/2010/08/jaxb-namespaces的.html)。 –