【发布时间】:2017-06-17 22:14:31
【问题描述】:
我的应用程序用作 SOAP Web 服务并处理 Web 请求。这是我的网络服务配置。
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, "/ws/*");
}
我面临的问题是,当我在浏览器上输入我的网络服务 URL 时,我可以通过查看成功看到我的网络服务正在运行
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
...
</wsdl:definitions>
但是当我从 SoapUI 发送请求时,我收到一个错误 404 页面未找到。我该如何解决这个问题?
编辑: 根据Spring Boot Reference Guide,Spring WS 使用不同的 servlet 类型来处理 SOAP 消息:MessageDispatcherServlet。通过命名这个 bean messageDispatcherServlet,它不会替换 Spring Boot 的默认 DispatcherServlet bean。在我的情况下,我默认的 DispatcherServlet 是处理来自 SoapUI 的 POST 请求的那个。当我发送 GET 请求时,messageDispatcherServlet 表明我的 WS 运行正常。这就是我认为导致问题的原因。当我从浏览器向我的 Web 服务 URI 发送请求时,我在日志中检查了这一点。
Initializing Spring FrameworkServlet 'messageDispatcherServlet'
FrameworkServlet 'messageDispatcherServlet': initialization started
Creating SAAJ 1.3 MessageFactory with SOAP 1.1 Protocol
FrameworkServlet 'messageDispatcherServlet': initialization completed in 11 ms
编辑 2: 我还想补充一点,我正在使用 Spring Web Security。在与新的 Spring 生产者进行了几次测试后,我意识到在我从依赖项中添加 Spring Web Security 后它停止工作。我想知道这是否可能导致我的请求由 DefaultDispatcherServlet 处理。
编辑 3: 我可以确认这是由 Spring Web Security 引起的。我仍在研究如何解决它。
【问题讨论】:
-
如果我没记错的话,Web 服务器(如果您使用的是默认设置,则为 tomcat)已被映射为同时处理这两个请求。这就是浏览器显示服务的原因。你看过过滤吗?
-
@efekctive 你有什么好的例子可以检查过滤吗?
-
现在纠结了。我一会儿再回来
标签: java spring servlets spring-boot