用于单个应用程序的REST和SOAP Web服务

我们使用Spring构建应用程序并使用Tomcat部署它。 我们有一个有效的REST接口,但是我们的一个客户端只有一个SOAP客户端。

我的理解是SOAP Web服务和REST Web服务不能在同一个端口或应用程序上共存。

我可以选择尽可能少地接受SOAP请求。 我应该通过rest接口接受soap数据包并解析XML吗? 或者我可以设置SOAP接口与我的REST接口通信并回复?

我正在使用Gradle作为我的构建工具。 将解决方案作为单个WAR文件的一部分会很好

根据我的经验,如果您对JAXB的XML命名空间非常小心, 可以在同一个应用程序中混合使用SOAP和REST。 但是,我不推荐它,因为更新一个意味着冒着对方的稳定性。 这是我推荐的……

  1. 在gradle中设置多项目构建
  2. 创建三个项目,一个用于业务逻辑,一个用于REST接口,另一个用于SOAP接口
  3. 修改REST / SOAP接口以使用公共业务逻辑项目
  4. 部署为两个单独的WAR

我应该通过rest接口接受soap数据包并解析XML吗?

SOAP是一种协议而不仅仅是一种格式,因此这可能不适用于大多数(任何?)框架。

或者我可以设置SOAP接口与我的REST接口通信并回复?

您可能会牺牲性能和/或可维护性。

我们有一个具有类似要求的项目。 我们仍然需要支持SOAP,我们将继续使用ReST。

没有理由说这两者会发生冲突。 由于您使用的是spring,因此您甚至可以将相同的域对象作为响应,将其作为您的首选项编组为XML和JSON。

你要做的是为两者创建不同的URI。 例如,SOAP的someService/**someService/**实现的some-rest 。 您可以使用服务层来处理共享逻辑(主要是端点上需要的代码,其余控制器是从服务层获取所需数据并将其发送到编组)

只需在web.xml文件中添加一些条目即可指示其余路径和端点路径……

听起来你的网络服务主要是REST(它是2013年),但你必须支持有限的情况下的肥皂。 我主要考虑rest时设计您的Web服务,但也许使用单独的机制向服务器指示客户端需要soap支持。 如果可能,请让soap客户端发送http请求标头或使用可能以.soap结尾的修改后的URL。 无论如何,没有理由不能在同一个应用程序上同时支持这两种协议。

您可以通过在类实现上注释rest和soap,以及创建用于保存汤的方法注释的接口来实现。 并在类实现中将rest注释放在方法上并配置web.xml文件以添加用于您使用的rest实现的servlet 。 _为您使用的Rest实现添加配置[ApplicationConfiguration is class only extend Application]

   com.fawryis.ebpp.core.rs.config.ApplicationConfiguration 1   com.fawryis.ebpp.core.rs.config.ApplicationConfiguration /rest/*  @javax.jws.WebService(endpointInterface = "com.test.ebpp.autopayment.tess.ejb.GService", targetNamespace = "http://ejb.test.autopayment.ebpp.tess.com/", serviceName = "testPaymentService", portName = "testPaymentPort") @Path(value = "/testPaymentService") public class testPaymentPortBindingImpl implements testPaymentService { @Override @POST @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Typeobj process(Typeobj request) { //type your code }