我的环境的前提编码:我在春天3运行使用弹簧WS处理所有SOAP要求。我已经与多家供应商进行了多次整合,没有出现任何问题。RPC /与JAXWS
问题:这个最近的集成有一个供应商运行真正古老的东西,他们的WSDLs使用rpc绑定样式。不用说JAXWS并不完全支持rpc(因为它是interop的对立面,所以这是正确的)。
可能的解决办法#1:我仍然可以尝试生成使用Axis 1.其实我已经做到了这一点,但我非常非常不愿意引入轴依赖到我的POM他们的WSDL的存根。我很确定会有大量的图书馆冲突,可能会混淆当前非常稳定的环境。
可能的解决方案#2:我可以尝试将他们的WSDL重写为JAXWS能够解析的文档/文本。运行了一些问题实际上重写的WSDL(获得“架构描述符{} XXX XXX在消息部分‘XXX’是没有定义,无法绑定到Java”)。除此之外,如果他们的终端专门检查rpc,我就会被搞砸了。
可能的解决方案#3:我可以部署一个全新的运行Axis和此服务客户端的盒子。即主项目使REST调用这个框,这个框会发出SOAP请求并解析响应。看起来像一个非常非常愚蠢的方式(和一些简单的工作荒谬的工作量)去做这件事。
的任何解决方案,我已经错过了?此外,我一直在为此搜索谷歌,虽然有些人在第一名中取得了成功,但没有人真正谈论此后的后果。 (即处理轴的传统依赖,试图使轴在春季3发挥好,等)
感谢您的评论李。 #1不确定你的意思。通过Axis的WSDL2Java生成的存根固有地扩展了Axis特定的对象。例如,所有服务都从org.apache.axis.client.Service继承。您是否建议我在源代码库中包含所有的Axis源代码并重构它们,而不是将Axis作为Maven依赖项? – Michael 2013-04-04 18:30:16
#3是的,我听到你,我的一个坏的术语。我并不是指像物理盒子那样的盒子,而是一个单独的逻辑上下文和一个不同的已部署应用程序。可以坐在相同的盒子上,虽然这是一个不同的蠕虫罐,因为我与许多盒子聚集在一起。 ESB听起来像一个巨大的矫枉过正! – Michael 2013-04-04 18:31:48
是的,我的意思是建立你自己的Axis jar,稍做修改以适应软件包,Axis源代码的副本。不要将它完全混入你自己的源代码中。我已经看到,在Weblogic或WebSphere等其他用户希望使用第三方jar的情况下,这种方式取得了良好的效果,但不希望其版本与其客户所需的版本冲突。新Websphere使用OSGI以不同的方式避免这个问题。 – 2013-04-04 18:35:22