JAXB是将Java对象覆盖为XML的标准和最佳方法。有几种可用的开源实现:
- Eclipselink MOXy(我是技术负责人)
- Metro(参考实现,包含在Java SE 6中)
- 杰克斯·梅
有关JAXB的更多信息,请查看我的博客:
- http://bdoughan.blogspot.com
更新:
什么是最好的方法?
这最终取决于您要尝试执行的 *** 作,我将在下面进行解释:
用例#1-从XML模式开始
在此用例中,您有一个XML模式,并且想要生成一个Java模型。此线程中提到的许多工具都不支持此用例。
例如,XStream为此推荐XMLBeans。
提名人:
- JAXB(所有实现)-生成带有JAXB批注的POJO。
- XMLBeans-生成包含XML绑定逻辑的专有类。
用例2-从Java类开始(可以编辑)
在此用例中,您有更多选择(仅消除了XMLBeans)。编辑通常涉及添加注释以控制映射。
提名人:
- 除了XMLBeans之外的所有人
用例3-启动表单Java类(您无法编辑)
在这种情况下,您没有修改模型类的源。这要求将元数据与按代码的XML文件一起提供给外部。
提名人:
- Eclipselink JAXB(MOXy)-提供一个外部绑定文件,并且可以通过编程方式应用元数据。
- Metro JAXB-可以利用Annox或JAXB简介
- Castor-提供外部绑定文件
- JiBX-提供一个外部绑定文件
- XStream-可以以编程方式应用元数据
用例4-中间相遇(现有的类和架构)
在此用例中,您需要将现有的类映射到现有的XML模式。Eclipselink
MOXy及其基于XPath的映射是我所知道的唯一可以处理此用例的工具
提名人:
- Eclipselink JAXB(MOXy)
用例5-XML信息集保存:
在这种用例中,您需要保留未映射的内容:注释,处理说明等。
提名人:
- JAXB(所有实现)-具有活页夹功能。
- XMLBeans-生成的对象模型存储整个XML信息集。
用例#6-与JPA的兼容性
JPA是Java持久性的Java标准。JPA具有许多概念:组合键,双向关系,延迟加载等,它们很难与XML绑定解决方案一起使用。例如,任何仅通过字段与对象进行交互的XML工具通常都会出现延迟加载属性的问题。
提名人:
- Eclipselink JAXB(MOXy)-在构建时考虑了JPA。
用例#7-与XML Web服务(JAX-WS)的兼容性
JAXB是JAX-WS的默认绑定层。
提名人:
- JAXB(实现取决于JAX-WS提供程序)
用例#8-与RESTful Web服务(JAX-RS)的兼容性
基于HTTP协议,JAX-RS提供了JAX-
WS的轻量级替代方案。请查看以下示例。
提名人:
- JAXB(所有实现)-默认绑定层,最易于与JAX-RS一起使用。
- 其他所有内容-您可以利用MessageBodyReader / Writer的概念来使用其他XML工具。
用例#9-与Spring的兼容性
Spring内置了一些对与XML绑定工具集成的支持,请查看以下链接以获取更多信息:
- http://static.springsource.org/spring-ws/docs/0.9.1/reference/oxm.html
提名人:
- JAXB(所有实现)
- castor
- XMLBeans
- jibx
其他要考虑的事情
- 该工具仍在开发/支持吗?听起来很有趣,我已经看到人们推荐5年没有更新的工具。这里提到的一些工具已经两年没有发布了。
我的最佳选择方法? -JAXB
综观以上类别,JAXB不一定总是最适合特定用例(但总是很适合),但它是唯一可以用于所有用例的库。这意味着它总是可以胜任。替代方法是将不同的库用于不同的任务,从而为您提供多个库来支持。
我确实领导了JAXB实现Eclipselink MOXy,但是MOXy最初是作为专有XML绑定库Toplink
OXM开始的。Toplink始终了解标准(即EJB / JPA)的好处,因此我们实现了JAXB1。然后(我是代表)我们成为JAXB
2(JSR-222)的活跃成员。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)