在客户端支持不同版本的Web服务

时间:2018-06-21 09:14:26

标签: java web-services soap jax-ws

我的程序是Web服务X(基于经典SOAP)的客户端,它将以不向后兼容的方式更新其API。 X一次仅支持其API的一个版本(我知道非常讨厌)。由于我不想在生产环境中更新X的API的同时更新程序,所以我想知道我的选择是同时支持X的两个版本以及如何在这些版本之间进行切换。

这是一个JAX-WS客户端。因此,XML是自动编组/解组的XML <-> JavaBeans。

到目前为止,我已经找到了以下选项:

  1. 实施两次客户端代码。不仅是调用类,还包括为请求创建Java Bean的代码以及处理响应的Java Bean的代码。 + straigth forward-很多代码重复
  2. 创建代码以将Java Bean从版本1转换为2,并且仅在客户端代码中使用版本2的Java Bean。 +简单的客户端代码-繁琐的代码,可将对象树转换为另一棵树
  3. 使用xml + xslt:将版本1的Java bean编组,使用xslt进行转换,将其解编为版本2的java bean。+ xslt代码不多,具体取决于api的实际变化-performance
  4. 以某种方式在jax-ws中使用拦截器,以将xml版本1的请求/响应转换为版本2 +性能-不清楚如何做到这一点
  5. 使用Dispatch-Client(javax.xml.ws.Dispatch)避免两次编组/解组,在发送请求之前/在接收响应后使用xslt转换xml
  6. 创建我自己的X API数据结构表示,并将版本1和版本2都映射到它。如果我能以某种方式保存xml以供以后使用,这将是一个优势,但是在这种情况下,我不需要这样做。

还有其他想法吗?您会选择什么,为什么?

0 个答案:

没有答案