在CXF中,为什么要使用除JAXB之外的任何其他绑定? (MTOM附件,Aegis,XMLBeans,......)

时间:2010-09-03 13:11:13

标签: web-services jaxb cxf xmlbeans aegis

我一直在使用Apache CXF,特别是它支持的各种数据绑定:JAXB(默认),MTOM,Aegis和XMLBeans。由于所有这些都得到了支持,我认为每个都有它的优点。我想出了这些:

  • 显然,MTOM是首选涉及大型附件的地方。
  • JAXB依赖于注释,因此在限制类的修改时它不太适合。
  • Aegis没有wsdl2java工具,所以它不太适合“契约优先”开发,即从WSDL开始并从中生成Java代码。
  • 出现,Aegis通过 Class .aegis.xml文件中的声明性语法,对Java类和XML之间的映射提供了更多控制。另一方面,我无法设想JAXB没有做到这一点的任何场景。

我发现这个问题并列JAXB和XMLBeans,但它没有提供全面的概述:

JAXB vs Apache XMLBeans

除了这些天真的,先验的考虑之外,你是否有任何血腥经验可以支持使用除JAXB之外的任何其他绑定?我是从CXF的角度问的,但如果想到任何其他选择(例如Castor),请毫不犹豫地详细说明。

2 个答案:

答案 0 :(得分:3)

如果从头开始创建WSDL第一个Web服务,那么我肯定会建议在95%的时间内坚持使用JAXB(可能更高)。它绝对是CXF中经过最佳测试的数据绑定,表现相当不错。

其他数据绑定进入的地方通常是两种情况之一:

1)Java首次使用的情况是,您已经使用Java编写了一些您希望作为Web服务公开的内容,几乎不需要修改代码。 Aegis在这方面具有优势,因为它的设计能够处理比JAXB更广泛的事物。但是,如果您可以修改代码,添加JAXB注释通常不是那么难。如果你有大多数正常的“豆子”,这不是什么大问题。

2)使用特定映射的现有应用程序。如果你有期待XMLBeans bean的exice应用程序(如果使用2.3-SNAPSHOT的CXF,则为SDO bean,或者如果遵循GSoC项目则使用JiBX bean),那么使用其他数据绑定可以帮助从JAXB删除任何所需的映射到这些对象模型。

希望有所帮助。

答案 1 :(得分:3)

请记住JAXB is a specification因此有多种实施方式:Metro(参考实施,MOXy(我是技术主管)等。

可以从Java类或XML模式开始使用JAXB。如果您有无法修改的类,则单个JAXB实现提供扩展来处理该类。请参阅MOXy的可外部化元数据:

JAXB旨在与MTOM附件一起使用,请参阅附件marshaller / unmarshaller。

MOXy具有基于XPath的映射,可以完全控制对象到XML的绑定,请参阅: