微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java到XML的转换?

有什么不同的方法Java对象转换为XML,我知道一个选项是JAXB,但是想知道同样可用的其他方法/工具是什么?

注意:我没有进一步的要求,因此我无法在问题中添加更多内容,但是在这个时候,如果我能够了解将Java转换为XML的不同方法,那将会非常棒吗?

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

> javax.xml.bind.Marshallerjavax.xml.bind.Unmarshaller
> XStream
> XMLBean
> JAXB
> Castor
> JIBX
> Apache Digester

现在,在所有建议的方法中,将Java对象转换为XML和XML到Java对象的最佳方法是什么?

解决方法:

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

> EclipseLink MOXy(我是技术主管)
> Metro(参考实现,包含在Java SE 6中)
> JaxMe

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

> http://bdoughan.blogspot.com

更新:

什么是最好的方法

这最终取决于你想要做什么,我将在下面解释:

用例#1 – 从XML模式开始

在此用例中,您具有XML架构,并且您希望生成Java模型.此线程中提到的工具中没有多少支持此用例. XStream for example recommends XMLBeans for this.

提名人:

> JAXB(所有实现) – 使用JAXB注释生成POJO.
> XMLBeans – 生成包含XML绑定逻辑的专有类.

用例#2 – 从java类开始(可以编辑)

在这个用例中,您有更多选择(仅消除了XMLBeans).编辑通常涉及添加注释来控制映射.

提名人:

>除XMLBeans之外的所有人

用例#3 – 从java类开始(无法编辑)

在此用例中,您没有修改模型类的源代码.这要求外部提供元数据,或者使用代码的XML文件.

提名人:

> EclipseLink JAXB(MOXy) – 提供external binding file,可以通过编程方式应用元数据.
> Metro JAXB – 可以利用annox或JAXBIntroductions
> Castor – 提供外部绑定文件
> jibX – 提供外部绑定文件
> XStream – 可以通过编程方式应用元数据

用例#4 – 中间相遇(现有类和模式)

在此用例中,您需要映射到现有XML架构的现有类. EclipseLink MOXy及其XPath based mapping是我所知道的唯一可以处理此用例的工具

提名人:

> EclipseLink JAXB(MOXy)

用例#5 – XML Infoset保存:

在此用例中,您需要保留未映射的内容:注释,处理指令等.

提名人:

> JAXB(所有实现) – 具有Binder功能.
> XMLBeans – 生成的对象模型存储整个XML信息集.

用例#6 – 与JPA的兼容性

JPA是Java持久性的Java标准. JPA有许多概念:复合键,双向关系,延迟加载等,这些都很难与XML绑定解决方案一起使用.例如,任何只通过字段与对象交互的XML工具通常会遇到延迟加载属性的问题.

提名人:

> EclipseLink JAXB(MOXy) – 是built with JPA in mind.

用例#7 – 与XML Web服务的兼容性(JAX-WS)

JAXB是JAX-WS的认绑定层.

提名人:

> JAXB(实现依赖于JAX-WS提供者)

用例#8 – 与RESTful Web服务的兼容性(JAX-RS)

JAX-RS是基于HTTP协议的JAX-WS的轻量级替代品.请查看以下内容获取example.

提名人:

> JAXB(所有实现) – 认绑定层,最容易与JAX-RS一起使用.
>其他 – 您可以利用MessageBodyReader / Writer的概念来使用其他XML工具.

用例#9 – 与Spring的兼容性

Spring有一些内置支持与XML绑定工具集成,请查看以下链接获取更多信息:

> http://static.springsource.org/spring-ws/docs/0.9.1/reference/oxm.html

提名人:

> JAXB(所有实现)
>蓖麻
> XMLBeans
> jibX

其他要考虑的事情

>该工具是否仍在开发/支持中?听起来很有趣,我看到人们推荐的工具在5年内没有更新.这里提到的一些工具在2年内没有发布.

我选择最好的方法? – JAXB

看看上面的类别,JAXB可能并不总是最适合特定用例(但它总是很合适),但它是唯一可用于所有用例的库.这意味着它总能完成这项工作.另一种方法是为不同的任务使用不同的库,为您提供多个库支持.

我确实领导了一个JAXB实现EclipseLink MOXy,但是MOXy开始作为专有的XML绑定库TopLink OXM. TopLink始终了解标准的好处(即EJB / JPA),并且我们实现了JAXB 1.然后我们(我是代表性的)成为JAXB 2(JSR-222)上的活跃成员.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。