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

Java解析XML反序列化时出现Class Cast Exception问题求助

解决JAXB反序列化类型转换错误(JAXBElement转Securities)

问题原因

当使用unmarshal(StreamSource)方法时,若XML根元素与Securities类的@XmlRootElement注解配置不匹配(比如元素名、命名空间不一致),或者JAXB无法直接识别根类型,就会返回JAXBElement<Securities>而非直接的Securities实例,此时强制类型转换就会抛出异常。

解决方案

方案1:显式指定反序列化类型,获取JAXBElement的值

修改代码,使用带目标类参数的unmarshal方法,明确告诉JAXB要反序列化的类型,然后从JAXBElement中取出实际对象:

final JAXBContext securityContext = JAXBContext.newInstance(Securities.class);
Unmarshaller unmarshaller = securityContext.createUnmarshaller();
// 传入StreamSource和目标类,返回JAXBElement
JAXBElement<Securities> securitiesElement = unmarshaller.unmarshal(
    new StreamSource(new StringReader(sourceMessage.getPayload())), 
    Securities.class
);
final Securities securities = securitiesElement.getValue();

方案2:检查并修正Securities类的JAXB注解

确保Securities类上的@XmlRootElement注解与XML的根元素完全匹配:

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(
    name = "securities", // 必须和XML根元素的标签名一致
    namespace = "http://your-xml-namespace.com" // 如果XML有命名空间,必须指定
)
public class Securities {
    // 类成员及getter/setter
}

如果XML根元素没有命名空间,就去掉namespace属性;如果标签名不同,修改name属性为XML实际的根元素名。配置正确后,直接使用原代码的强制转换就可以正常工作。

内容的提问来源于stack exchange,提问作者NoobCoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:22:01