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 (将#修改为@)