使用 SimpleXsdSchema创建 DefaultWsdl11Definition



我正在使用Spring WS,我正在尝试通过DefaultWsdl11Definition创建一个动态WSDL。基于Spring WS文档,以下代码应该可以工作:

@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 生成的默认值。

可能缺少什么?

查看 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 接口。架构文件是在该方法的实现中加载的。

所以Spring WS的文档是错误的。我希望在下一个版本中可以解决此问题。

相关内容

  • 没有找到相关文章

最新更新