Soap 如何在spring引导中使用WSDL?
我有客户机提供的WSDL和模式文件。我需要用这个WSDL文件创建SpringBootSOAPWeb服务。我有google it和我能找到的所有示例,它们已经使用spring自动生成wsdl。我如何使用我的wsdl生成SOAP服务?以下是将现有wsdl与spring Ws和spring boot一起使用的常见步骤 配置类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 {
@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;
}
}
从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")); }
[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"));
}