在Spring Boot 1.4.3中,我公开了一个SOAP Web服务端点,它在端口8080上成功运行。
为了运行运行状况检查,我还需要公开RESTful API。我尝试使用Actuator和休息控制器:
@RestController
public class RESTapis {
@RequestMapping(method = {RequestMethod.GET, RequestMethod.POST}, value = "/health")
public String healthCheck() {
return "ACK";
}
}
但在这两种情况下我得到相同的回复: HTTP 405(不允许使用方法)。
如果禁用Web服务,REST api将返回HTTP 200。
如何让SOAP Web服务和REST同时工作?
以下是网络服务配置:
@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, "/*");
}
}
答案 0 :(得分:4)
因此,在messageDispatcherServlet方法中,由于通配符注册,您似乎将servlet绑定到所有传入请求:
return new ServletRegistrationBean(servlet, "/*");
因此,MessageDispatcher正在拦截所有传入的请求并尝试查找/ health并抛出http 405。
<强>修正:强>
return new ServletRegistrationBean(servlet, "/soap-api/*");
<强>解释强>
通过将Message Dispatcher绑定到特定的URI命名空间,我们可以确保仅在/ soap-api / *命名空间上触发的所有请求都将被MessageDispatcher拦截。所有其他请求都将被DispatcherServlet截获,从而可以与Soap WS并行运行Rest接口。
<强>建议:强>
不知道应用程序的原因/细节,但取消方法healthcheck()的名称,您可以查看使用spring boot执行程序生成健康检查,为您的应用程序指标。您也可以覆盖它以进行自定义。