`

jaxb 继承

    博客分类:
  • java
阅读更多

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

<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的,可以加进来哦。

 

分享到:
评论

相关推荐

    jaxb2.0英文文档

    2. **更强大的绑定编译器**:可以处理更复杂的XML Schema特性,如复杂类型和继承。 3. **性能提升**:优化了序列化和反序列化过程,提高了性能。 4. **自定义扩展(Customizations)**:允许用户通过注解或XML绑定...

    jaxb api 2.2

    8. **继承支持**:在JAXB 2.2中,可以对具有继承关系的Java类进行数据绑定,这使得XML Schema中的复杂类型继承可以映射到Java类的继承结构。 9. **国际化(i18n)**:JAXB提供对国际化(i18n)的支持,允许在XML中...

    JAXB 学习笔记

    - **继承与接口**:JAXB支持继承,子类会继承父类的XML映射。同时,也可以为接口创建XML绑定。 - **类型转换**:使用`@XmlJavaTypeAdapter`注解实现自定义类型转换。 - **XML Schema支持**:JAXB可以直接从XML ...

    JAXB Demo及namespace的prefix自定义解决方案

    在实际应用中,你可能还需要处理更复杂的情况,比如处理多个命名空间、处理嵌套的对象以及处理继承关系。JAXB提供了丰富的功能和灵活性来处理这些情况,但同时也需要对XML和Java反射机制有深入的理解。 总结一下,...

    使用JAXB完成JAVAbean与xml互转

    JAXB还提供了许多高级功能,例如处理命名空间、处理复杂类型、处理继承结构、自定义序列化行为等。在实际项目中,了解这些高级特性能够帮助你更好地利用JAXB解决XML数据处理的问题。 总的来说,JAXB是Java平台中一...

    JAXB学习笔记

    此外,JAXB还支持复杂的XML结构,如命名空间、属性群组、继承和多态性,使得处理XML数据变得更加简单。 然而,JAXB也有其局限性,比如它可能不适合处理大型XML文档,因为它会将整个XML文档加载到内存中。对于这种...

    xml2object、object2xml之JAXB

    最近在学习WebService,讲到JAXB!没听说过!看了才知道jdk中自带了这个功能,什么这个框架那个框架都用了!原来就在眼前你也不知道!我这儿有视频,有需要请留言!代码献上…… List Map 继承 接口 数据类型不一至...

    解决xmlns设置后继承到子类问题

    除了上述方法,还可以使用如JAXB(Java Architecture for XML Binding)等库来处理XML与Java对象之间的映射,这些库通常会自动处理命名空间问题。 在实际项目中,如果你需要进一步的解决方案,可以下载提供的jar包...

    immutable-xjc:immutable-xjc是一个JAXB 2.0 XJC插件,用于使用可选的构建器模式生成器使模式派生类不可变

    IMMUTABLE-XJC是一个JAXB 2.x XJC插件,用于使模式派生类不可变: 删除所有的setter方法 分数班决赛 创建一个以所有字段为参数的公共构造函数 创建一个受保护的无参数构造函数 将课程中的所有字段标记为final ...

    PDF-JavaAndXmlDataBinding-英文版.rar

    9. **高级特性**: JAXB支持XML的包容性处理,如处理未知元素、处理继承关系、处理空值和默认值,以及更复杂的XML结构。 10. **实战应用**: 学习了这些概念后,可以应用于Web服务、文件存储、配置文件解析等多种场景...

    xml与java对象映射

    例如,可以创建接口或抽象类,让所有Java对象实现这些接口或继承抽象类,然后编写自定义的序列化和反序列化方法。 5. **性能考虑** 不同的映射技术有不同的性能特性。DOM在内存占用和处理速度上可能不如SAX,而...

    XML Schema教程

    - **XML Schema 与 DTD 的区别**:XML Schema 被认为是 Document Type Definition (DTD) 的继承者。与 DTD 相比,XML Schema 提供了更多的灵活性和功能,包括但不限于: - 支持数据类型定义。 - 基于 XML 编写,更...

    Jigloo:Eclipse的GUI构造器使用说明.doc

    Jigloo的高级功能,如可视化继承,允许开发者在设计复杂的UI结构时保持代码的组织性和可维护性。通过这种方式,Jigloo不仅是一个简单的GUI构建工具,还能帮助开发者提高生产力,减少手动编写UI代码的工作量。 总之...

    java 基础知识ppt

    12. **Java API和库**:Java的标准API包含了大量预定义的类和接口,如 Swing 和 JavaFX 用于图形用户界面,JDBC 用于数据库连接,JAXP和JAXB用于XML处理,等等。 以上知识点构成了Java的基础,通过深入学习和实践,...

    EasyExcel导入excel和导出excel的demo

    - 创建处理器类:定义一个处理器类,继承自`AnalysisEventListener`,重写`invoke`方法,该方法会在读取每一行数据时调用,用于处理读取的数据。 - 读取文件:使用`EasyExcel.read()`方法指定要读取的文件路径,...

    对XML数据与JVAV对象之间的相互转换

    2. SAX:通过继承`DefaultHandler`,在遇到特定事件时,将Java对象的属性写入XML流。 3. JAXB:JAXB提供`Marshaller`类,可以将Java对象转换为XML。只需调用`marshal()`方法,传入Java对象和输出目标(如文件或流)...

    叶核亚 java程序设计实用教程 第三版课后答案

    10. **Java API和库**:Java的标准库提供了大量预先编写的类和方法,如JDBC用于数据库操作,Swing和JavaFX用于图形用户界面设计,JAXB用于XML处理,JDBC-ODBC桥接用于连接不同数据库等。 通过学习《叶核亚 Java程序...

    TestWebService

    Apache CXF不仅继承了Xfire的优点,还增加了对WS-*规范的支持,如WS-Security、WS-Addressing等,以及RESTful服务的支持。 总结起来,"TestWebService"项目涉及的知识点主要包括使用Xfire创建和调用SOAP Web服务,...

Global site tag (gtag.js) - Google Analytics