Spring Boot WS-Server-自定义Http状态
我使用SpringBootWS-Server发布了端点 当我使用SoapUI时,我看到: HTTP/1.1200 接受:text/xml、text/html、image/gif、image/jpeg、*;q=.2,/;q=.2 SOAPAction:“ 内容类型:text/xml;字符集=utf-8 内容长度:828 日期:2021年4月29日星期四14:04:54 GMT 保持活动状态:超时=60 连接:保持活力 我想在响应中设置自定义HTTP状态(我知道这可能违反标准,但这是一个外部要求)。我还读了以下主题: 但这一解决方案失败了 Spring启动版本:2.2.7问题已解决 正如我所说,我想在SOAP响应中设置自定义HTTP状态 我发现这个帖子: 作者使用EndpointInterceptor和TransportContext来获取HttpServletResponse,然后更改了状态。我和他的案例之间的区别在于,他从WebService方法返回void,而我想返回一些响应 在我的情况下,Spring WebServiceMessageReceiveObjectSupport类(方法handleConnection)中的以下代码覆盖了之前在拦截器中设置的servlet状态:Spring Boot WS-Server-自定义Http状态,spring,spring-boot,http,soap,wsdl,Spring,Spring Boot,Http,Soap,Wsdl,我使用SpringBootWS-Server发布了端点 当我使用SoapUI时,我看到: HTTP/1.1200 接受:text/xml、text/html、image/gif、image/jpeg、*;q=.2,/;q=.2 SOAPAction:“ 内容类型:text/xml;字符集=utf-8 内容长度:828 日期:2021年4月29日星期四14:04:54 GMT 保持活动状态:超时=60 连接:保持活力 我想在响应中设置自定义HTTP状态(我知道这可能违反标准,但这是一个外部要求)。
if (response instanceof FaultAwareWebServiceMessage && connection instanceof FaultAwareWebServiceConnection) {
FaultAwareWebServiceMessage faultResponse = (FaultAwareWebServiceMessage)response;
FaultAwareWebServiceConnection faultConnection = (FaultAwareWebServiceConnection)connection;
faultConnection.setFaultCode(faultResponse.getFaultCode());
}
为了绕过这段代码,我需要用自己的handleConnection方法实现来定义类,该方法扩展了类WebServiceMessageReceiveHandlerAdapter
在我的实现中,我排除了状态更改。重要的是在此类的自动连接构造函数中传递WebMessageFactory bean,否则在应用程序启动期间会引发异常
该类必须用Spring原型(例如@Component)标记,并且在配置ServletRegistrationBean时,必须在配置类中配置该bean的名称:
@Bean
public ServletRegistrationBean<MessageDispatcherServlet> messageDispatcherServlet(ApplicationContext applicationContext){
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
servlet.setMessageFactoryBeanName("webServiceMessageFactory");
servlet.setMessageReceiverHandlerAdapterBeanName("myOwnMessageReceiverHandlerAdapter");
return new ServletRegistrationBean<>(servlet,"/ws/*");
}
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext ApplicationContext){
MessageDispatcherServlet servlet=new MessageDispatcherServlet();
setApplicationContext(applicationContext);
setTransformWsdlLocations(true);
setMessageFactoryBeanName(“webServiceMessageFactory”);
setMessageReceiverHandlerAdapterBeanName(“myowMessageReceiverHandlerAdapter”);
返回新的ServletRegistrationBean(servlet,“/ws/*”);
}
您需要发布一些代码,告诉我们另一个问题的解决方案是如何失败的,或者很难帮助您。