You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:31:04