我正在使用JAXB解析器将通过http请求发送的XML转换为Java对象,同时根据XSD模式对其进行验证。问题是,当调用unmarshal()方法时,它会引发以下异常:
UnMarshalException:意外元素(URI:“http://www.somedomain.com/”,local:“assign”)。所需元素为(无)
如果从根XML元素中删除名称空间,它会引发相同的异常,uri部分为空:
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);
@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 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>
如果有人能告诉我我哪里错了,我会非常感激的!
您需要在assignType
类上使用@XmlRootElement
批注。您可能还希望将name=patientassign
添加到patient实例变量中。
我尝试解组一个XML文件到一个对象。 我得到了这个错误: 我的解组过程如下所示: 我的XML实体看起来像: 我的XMLFile看起来像: 那么,我的解组过程出了什么问题?XML实体是用xjc创建的。 我也尝试了简单的xml文件/对象。这对我来说很好。
我以xml字符串的形式从服务器返回响应,现在试图将其解压缩回对象中。 在指定的行上,我得到以下异常: UnmarshalException:意外元素(URI:“”,local:“ResponseBlock”)。需要的元素为<{}responseblocktype> 谁能让我知道我哪里出了问题?如果可能的话,我可以提供更多的信息。我从其他帖子中看到,在我的顶级bean响应类中添加@XmlRootel
背景: 我使用JAXB将XML解组为Java对象。最初,我只是使用JAXB来执行解组。然后对代码进行静态分析,并提出了XML外部实体注入的高关键性问题。经过一点研究,我发现了一个建议(https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#JAXB_Unmarshaller)使用配置为防止解析
我有以下JAXB对象: 我使用JAXB编组程序将对象转换为XML: 它运行平稳,没有任何异常,但是,结果总是缺少元素键。我试图将其改为Attribute,但它也不起作用。以下是输出示例: 我曾尝试将键更改为另一个名称,例如AuthKey,但它仍然缺失。我做错了什么? 编辑我发现了问题,这是因为我的键的值是空的。如果它包含值,则将其写入XML。然而,您能解释一下为什么在XMLElement中,我写了
为什么在使用JAXB时需要使用? 我的工作场景是这样的: 我正在做一个从.NET到Java的转换项目。在.NET中,类的编写与POJO类似。我只是在代码中添加了注释(如、等)。并解决了与注释相关的错误。 现在我犯了这样的错误: XML文件如下: POJO类:
我试图解封XML文件。我创建了Jaxb类,但是当我试图解封时,它会给出: 这是我的ObjectFactory.java类: 你能请帮助,因为我被卡住了,不能提供我的客户开发这个功能的延迟原因。 谢谢,Jayesh Jain