在 Tomcat 上部署 Spring Boot 2.0.4 SOAP Web 服务

Deploying a Spring Boot 2.0.4 SOAP Web Service on Tomcat

我有一个作为 .jar 文件工作的 Spring Boot 2.0.4 SOAP Web 服务。我在这里使用了示例:https://spring.io/guides/gs/producing-web-service/。我正在使用 Maven 构建它。我完全按照这篇文章做的,所以我在这里只显示我所做的更改。

它生成 WSDL,我可以按照文章中的描述使用 curl 调用服务。

现在我想创建一个 WAR 文件并将其部署到 Tomcat 8.5。

我已按照所有说明将 Spring 启动应用程序转换为 WAR,但在尝试检索 WSDL 或调用服务时出现 404 错误。

我在这里查看了其他类似的问题,但是 none 提议的解决方案似乎适用于 Spring Boot 2.x。

我按照这些步骤转换为可部署的 WAR:

像这样修改我的 SpringBootApplication class:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }
}

在pom.xml中将包装改为"war":

<packaging>war</packaging>

将 spring-boot-starter-tomcat 依赖项更改为 pom.xml

中的 "provided"
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

以上所有可能对 Spring Boot 1.x 有效,但不适用于 Spring Boot 2.x.

我在尝试访问 WSDL 时遇到 404 错误(例如,使用 http://localhost:8180/ws/countries.wsdl - 注意我的 Tomcat 服务器在端口 8180 上 运行)。

我唯一的理论是 Spring 的 dispatcherServlet 正在拦截所有请求,而 "messageDispatcherServlet" 从来没有看到它们。

注意文章中的声明:"By naming this bean messageDispatcherServlet, it does not replace Spring Boot’s default DispatcherServlet bean."

但我不知道如何解决。

如有任何帮助,我们将不胜感激。

更新:正如 M. Deinum 指出的那样,我错了 URL。这适用于 “http://localhost:8180/spring-boot-soap-example/ws/countries.wsdl”。我的实际应用程序仍然有 404 错误,但我会看看有什么不同,如果我无法解决它,post 会提出一个不同的问题。

谢谢, 特里

正如 M. Denium 在上面指出的那样,我有点厚。部署在 Tomcat 上时的 URL 与应用程序从命令行运行时使用的不同。请参阅上面的编辑。我添加这个是为了将其标记为已回答。