springboot发布webservice

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合适一点。

这里就不在多说了。


版权声明:本文为qq_37400096原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。