soap - 如何创建向后兼容的 JAX-RS 和 JAX-WS API?

标签 soap jaxb jax-ws jax-rs api-design

JAX-RS 和 JAX-WS 非常适合生成 API。但是,它们根本没有解决向后兼容性的问题。

为了避免在 API 引入新功能时破坏旧客户端,您基本上必须接受并提供与以前完全相同的输入和输出格式;许多 XML 和 JSON 解析器似乎很适合,如果他们发现一个没有映射到任何东西的字段,或者有错误的类型。

一些 JSON 库,例如 Jackson 和 Gson,提供了一个功能,您可以根据运行时设置为给定对象指定不同的输入/输出表示,这似乎是在许多情况下处理版本控制的合适方法。这使得可以通过注释添加和删除的字段来提供向后兼容性,以便它们仅根据客户端使用的 API 版本出现。

迄今为止,我发现 JAXB 和任何其他 XML 数据绑定(bind)库都没有很好地支持这个概念,更不用说能够为 JSON 和 XML 重用相同的注释。将它添加到 JAXB-RI 或 EclipseLink Moxy 似乎是可能的,但令人生畏。

版本控制的另一种方法似乎是对所有已更改的类进行版本控制,通常是在每次发布 API 时创建一个新包,并在新包中复制所有修改的 DTO、服务和资源类,以便所有类型信息针对绑定(bind)和调度系统进行了版本控制。这种方法对我来说似乎更费力。

我的问题是:您如何设计您的 Java API 提供程序以实现向后兼容性?什么有效,什么无效?

非常感谢有关该主题的案例研究或博客文章的链接;我做了一些谷歌搜索,但没有找到太多关于这个的讨论。

最佳答案

我是 EclipseLink MOXy 的技术主管,我对您的版本控制要求非常感兴趣。您可以通过我的博客与我联系:

  • http://bdoughan.blogspot.com/p/contact_01.html

  • MOXy 提供了一种将 JAXB 元数据表示为 XML 文件的方法。您可以利用它为同一对象模型创建多个映射:
  • http://wiki.eclipse.org/EclipseLink/Examples/MOXy/EclipseLink-OXM.XML
  • 关于soap - 如何创建向后兼容的 JAX-RS 和 JAX-WS API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4197528/

    相关文章:

    c# - WCF - 无法创建抽象类

    python - 如何在 Python zeep 中指定 SOAP 服务器 URL

    java - 如何在非 servlet 3.0/非 Java EE 6 中激活 jax-rs ContextResolver 和 Application

    java - 带有代理设置的忽略 ssl 的 Jersey 客户端

    javascript - 使用 angular js 将数据发布到 SOAP api

    php - 使用 yum 和 pear 安装 php-soap 都失败

    java - XML + XSD => Java?

    java - 具有属性的 XML 元素在 JAXB 中具有 ":"

    ejb - 如何将 EJB 注入(inject) SOAPHandler?

    java - 如何使用 jax-ws commons 配置 jax-ws 以与 Spring 一起使用?