如何解决PayloadRootSmartSoapEndpointInterceptor拦截多个端点
我正在尝试向Endpoint Config中的拦截器列表中添加自定义拦截器,但是我遇到一个问题,其中PayloadRootSmartSoapEndpointInterceptor拦截了2个端点,而不是一个,我已经使用spring-ws定义了2个SOAP端点。
@EnableWs
@Configuration
@Order(1)
public class Config extends WsConfigurerAdapter {
private String namespaceBti = "http://tarim.bull.ro/BullTarimWS/BTIService";
private String namespaceBtiLst = "http://tarim.bull.ro/BullTarimWS/BTILSTService";
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet,"/public/btiWS/*");
}
//Service 1
@Bean(name = "BTIService")
public DefaultWsdl11Definition defaultWsdl11DefinitionBti(@Qualifier("BTISchema") XsdSchema certificateSchema) {
DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
wsdl11Definition.setPortTypeName("BtiPort");
wsdl11Definition.setLocationUri("/public/btiWS"); //<context-path>
wsdl11Definition.setTargetNamespace(namespaceBti);
wsdl11Definition.setRequestSuffix("Input");
wsdl11Definition.setResponseSuffix("Output");
wsdl11Definition.setSchema(certificateSchema);
return wsdl11Definition;
}
@Bean(name="BTISchema")
public XsdSchema certificateSchemaBti() {
return new SimpleXsdSchema(new ClassPathResource("xml-resources/GETBTI.xsd"));
}
// Service 2
@Bean(name = "BTILSTService") //name of the wsdl in the URL
public DefaultWsdl11Definition defaultWsdl11DefinitionBtiLst(@Qualifier("BTILSTSchema") XsdSchema certificateSchema) {
DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
wsdl11Definition.setPortTypeName("BtiLstPort");
wsdl11Definition.setLocationUri("/public/btiWS"); //<context-path>
wsdl11Definition.setTargetNamespace(namespaceBtiLst);
wsdl11Definition.setRequestSuffix("Input");
wsdl11Definition.setResponseSuffix("Output");
wsdl11Definition.setSchema(certificateSchema);
return wsdl11Definition;
}
@Bean(name="BTILSTSchema")
public XsdSchema certificateSchemaBtiLst() {
return new SimpleXsdSchema(new ClassPathResource("xml-resources/GETBTILST.xsd"));
}
@Autowired
private WriteBtiDto writeBtiDto;
将自定义拦截器添加到列表中>
@Override
public void addInterceptors(List<EndpointInterceptor> interceptors) {
interceptors.add(new PayloadRootSmartSoapEndpointInterceptor(
new BtiEndpointInterceptor(),//let Spring Build and Manage The Bean,not me
BtiEndpoint.getNamespaceUri(),BtiEndpoint.getLocalPart()
));
}
BTI端点
@Endpoint()
public class BtiEndpoint {
private static final String NAMESPACE_URI="http://tarim.bull.ro/BullTarimWS/BTIService";
private static final String LOCAL_PART = "CXMLTYPE-GETBTIInput";
@PayloadRoot(namespace = NAMESPACE_URI,localPart = LOCAL_PART)
@ResponsePayload
public CXMLTYPEGETBTIOutput getBTI(@RequestPayload CXMLTYPEGETBTIInput request){
CXMLTYPEGETBTIOutput response = new CXMLTYPEGETBTIOutput();
return response;
}
// GETTERS AND SETTER FOR NAMESPACE AND LOCAL PART
BTILST端点
@Endpoint()
public class BtiLstEndpoint {
private static final String NAMESPACE_URI="http://tarim.bull.ro/BullTarimWS/BTILSTService";
private static final String LOCAL_PART = "CXMLTYPE-GETBTILSTInput";
@PayloadRoot(namespace = NAMESPACE_URI,localPart = LOCAL_PART)
@ResponsePayload
public CXMLTYPEGETBTILSTOutput getBTI(@RequestPayload CXMLTYPEGETBTILSTInput request){
CXMLTYPEGETBTILSTOutput response = new CXMLTYPEGETBTILSTOutput();
return response;
}
// GETTERS AND SETTER FOR NAMESPACE AND LOCAL PART
EndpointInterceptor
@Component
public class BtiEndpointInterceptor implements EndpointInterceptor {
private static final Log LOG = LogFactory.getLog(BtiEndpointInterceptor.class);
@Override
public boolean handleRequest(MessageContext messageContext,Object o) throws Exception {
LOG.info("1. Global Request Handling");
return true;
}
@Override
public boolean handleResponse(MessageContext messageContext,Object o) throws Exception {
LOG.info("2. Global Response Handling");
return true;
}
@Override
public boolean handleFault(MessageContext messageContext,Object o) throws Exception {
LOG.info("Global Exception Handling");
return true;
}
@Override
public void afterCompletion(MessageContext messageContext,Object endpoint,Exception ex) {
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。