现有要求,希望得到如下的数据
<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编写Schema、schema的时间日期类型、schema的list元素、使用枚举类型、使用schema的choice类型、同构集合、schema编写继承关系、schema的ID和IDREF等...
2. **更强大的绑定编译器**:可以处理更复杂的XML Schema特性,如复杂类型和继承。 3. **性能提升**:优化了序列化和反序列化过程,提高了性能。 4. **自定义扩展(Customizations)**:允许用户通过注解或XML绑定...
8. **继承支持**:在JAXB 2.2中,可以对具有继承关系的Java类进行数据绑定,这使得XML Schema中的复杂类型继承可以映射到Java类的继承结构。 9. **国际化(i18n)**:JAXB提供对国际化(i18n)的支持,允许在XML中...
在实际应用中,你可能还需要处理更复杂的情况,比如处理多个命名空间、处理嵌套的对象以及处理继承关系。JAXB提供了丰富的功能和灵活性来处理这些情况,但同时也需要对XML和Java反射机制有深入的理解。 总结一下,...
- **继承与接口**:JAXB支持继承,子类会继承父类的XML映射。同时,也可以为接口创建XML绑定。 - **类型转换**:使用`@XmlJavaTypeAdapter`注解实现自定义类型转换。 - **XML Schema支持**:JAXB可以直接从XML ...
JAXB还提供了许多高级功能,例如处理命名空间、处理复杂类型、处理继承结构、自定义序列化行为等。在实际项目中,了解这些高级特性能够帮助你更好地利用JAXB解决XML数据处理的问题。 总的来说,JAXB是Java平台中一...
此外,JAXB还支持复杂的XML结构,如命名空间、属性群组、继承和多态性,使得处理XML数据变得更加简单。 然而,JAXB也有其局限性,比如它可能不适合处理大型XML文档,因为它会将整个XML文档加载到内存中。对于这种...
最近在学习WebService,讲到JAXB!没听说过!看了才知道jdk中自带了这个功能,什么这个框架那个框架都用了!原来就在眼前你也不知道!我这儿有视频,有需要请留言!代码献上…… List Map 继承 接口 数据类型不一至...
除了上述方法,还可以使用如JAXB(Java Architecture for XML Binding)等库来处理XML与Java对象之间的映射,这些库通常会自动处理命名空间问题。 在实际项目中,如果你需要进一步的解决方案,可以下载提供的jar包...
IMMUTABLE-XJC是一个JAXB 2.x XJC插件,用于使模式派生类不可变: 删除所有的setter方法 分数班决赛 创建一个以所有字段为参数的公共构造函数 创建一个受保护的无参数构造函数 将课程中的所有字段标记为final ...
9. **高级特性**: JAXB支持XML的包容性处理,如处理未知元素、处理继承关系、处理空值和默认值,以及更复杂的XML结构。 10. **实战应用**: 学习了这些概念后,可以应用于Web服务、文件存储、配置文件解析等多种场景...
例如,可以创建接口或抽象类,让所有Java对象实现这些接口或继承抽象类,然后编写自定义的序列化和反序列化方法。 5. **性能考虑** 不同的映射技术有不同的性能特性。DOM在内存占用和处理速度上可能不如SAX,而...
- **XML Schema 与 DTD 的区别**:XML Schema 被认为是 Document Type Definition (DTD) 的继承者。与 DTD 相比,XML Schema 提供了更多的灵活性和功能,包括但不限于: - 支持数据类型定义。 - 基于 XML 编写,更...
Jigloo的高级功能,如可视化继承,允许开发者在设计复杂的UI结构时保持代码的组织性和可维护性。通过这种方式,Jigloo不仅是一个简单的GUI构建工具,还能帮助开发者提高生产力,减少手动编写UI代码的工作量。 总之...
12. **Java API和库**:Java的标准API包含了大量预定义的类和接口,如 Swing 和 JavaFX 用于图形用户界面,JDBC 用于数据库连接,JAXP和JAXB用于XML处理,等等。 以上知识点构成了Java的基础,通过深入学习和实践,...
2. SAX:通过继承`DefaultHandler`,在遇到特定事件时,将Java对象的属性写入XML流。 3. JAXB:JAXB提供`Marshaller`类,可以将Java对象转换为XML。只需调用`marshal()`方法,传入Java对象和输出目标(如文件或流)...
- 创建处理器类:定义一个处理器类,继承自`AnalysisEventListener`,重写`invoke`方法,该方法会在读取每一行数据时调用,用于处理读取的数据。 - 读取文件:使用`EasyExcel.read()`方法指定要读取的文件路径,...
10. **Java API和库**:Java的标准库提供了大量预先编写的类和方法,如JDBC用于数据库操作,Swing和JavaFX用于图形用户界面设计,JAXB用于XML处理,JDBC-ODBC桥接用于连接不同数据库等。 通过学习《叶核亚 Java程序...
Apache CXF不仅继承了Xfire的优点,还增加了对WS-*规范的支持,如WS-Security、WS-Addressing等,以及RESTful服务的支持。 总结起来,"TestWebService"项目涉及的知识点主要包括使用Xfire创建和调用SOAP Web服务,...