7

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

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

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

JAXB 与 Apache XMLBeans

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

4

2 回答 2

4

如果从头开始创建 WSDL 优先的 Web 服务,那么我肯定会建议在 95% 的时间(甚至更高)中坚持使用 JAXB。它绝对是 CXF 中经过最佳测试的数据绑定,并且性能非常好。

其他数据绑定通常用于以下两种情况之一:

1) Java 第一个用例,您已经用 Java 编写了一些内容,您希望将其公开为 Web 服务,几乎不需要修改代码。Aegis 在这里有它的优势,因为它被设计为能够处理比 JAXB 更广泛的事情。但是,如果您可以修改代码,添加 JAXB 注释通常并不难。如果你有大部分正常的“豆子”,那没什么大不了的。

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

希望能有所帮助。

于 2010-09-03T17:43:49.407 回答
3

请记住,JAXB 是一个规范,因此有多种实现: Metro(参考实现、MOXy(我是技术主管)等。

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

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

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

于 2010-09-03T19:33:52.713 回答