Soap 如何在spring引导中使用WSDL?

Soap 如何在spring引导中使用WSDL?,soap,spring-boot,spring-ws,Soap,Spring Boot,Spring Ws,我有客户机提供的WSDL和模式文件。我需要用这个WSDL文件创建SpringBootSOAPWeb服务。我有google it和我能找到的所有示例,它们已经使用spring自动生成wsdl。我如何使用我的wsdl生成SOAP服务?以下是将现有wsdl与spring Ws和spring boot一起使用的常见步骤 配置类 @EnableWs @Configuration public class WebServiceConfig extends WsConfigurerAdapter {

我有客户机提供的WSDL和模式文件。我需要用这个WSDL文件创建SpringBootSOAPWeb服务。我有google it和我能找到的所有示例,它们已经使用spring自动生成wsdl。我如何使用我的wsdl生成SOAP服务?

以下是将现有wsdl与spring Ws和spring boot一起使用的常见步骤

配置类

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

    //http://localhost:8080/ws/services.wsdl --bean name is set to 'services'
    @Bean(name = "services")
    public Wsdl11Definition defaultWsdl11Definition() {
        SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition();
        wsdl11Definition.setWsdl(new ClassPathResource("/schema/MyWsdl.wsdl")); //your wsdl location
        return wsdl11Definition;
    }
}
  • 在pom.xml中,使用“jaxb2 maven插件”插件从wsdl生成类
  • 在SpringWS中,您必须自己编写端点。没有为端点生成代码。写起来很容易。您可以按照spring网站上的教程/指南进行操作

  • 从WSDL文件开始并使用SpringBoot公开web服务有许多选项。您通常会从WSDL定义生成Java类。有很多人会支持你这样做

    此外,在使用Spring Boot时,请确保利用,以便自动管理所需的不同依赖项

    一种方法是将SpringWeb服务与
    maven-jaxb2-plugin
    插件结合使用。 我创造了一个新的世界


    另一种选择是将ApacheCXF这样的框架与
    CXFCodeGen插件
    插件结合使用。CXF还附带了自己的名为
    CXF spring boot starter jaxws
    。为了让您开始,我编译了一个。

    您可以在包中创建WebServiceConfiguration java类

    @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, "/ProjectName/*");
        }
        @Bean(name = "wsdlname")
        public DefaultWsdl11Definition defaultWsdl11Definition (XsdSchema cityRequestSchema) {
            DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
            wsdl11Definition.setRequestSuffix("ByCountry");
            wsdl11Definition.setResponseSuffix("City");
            wsdl11Definition.setPortTypeName("Hotelport");
            wsdl11Definition.setLocationUri("/ProjectName");
            wsdl11Definition.setTargetNamespace("http://spring.io/guides/gs-producing-web-service");
            wsdl11Definition.setSchema(cityRequestSchema);
            return wsdl11Definition;
    
        }
    
        @Bean
    public XsdSchema cityRequestSchema() {
        return new SimpleXsdSchema(new ClassPathResource("CityRequest.xsd"));
    }
    
    作为spring boot应用程序运行后…然后在浏览器中复制粘贴此url。


    注意:localhost:8080要替换为tomcat端口,最简单的方法是简单地使用incl。它将负责从您的wsdl和模式文件中生成所需的大部分内容。下面是一个完整的示例:

    使用
    pom.xml
    中的starter,只需将wsdl和模式文件放置在
    src/main/resources
    中,就基本完成了。下面是一个完整的示例:

    
    4.0.0
    de.codecentric.soap
    cxf引导简单
    2.0.0-SNAPSHOT
    罐子
    cxf引导简单
    使用Spring Boot Starter CXF的演示项目
    org.springframework.boot
    spring启动程序父级
    2.1.2.1发布
    UTF-8
    1.8
    共中心
    弹簧启动启动器
    2.1.2.1发布
    org.springframework.boot
    弹簧起动试验
    测试
    org.springframework.boot
    springbootmaven插件
    共中心
    cxf spring boot starter maven插件
    2.0.0.1版本
    生成
    
    • 首先定义请求和响应的define XSD

    • 然后配置端点。(即创建一个Bean类和一个控制器类)

    • 然后配置MessageDispatcherServlet以接收请求

    • 然后将wsdl4j依赖项添加到pom.xml中

    • 然后添加web服务配置类,如下所示

      @Bean(name = "students")
        public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema studentsSchema) {
          DefaultWsdl11Definition definition = new DefaultWsdl11Definition();
          definition.setPortTypeName("StudentPort");
          definition.setTargetNamespace("http://in28minutes.com/students");
          definition.setLocationUri("/ws");
          definition.setSchema(studentsSchema);
          return definition;
        }
      
        @Bean
        public XsdSchema studentsSchema() {
          return new SimpleXsdSchema(new ClassPathResource("student-details.xsd"));
        }
      
    然后,如果启动spring引导并访问wsdl url,则可以看到wsdl链接。有关详细信息,请参阅本博客[1]


    [1]

    我建议您检查一下:它解释了如何创建契约优先的SOAP服务。@hrrgttnchml这里他们使用模式文件并通过代码生成wsdl。我的要求是我有WSDL,需要为该WSDL编写一个服务,而不生成新的服务。我通常不遵循这一路线,但我建议您看看CXF框架的wsdl2java。只需使用xjc工具手工编译WSDL,然后继续。@user3496599您知道怎么做吗?我也有同样的问题尼斯,这是有用的!我看到预期的url是“”。如果一个人必须有一个explisit url,比如?这真的很有帮助!但是我怎样才能测试我的端点是否完全按照提供的wsdl文件所描述的那样工作呢?谢谢,这很有帮助。我还发现实现这一点很有帮助。感谢您分享分步教程。由user@codeNotFound编写的教程对我的帮助超过了当前的热门评论
    @Bean(name = "students")
      public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema studentsSchema) {
        DefaultWsdl11Definition definition = new DefaultWsdl11Definition();
        definition.setPortTypeName("StudentPort");
        definition.setTargetNamespace("http://in28minutes.com/students");
        definition.setLocationUri("/ws");
        definition.setSchema(studentsSchema);
        return definition;
      }
    
      @Bean
      public XsdSchema studentsSchema() {
        return new SimpleXsdSchema(new ClassPathResource("student-details.xsd"));
      }