java - 使用 SimpleXsdSchema 创建 DefaultWsdl11Definition

标签 java spring web-services wsdl spring-ws

我正在使用 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/

相关文章:

java - 如何在 CardLayout 中显示不同的卡片?

java - 尝试在多个实例上运行批处理作业时出现 DuplicateKey 异常

java - Spring MVC : How to stream mp3 file from controller

C#: "The table ' sometable' 不能是嵌套关系中自身的子表。”

java - 模拟Web服务不可用时

java - Jackson 注释将 map 的键放在 map 的 POJO 值中

java - 如何通过 spring-data-jpa 框架进行自定义搜索?

java - Spring cron 作业不工作

java - 获取 SOAP :Fault while consuming a soap service

java - 使用 SWT 浏览器小部件时如何从 Java 设置 Mozilla 首选项?