小编典典

Java到XML的转换?

java

什么是转换不同的方法Java ObjectsXML,我知道有一个选项JAXB,但想知道是什么其他approaches/tools可用于相同?

注意:
我没有进一步的要求,因此我不能meat在这个问题上添加更多内容,但是在此时,如果我能知道有哪些不同的方法可用于转换,那将非常棒Java to XML

更新: 建议的不同方法是:

  1. javax.xml.bind.Marshallerjavax.xml.bind.Unmarshaller
  2. XStream的
  3. XMLBean
  4. jaxb
  5. castor
  6. jibx
  7. apache

现在,在所有建议的方法中,进行转换和转换的 _ 最佳_ 方法是什么?Java Objects to XML``XML to Java Objects


阅读 256

收藏
2020-09-28

共1个答案

小编典典

JAXB是将Java对象覆盖为XML的标准和最佳方法。有几种可用的开源实现:

有关JAXB的更多信息,请查看我的博客:

更新:

什么是最好的方法?

这最终取决于您要尝试执行的操作,我将在下面进行解释:

用例#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工具通常都会出现延迟加载属性的问题。

提名人:

用例#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绑定工具集成的支持,请查看以下链接以获取更多信息:

提名人:

  • JAXB(所有实现)
  • castor
  • XMLBeans
  • jibx

其他要考虑的事情

  • 该工具仍在开发/支持吗?听起来很有趣,我已经看到人们推荐5年没有更新的工具。这里提到的一些工具已经两年没有发布了。

我的最佳选择方法? -JAXB

综观以上类别,JAXB不一定总是最适合特定用例(但总是很适合),但它是唯一可以用于所有用例的库。这意味着它总是可以胜任。替代方法是将不同的库用于不同的任务,从而为您提供多个库来支持。

我确实领导了JAXB实现EclipseLink MOXy,但是MOXy最初是作为专有XML绑定库TopLink
OXM开始的。TopLink始终了解标准(即EJB / JPA)的好处,因此我们实现了JAXB1。然后(我是代表)我们成为JAXB
2(JSR-222)的活跃成员。

2020-09-28