jaxb 继承

现有要求,希望得到如下的数据

<root>
   <auth>
     <user></user>
     <token></token>
   <auth>

  <data>
       主要的问题在这里,这里标签,要根据上下文而发生变化。
  </data>
</root>

 

于是我想到了,是否可以用过用继承来解决data标签的问题呢?不知道,以前没写过,那就试试吧。还好,最终终于是实现了。代码如下

 

先是root类的代码

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

	@XmlElement(name = "auth")
	private Auth auth;

        // 重点看这里
        @XmlElementRef
	private Data data;

       // getter and setter
}

 

再是Auth类

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;

@XmlAccessorType(XmlAccessType.FIELD)
public class Auth {
 
	@XmlElement(name = "user")
	private String user;

	@XmlElement(name = "token")
	private String token;
        
       // getter and setter
}

 

好了,以上比较简单,重点来了,先看Data类,是怎么变化的吧

import javax.xml.bind.annotation.XmlSeeAlso;

@XmlSeeAlso(value = { org.test.OrderData.class, org.test.UserData.class })
public class Data {
}

 看到了吧,父类里, XmlSeeAlso,写上它有哪些子类,差不多是这个意思吧。

 

再来一个OrderData

@XmlRootElement(name = "XML_DATA")
@XmlAccessorType(XmlAccessType.FIELD)
public class OrderData extends org.test.Data {
}

 你没有看错,OrderData里,写了个XmlRootElement标签。

好了,以上就是继承的实现了。主要是用到了@XmlSeeAlso,@XmlElementRef这两个标签。

 

XmlSeeAlso,主要是用来说明,父类有哪些个子类。

XmlElementRef,它的作用是:如果不你写的话,生成的XML,会存在xsi:样子的东东,也就是所谓的命名空间吧。自己尝试去吧。

 

 

参考文章:

 

这篇文章,使我确信,可以通过继承的方式来解决

http://blog.csdn.net/u014021905/article/details/42215137

 

这个里面提到了怎么实现继承,于是@XmlSeeAlso进入了我的视线。

http://blog.csdn.net/xiaofanku/article/details/49977097

 

这是怎么样去掉命名空间

http://blog.csdn.net/inaoen/article/details/49908875

 

这是为什么要在子类上写上@XmlRootElement标签。曾经我出现过个么个错误 @XmlElementRef 无效: 或其任意子类对此上下文是未知的。

http://www.apihome.cn/api/java/XmlElementRef.html

 

 打个小广告

我建立了个群  622539266  JAVA知识交流,有在学JAVA的,或是想学JAVA的,可以加进来哦。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值