我的程序是Web服务X(基于经典SOAP)的客户端,它将以不向后兼容的方式更新其API。 X一次仅支持其API的一个版本(我知道非常讨厌)。由于我不想在生产环境中更新X的API的同时更新程序,所以我想知道我的选择是同时支持X的两个版本以及如何在这些版本之间进行切换。
这是一个JAX-WS客户端。因此,XML是自动编组/解组的XML <-> JavaBeans。
到目前为止,我已经找到了以下选项:
- 实施两次客户端代码。不仅是调用类,还包括为请求创建Java Bean的代码以及处理响应的Java Bean的代码。 + straigth forward-很多代码重复
- 创建代码以将Java Bean从版本1转换为2,并且仅在客户端代码中使用版本2的Java Bean。 +简单的客户端代码-繁琐的代码,可将对象树转换为另一棵树
- 使用xml + xslt:将版本1的Java bean编组,使用xslt进行转换,将其解编为版本2的java bean。+ xslt代码不多,具体取决于api的实际变化-performance
- 以某种方式在jax-ws中使用拦截器,以将xml版本1的请求/响应转换为版本2 +性能-不清楚如何做到这一点
- 使用Dispatch-Client(javax.xml.ws.Dispatch)避免两次编组/解组,在发送请求之前/在接收响应后使用xslt转换xml
- 创建我自己的X API数据结构表示,并将版本1和版本2都映射到它。如果我能以某种方式保存xml以供以后使用,这将是一个优势,但是在这种情况下,我不需要这样做。
还有其他想法吗?您会选择什么,为什么?