springboot实现webservice_cxf[源码在下面]
什么是webservice?
webservice,是一个平台独立的,低耦合的,自包含的,基于可编程的web的应用程序,可使用开放的xml(标准通用标记语言下的一个子集)标准来描述,发布,发现,协调和配置这些应用程序,用于来开发分布式的互操作的应用程序,webservice技术,能使得运行在不同机器上的不同应用无需借助附加的,专门的第三方软件或者硬件,就可以相互交换数据或者集成,一句web service规范实施的应用之间,无论他们所使用的语言,平台或内部协议是什么,都可以相互交换数据,web service是自描述,自包含的可以用网络模块,可以执行具体的业务功能,web service也很容易部署,因为他们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集xml,http,webservice减少了应用接口的花费,web service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制
Apache CXF简介
Apache CXF 是一个开源的service框架,它实现了与JCP与web service中一些重要标准,CXF简化了构造,集成,面向服务架构(SOA)业务组件与技术的灵活复用。在CXF中,service使用WSDL标准定义并能够使用各种不同的消息格式(或binding)和网络协议(transports)包括SOAP,XML(通过HTTP或JMS)进行访问
创建springboot项目
引入jar(以下是本人引入的jar包,我的springboot的版本选择的是<2.5.0>)
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.2.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
项目结构
springboot项目并导包完成后在启动类同包下创建两个包,
WebxxxApplication为启动类就不用解释了吧
一个是service包(包内容: 客户端对外暴露服务)
一个是config包(用于配置spring整合cxf,和cxf客户端的自启动)
创建服务端对外暴露接口
在service包中创建service接口,接口上需要添加**@webservice注解**
接口内可以自定义一些想要对外暴露的方法供给给客户端调用
@WebParam表示方法的参数
如图:
接下来是接口的实现类:
接口及实现类创建位置如上图
接口实现类:
接口的实现类同样需要添加**@webserivce**注解,并且需要注解中需要添加一个参数endpointInterface:参数内容指向 接口的地址
spring整合cxf
个人理解spring整合:
什么是spring整合,就是创建出来的对象的交给spring,对象存放在spring中的单例池中,spring负责对象与对象之间的管理(说了半天就是ioc的概念:把创建对象的权力交给spring框架管理)
正题开始
在config包下创建CXFConfig类
类中内容
注意注意!!!
写到这段代码可能会报错,原因是 new ServletRegistrationBean()的时候需要传一个servlet或子类型的对象,而new CXFServlet() 是servlet的子类的子类的子类的,子类, 按道理可以穿,但是idea不识别, 这是可以在pom包中添加一个servlet的包即可解决
@Bean
public ServletRegistrationBean servletRegistrationBean(){
return new ServletRegistrationBean(new CXFServlet(),"/webservice/*");
}
运行测试:
可以使用第三方测试软件测试webservice:
我这里用的是 :webservice studio
路径提示:
localhost:启动服务的端口号/这里是在config中定义的webservice/要访问的详细某个服务?wsdl
哦也成功
编写测试类,终于快完啦~
测试类包结构:
DemoService接口:模拟客户端接口
内容如下
targetNamespace中的内容是你接口中的包路径倒过来写
测试类详情
成功!
源码链接奉上:
https://gitee.com/yue_25699_admin/web_service.git
保姆级webservice入门到此结束,各位告辞