Spring Boot结合MVC实现SOAP webservice

9
我想要将两个Spring (spring-boot)应用程序从Spring指南中结合起来: 不幸的是,这些示例不能一起工作。 有一个servlet dispatcher问题。在添加了dispatcherServlet bean之后,MVC servlet无法工作(错误404)。
@Bean
public ServletRegistrationBean dispatcherServlet(ApplicationContext applicationContext) {
    MessageDispatcherServlet servlet = new MessageDispatcherServlet();
    servlet.setApplicationContext(applicationContext);
    servlet.setTransformWsdlLocations(true);
    return new ServletRegistrationBean(servlet, "/ws/*");
}

如何配置Servlet Dispatcher以使其正常工作?
我希望能够实现以下配置:
  • localhost:8080/ws/* - Web服务
  • localhost:8080/web/* - MVC组件
谢谢!

3
将方法重命名为 messageDispatcherServlet 而不是 dispatcherServlet,后者会覆盖默认配置的 DispatcherServlet - M. Deinum
非常感谢!!!它正在运行。 - jareks
1个回答

9
问题出在注册了名为dispatcherServletMessageDispatcherServlet,这会覆盖Spring Boot已经注册的用于网站MVC部分的DispatcherServlet。为了解决这个问题,只需要将该方法重命名为任何名称,但不能再使用dispatcherServlet,例如messageDispatcherServlet
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
    MessageDispatcherServlet servlet = new MessageDispatcherServlet();
    servlet.setApplicationContext(applicationContext);
    servlet.setTransformWsdlLocations(true);
    return new ServletRegistrationBean(servlet, "/ws/*");
}

@m-deinum 我有一个类似的MessageDispatcherServlet,但它被配置为消耗“/*”URL模式。我想添加一个MVC servlet,它将回复“/ui”模式。我可以向MessageDispatcherServlet添加过滤器或其他内容,以便首先检查“/ui”模式并委派,否则将其处理为标准SOAP消息请求。谢谢。 - emeraldjava
1
为什么需要过滤器?Servlet容器已经为您处理了这个问题,只需将服务器映射到正确的模式即可。 - M. Deinum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接