JAXB是将java实体类序列化和反序列化处理中比较方便的一个工具,在jaxb的使用中,若是实体类中存在继承的层次关系,那么就需要一些值得注意的地方了。
比如在开发百度轻应用时候就需要处理到:
<?xml version="1.0" encoding="UTF-8"?>
<urlset>
<url>
<loc>http://www.baidu.com/</loc>
<lastmod>2010-01-01</lastmod>
<changefreq>always</changefreq>
<priority>1.0</priority>
<data>
<display>
<!-- display 标签内的字段为微站在标准 sitemap 协议基础上的扩展,
描述微站所需的标签内容
-->
</display>
</data>
</url>
</urlset>
可以看到此xml中,display节点下是根据各个模板的不同,而不同的,那么在java的开发实体构建中,我们是可以定义几个子类的,然后让它们来继承这个display类。则所有的模板格式就可以通过JAXB来生成了。
简化的格式如下:
public class A {
B b;
}
public class B {}
public class C {}
public class D {}
public class E extends A {
C c;
}
public class F extends A {
D d;
}
这个方案看着比较直观也符合一般逻辑思想,但是问题在于实践中只能生成父类部分,结果如下:
<a>
<b></b>
<a>
这并不是我们所需要的,所以需要申明一些标记来达到我们所需要的结果:
改造如下:
public class A {
B b;
@XmlElements({
@XmlElement(name = "c", type=C.class),
@XmlElement(name = "d", type=D.class)
})
E e;
}
public class B {}
public class E {}
public class C extends E {}
public class D extends E {}
这样的结构,最后就能正确生成了。
ps:类结构可以使用这个工具生成,
http://xml2csharp.com/(我本是c#程序员,因为工作上的需要,所以在独自的学习java)
那么在实际的开发过程中,序列化成xml可能会碰到很多特殊的一些问题,但是自己去看并理解那些报错信息,对于我们问题的解决是有帮助的,灵活运用上面的那些xml标记,那么才能体现到JAXB的好用。
<完>
分享到:
相关推荐
同样地,也可以使用Unmarshal类的方法,将XML文档解析成Java对象,这就是反序列化的过程。 本文档还会介绍如何处理序列化和反序列化过程中的异常,以及如何自定义Java类与XML之间的映射关系。比如,可以通过使用...
5. **生成序列化和反序列化代码**:为了方便XML数据和Java对象之间的转换,工具还会生成解析XML和生成XML的代码,通常是基于JAXB(Java Architecture for XML Binding)或其他类似库。 除了XSD转Java,有些工具还...
在Java编程中,将对象转换成XML是一种常见的数据序列化方式,这有助于数据交换和存储。当遇到包含特殊字符如 "和 "&" 的文本时,XML解析器可能会产生错误,因为这些字符在XML语法中有特定含义。为了解决这个问题,...
JAXB还提供了许多高级功能,例如处理命名空间、处理复杂类型、处理继承结构、自定义序列化行为等。在实际项目中,了解这些高级特性能够帮助你更好地利用JAXB解决XML数据处理的问题。 总的来说,JAXB是Java平台中一...
Java解析和生成XML的知识点主要涵盖了使用JAXB(Java Architecture for XML Binding)框架来实现Java对象与XML(可扩展标记语言)之间的数据转换。JAXB提供了一种便捷的方式,通过注解(Annotation)来实现这一过程...
例如,可以创建接口或抽象类,让所有Java对象实现这些接口或继承抽象类,然后编写自定义的序列化和反序列化方法。 5. **性能考虑** 不同的映射技术有不同的性能特性。DOM在内存占用和处理速度上可能不如SAX,而...
5. 反序列化XML:`Person person = (Person) xstream.fromXML(xml);` XStream库还提供了许多高级功能,例如自定义转换器、处理日期和时间、处理循环引用等。此外,它支持JAXB注解,这使得XML映射更加灵活。 总的来...
3. **绑定编译器(Binder)**:JAXB提供的绑定编译器会将XML绑定文件转换为源代码,生成用于序列化和反序列化的类。 4. **上下文(Context)**:JAXB上下文是Java应用程序和XML之间的桥梁,它负责管理所有已知的...
5. **解析(Unmarshalling)和序列化(Marshalling)**:`Unmarshaller`和`Marshaller`接口分别用于将XML数据解析成Java对象和将Java对象序列化成XML。它们提供了多种方法以适应不同的使用场景,如读写文件、流或者...
而在序列化过程中,JAXB将Java对象的属性转换为XML格式的字符串。 在这个过程中,开发者需要注意一些关键点。例如,XML的属性和元素在Java中的表示是不同的,XML的属性通常表示为类的字段,而XML元素则可以通过字段...
- 使用`@XmlElement`、`@XmlAttribute`等注解将类的字段映射到XML元素或属性。 **步骤2:** 创建JAXBContext - 使用`JAXBContext.newInstance()`方法,传入要映射的Java类的类名或包名。 **步骤3:** 解析XML到...
远程服务接收到XML格式的数据后,再进行相应的反序列化处理,恢复为Java对象,以供服务逻辑使用。 在实现转换的过程中,还可能会遇到一些挑战,比如类型兼容性问题、数据精度问题、特殊字符处理等。因此,在转换...
`Persion`类就是一个被JAXB支持的类,它使用了`@XmlRootElement`注解来声明这个类对应于XML文档中的根元素,而`@XmlAccessorType(XmlAccessType.FIELD)`注解则表明所有字段(而非getter和setter方法)都将被考虑在...
1. 在Java代码中定义一个User类,并使用JAXB注解来支持XML的序列化。 2. @XmlRootElement注解表示整个User对象将会被映射为XML文档的根元素。 3. @XmlElement注解用于指定Java类中的字段与XML元素之间的映射关系。 ...
现在,当你使用JAXB进行序列化和反序列化时,这个自定义的前缀就会生效。请注意,如果你的XML文档中已经存在使用特定前缀的元素,确保你的mapper返回相同的前缀以避免解析错误。 在实际应用中,你可能还需要处理更...
在Java编程中,XML数据和Java对象间的转换是常见的需求,尤其是在处理配置文件、数据交换或者序列化时。本篇将深入探讨如何实现XML数据与Java对象之间的相互转换。 一、XML到Java对象的转换 1. DOM解析:Document ...
在Java应用程序中,XML常用于配置文件、数据交换、序列化等场景。例如,Spring框架就广泛使用XML配置,而JAXB则提供了一种将Java对象转换为XML(反之亦然)的机制。 总结,Java提供了多种API来操作XML,如DOM、SAX...
JOX-1.17b3.jar是JOX库的一个特定版本,包含了一系列类和接口,如`JOXBeanOutputStream`,这个类是JOX库中用于将Java对象写入XML流的关键类。通过继承`java.io.OutputStream`,它能够接收Java对象并将其转换为XML...
在Java编程中,XML(Extensible Markup Language)常用于配置文件、数据交换和对象序列化。当我们在XML文件中设置了命名空间(xmlns),这个命名空间可能会意外地被继承到其子元素,导致不必要的冲突或者非预期的...
10. **XML处理**:DOM(Document Object Model)和SAX(Simple API for XML)是两种常见的XML解析方式,JAXB(Java Architecture for XML Binding)用于将XML数据绑定到Java对象。 这份中文完整版的Java API文档...