在 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 与应用程序从命令行运行时使用的不同。请参阅上面的编辑。我添加这个是为了将其标记为已回答。
我有一个作为 .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 与应用程序从命令行运行时使用的不同。请参阅上面的编辑。我添加这个是为了将其标记为已回答。