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

2022-09-02 13:41:10

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

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

我有什么选择来接受尽可能少的开发SOAP请求。我应该通过 rest 接口接受 soap 数据包并解析 XML 吗?或者,我可以设置一个 SOAP 接口,与我的 REST 接口通信并做出响应吗?

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


答案 1

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

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

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

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

或者,我可以设置一个 SOAP 接口,与我的 REST 接口通信并做出响应吗?

您可能会以牺牲性能和/或可维护性为代价。


答案 2

我们有一个具有类似要求的项目。我们仍然必须支持SOAP,我们正在推进ReST。

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

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

只需向文件添加一些条目即可指示其余路径和终结点路径...web.xml