如何将XML请求解析为Java对象?UnmarshalException异常求助
问题解决:JAXB解析带命名空间的XML异常
错误原因
你的XML中<Signature>元素属于命名空间http://www.w3.org/2000/09/xmldsig,但你定义的Signature实体类未指定对应的命名空间,同时错误地将xmlns当作普通属性映射——xmlns是XML的命名空间声明,并非元素的常规属性,JAXB会自动处理命名空间,不需要手动映射这个属性。
解决方案
1. 修改实体类,指定命名空间并移除xmlns属性映射
更新Signature类,在@XmlRootElement中添加namespace属性,同时删除与xmlns相关的字段、getter和setter方法:
@XmlRootElement(name = "Signature", namespace = "http://www.w3.org/2000/09/xmldsig") public class Signature { private String text; @XmlValue public String getText() { return text; } public void setText(String text) { this.text = text; } }
2. 批量配置命名空间(可选)
如果你的JAXBContext是通过包路径创建的,可在包下创建package-info.java文件统一指定命名空间,包内所有实体类会默认使用该命名空间:
@XmlSchema( namespace = "http://www.w3.org/2000/09/xmldsig", elementFormDefault = XmlNsForm.QUALIFIED ) package com.your.package; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlSchema;
完成上述修改后,JAXB就能正确识别带命名空间的<Signature>元素,顺利完成解析。
内容的提问来源于stack exchange,提问作者Akhilesh Dhiman
相关产品推荐
相关产品推荐

