2017-05-15 12 views
0

저는 Spring WS를 사용하고 있으며, 동적 WSDL을 통해 DefaultWsdl11Definition을 생성하려고합니다. Spring WS documentation (THW)를 기반으로 다음 코드는 작동합니다 :SimpleXsdSchema로 DefaultWsdl11Definition을 생성하십시오.

@Bean 
public DefaultWsdl11Definition orders() { 
    DefaultWsdl11Definition definition = new DefaultWsdl11Definition(); 
    definition.setPortTypeName("Orders"); 
    definition.setLocationUri("http://localhost:8080/ordersService/"); 
    definition.setSchema(new SimpleXsdSchema(new ClassPathResource("echo.xsd"))); 

    return definition; 
} 

하지만 내 스키마에 정의 된 작업을 포함하지 않는 반환되는 WSDL. 로그에 오류가 없으면 리턴 된 WSDL은 거의 공백이며, WSDL 생성의 기본값 만 있습니다.

누락 된 품목

답변

1

봄 팀에서 this tutorial을 확인하면 나는 틀린 것을 마침내 이해합니다. SimpleXsdSchema는 빈이어야합니다.

@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, "/ws/*"); 
    } 

    @Bean(name = "countries") 
    public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema countriesSchema) { 
     DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition(); 
     wsdl11Definition.setPortTypeName("CountriesPort"); 
     wsdl11Definition.setLocationUri("/ws"); 
     wsdl11Definition.setTargetNamespace("http://spring.io/guides/gs-producing-web-service"); 
     wsdl11Definition.setSchema(countriesSchema); 
     return wsdl11Definition; 
    } 

    @Bean 
    public XsdSchema countriesSchema() { 
     return new SimpleXsdSchema(new ClassPathResource("countries.xsd")); 
    } 
} 

깊은 가고, 나는 SimpleXsdSchema는 afterPropertiesSet() 메소드가 InitializingBean 표시 인터페이스를 구현하는 것을 확인. 스키마 파일이로드되는 것은이 메소드의 구현에 있습니다.

스프링 WS 문서가 잘못되었습니다. 다음 버전에서이 문제가 해결되기를 바랍니다.