使用JAXBContext对xml进行反序列化之后,得到的是基类对象,不是子类

geniushht 2017-11-04 04:20:12
写了一个程序,从服务器读取一段xml,反序列化成某个子类,发现这个问题。

例子1:
比如 B 继承自 A,从服务器读取B实体生成的xml,来到客户端反序列化,得到的对象是A。

例子2:
把A的字段copy到B,解除继承关系,从服务器读取B实体生成的xml,来到客户端反序列化,就可以得到对象B。

反序列化代码:
public static Object XmlToBean(String xml,Class load) throws JAXBException{
JAXBContext context = JAXBContext.newInstance(load);
Unmarshaller unmarshaller = context.createUnmarshaller();
Object object = unmarshaller.unmarshal(new StringReader(xml));
return object;
}
===========================
请问这是什么问题?
由于子类较多,而且重复的字段也不少,用到继承,需要怎么处理?
...全文
452 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
geniushht 2017-11-08
  • 打赏
  • 举报
回复
自己想了个解决办法: 父类A只定义公用属性,不加XmlXmlRootElement注解,子类B自己加XmlRootElement注解,这样可以解决问题。 应该是JAXB做反序列化的时候,是从基类开始操作,基类如果有XmlXmlRootElement就直接反序列化。
  • 打赏
  • 举报
回复

public static Object XmlToBean(String xml,Class parent,Class child) throws JAXBException{
        JAXBContext context = JAXBContext.newInstance(parent,child);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        return JAXB.unmarshal(new StringReader(xml),child)
    }
tianfang 2017-11-04
  • 打赏
  • 举报
回复
贴一下xml文本

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧