我正在使用 Spring WS,并尝试通过 DefaultWsdl11Definition 创建动态 WSDL。基于Spring WS documentation以下代码应该可以工作:
@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生成的默认值。
可能缺少什么?
最佳答案
检查this tutorial从 Spring 团队我终于明白出了什么问题。 SimpleXsdSchema 必须是一个 bean。
@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 接口(interface)。架构文件是在该方法的实现中加载的。
所以Spring WS的文档是错误的。我希望在下一个版本中这个问题能够得到解决。
关于java - 使用 SimpleXsdSchema 创建 DefaultWsdl11Definition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43977739/