1.springboot发布webservice wsdl
1.1版本说明
<cxf.version>3.2.5</cxf.version>
<java.version>1.8</java.version>
<boot.version>2.3.12.RELEASE</boot.version>
1.2主要依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--发布webservice-->
<!-- cxf-spring-boot-starter-jaxrs -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>${cxf.version}</version>
</dependency>
1.3接口代码
接口类:
/**
* create at 2022-05-24
*/
@WebService(name = "DataService", targetNamespace = "http://webservice.xxx.com/")//命名空间,一般是接口的包名倒序
public interface DataService {
//注意 action 属性需加上 不然发布后的wsdl地址中 soapAption会为空,SAP调用会报错
@WebMethod(action = "http://webservice.service.com/service/SaveDataService")
public String SaveDataService(
@WebParam(name="DbType")String DbType,
@WebParam(name="tableName") String tableName,
@WebParam(name="keyField")String keyField,
@WebParam(name = "xmlStr") String xmlStr);
}
接口实现类
/**
* @author
* @date 2022-05-24
**/
@WebService(endpointInterface="com.xxx.webservice.DataService", targetNamespace = "http://webservice.xxx.com/", serviceName = "SaveDataService")
public class DataServiceImpl implements DataService {
@Override
public String SaveDataService(String DbName,
String tableName,
String keyField,
String xmlStr) {
...code implement here
return "hello world";
}
}
服务发布类
/**
* 配置cxf发布webservice类
*/
@Configuration
public class CxfConfig {
@Autowired
Bus bus;
//这里需要注意 由于springmvc 的核心类 为DispatcherServlet
//此处若不重命名此bean的话 原本的mvc就被覆盖了。可查看配置类:DispatcherServletAutoConfiguration
//一种方法是修改方法名称 或者指定bean名称
//这里需要注意 若beanName命名不是 cxfServletRegistration 时,会创建两个CXFServlet的。
//具体可查看下自动配置类:Declaration org.apache.cxf.spring.boot.autoconfigure.CxfAutoConfiguration
//也可以不设置此bean 直接通过配置项 cxf.path 来修改访问路径的
@Bean("cxfServletRegistration")
public ServletRegistrationBean dispatcherServlet(){
return new ServletRegistrationBean(new CXFServlet(),"/webservice/*");//发布服务名称
}
//注册服务
@Bean
public DataService dataService(){
return new DataServiceImpl();
}
@Bean
public Endpoint endpoint(){
EndpointImpl endpoint = new EndpointImpl(bus,dataService());
endpoint.publish("/service");
return endpoint;
}
}
1.4 服务发布路径访问
端口我这里默认和服务启动端口一致,浏览器能够访问说明服务发布成功。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UD1x7ewT-1655352838260)(C:/Users/elite/AppData/Roaming/Typora/typora-user-images/image-20220616102715293.png)]
1.5调用的话可以使用soapui
postman调用不是太方便,soapui调用wsdl合适一点。
这里就不在多说了。