当前位置: 首页 > 知识库问答 >
问题:

JAXB反封送器-意外的元素异常

唐兴思
2023-03-14

我正在使用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>

如果有人能告诉我我哪里错了,我会非常感激的!

共有1个答案

南门烈
2023-03-14

您需要在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