2016-05-12 4 views
1

Я пытаюсь разоблачить 2 разных конечных точки, которые предназначены для двух разных статических WSDL с использованием SpringWS и Spring Boot.Экспозиция нескольких статических файлов wsdl - Spring WS

Проблема, с которой я столкнулась, заключается в объявлении двух компонентов SimpleWsdl11Definition и выставлении только одного.

Это мои файлы конфигурации:

@EnableWs 
@Configuration 
public class AWSConfig extends WsConfigurerAdapter { 

    @Bean 
    public ServletRegistrationBean aMessageDispatcherServlet(ApplicationContext applicationContext) { 
     MessageDispatcherServlet servlet = new MessageDispatcherServlet(); 
     servlet.setApplicationContext(applicationContext); 
     servlet.setTransformWsdlLocations(true); 
     return new ServletRegistrationBean(servlet, Av1/*"); 
    } 

    @Bean(name = "AV1") 
    public SimpleWsdl11Definition simpleWsdl11Definition() { 
     SimpleWsdl11Definition simpleWsdl11Definition = new SimpleWsdl11Definition(); 
     simpleWsdl11Definition.setWsdl(new ClassPathResource("wsdl/AV1.wsdl")); 
     return simpleWsdl11Definition; 
    } 

    @Bean(name = "ASchema") 
    public XsdSchema aSchema() { 
     return new SimpleXsdSchema(new ClassPathResource("xsd/A.xsd")); 
    } 
} 

и

@EnableWs 
@Configuration 
public class BWSConfig { 

    @Bean 
    public ServletRegistrationBean bMessageDispatcherServlet(ApplicationContext applicationContext) { 
     MessageDispatcherServlet servlet = new MessageDispatcherServlet(); 
     servlet.setApplicationContext(applicationContext); 
     servlet.setTransformWsdlLocations(true); 
     return new ServletRegistrationBean(servlet, Bv1/*"); 
    } 

    @Bean(name = "BV1") 
    public SimpleWsdl11Definition simpleWsdl11Definition() { 
     SimpleWsdl11Definition simpleWsdl11Definition = new SimpleWsdl11Definition(); 
     simpleWsdl11Definition.setWsdl(wsdl/BV1.wsdl")); 
     return simpleWsdl11Definition; 
    } 

    @Bean(name = "bSchema") 
    public XsdSchema bSchema() { 
     return new SimpleXsdSchema(new ClassPathResource("xsd/BV1.xsd")); 
    } 
} 

Только AV1.wsdl доступен. Может ли кто-нибудь сказать мне, что я пропущу, пожалуйста ...

ответ

1

Ниже описание bean создает имя MessageDispatcherServlet с переопределенным методом getWsdlDefinition. Этот метод в исходном коде выбирает wsdl для экспонирования, если условия url удовлетворяются, из списка WsdlDefinitions, инициированного весной. Нижеследующее ограничение позволяет выбрать правильный, вместо того, чтобы неясное решение весны. Вручную введите URL-адрес с определением wsdl.

@Bean(name = "servlet-a") 
    public ServletRegistrationBean messageDispatcherServletA(ApplicationContext applicationContext) { 
     MessageDispatcherServlet servlet = new MessageDispatcherServlet(); 
    public ServletRegistrationBean messageDispatcherServletA(
      ApplicationContext applicationContext, 
      @Qualifier("A") final Wsdl11Definition a) { 
       MessageDispatcherServlet servlet = new MessageDispatcherServlet(){   
       private static final long serialVersionUID = 8547901522243924975L; 
       @Override 
       protected WsdlDefinition getWsdlDefinition(HttpServletRequest request) { 
       if (yourMethodCheckingForRightExposeUrl(request)) { 
        return a; 
       } 
       else { 
        return null; 
       } 
      }   
     }; 
     servlet.setApplicationContext(applicationContext); 
     servlet.setMessageReceiverBeanName("yourSpecificReceiverBeanName"); 
     ServletRegistrationBean bean = new ServletRegistrationBean(servlet, "/ws/your-endpoint/*"); // star needed to allow any urls 
     bean.setName("servlet-a"); 
     return bean; 
    } 
} 

Параметр WsdlDefininition может иметь квалифицированное имя «BV1» в вашем примере.

Смежные вопросы