现有要求,希望得到如下的数据
<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的,可以加进来哦。
相关推荐
JAXB的使用JAXB的使用JAXB的使用JAXB的使用
无需安装,解压后即可。jaxb-api.jar,jaxb-xjc.jar,jaxb-impl.jar,activation.jar等相关jar包在lib文件夹下。
jaxb-api jaxb-impl jar
JAXB的安装包及插件
JAXB的 eclipse插件 JAXB的 eclipse插件 JAXB的 eclipse插件 JAXB的 eclipse插件 JAXB的 eclipse插件
在使用webservice,mule esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded from the bootstrap classloader这个错误,按照打出的信息Use the endorsed directory mechanism to place jaxb-api.jar in ...
Jaxb annotation 使用 Jaxb annotation初步使用
java -jar JAXB2_20060607.jar On Windows, you can just double-click the jar file to execute. Release Notes Browse the release notes online, including what's new. Technical Support Please subscribe to...
有关Maven项目中缺少jaxb-api的异常报错解决,jaxb-api-2.3.0.jar
JAXB注解相关技术JAXB注解相关技术JAXB注解相关技术JAXB注解相关技术JAXB注解相关技术JAXB注解相关技术
使用jaxb生成XML例子,含有例子和注解解析
赠送jar包:jackson-module-jaxb-annotations-2.2.3.jar; 赠送原API文档:jackson-module-jaxb-annotations-2.2.3-javadoc.jar; 赠送源代码:jackson-module-jaxb-annotations-2.2.3-sources.jar; 赠送Maven依赖...
jaxb-api jaxb-impl jaxb-xjc jaxws-rt 这四个文件对应的jar包
现在很多maven仓库均没有此jar jaxb-api-2.3.0.jar jaxb-core-2.3.0.jar
一个JAXB2的基础教程,教你快速运用JAXB通过XSD绑定XML和读写XML
jaxb-2.2.jar jaxb jax
赠送jar包:jackson-module-jaxb-annotations-2.7.8.jar; 赠送原API文档:jackson-module-jaxb-annotations-2.7.8-javadoc.jar; 赠送源代码:jackson-module-jaxb-annotations-2.7.8-sources.jar; 赠送Maven依赖...
有关Maven项目中缺少jaxb-api的异常报错解决,jaxb-core-2.3.0.jar
我刚写好的 一个简单的小程序 动行里面的read文件 是在idea 中用jaxb 读xml中数据
jaxb最新版本2.2.6