使用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;
}
===========================
请问这是什么问题?
由于子类较多,而且重复的字段也不少,用到继承,需要怎么处理?
...全文
263 3 点赞 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过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文本
  • 打赏
  • 举报
回复
相关推荐
发帖
Java EE
加入

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2017-11-04 04:20
社区公告
暂无公告