最近由于工作上需要,所以去学习了一下webService技术,在这里做一下记录,以防下次忘记o(╯□╰)o
1.webService是什么:简单点来说,就是一种可以远程调用接口的技术.两个项目之间通过固定的webService接口协议实现跨系统数据交互.比如可以用于获取天气预报,手机归属地查询等等.
2.webService 该如何使用: 有如下几种使用方式:
2.1基于jdk方式发布webService服务
2.2 基于apache.cxf框架发布ws风格的webService服务
2.3基于apache.cxf框架发布基于restful风格的webService服务
2.4基于系统接口,发布json数据格式的restful风格的接口(不是严格意义上的webService接口,因为只是项目里一个普通接口,但可以被其他项目调用)
在restful风格的webService出现之前,webService代码的编写都是十分繁琐的,而restful风格的webService接口虽然简单,和普通controller里写接口的方式差不多,但如果能直接将controller里的接口交于其他项目调用,那又何必费心费力的再编写个webService接口,只是增加不必要的麻烦罢了.
下面会具体介绍几种常用的webService接口编写方式,用来应付开发应该是没问题的了,编写接口之前需要了解的前置知识,,,webService的几种协议,,例如soap协议,rest协议,这两种协议区别我也没理解,有懂的朋友可以告诉我一下哦,2.--1;2;都是基于soap协议,2.3基于rest协议..2.4属于普通接口但也是restful风格的.
1.jdk方式生成服务端和客户端
import
生成客户端方式有两种 1是通过jdk自带的命令 wsimport -s 生成代码路径 webService接口URL ,这种方式不推荐,bug多,而且还会有编码格式问题
2是通过apache.cxf框架命令 wsdl2java -d 生成代码路径 webService接口URL这种方式推荐,但需要下载apache.cxf的jar包,下载地址:
Index of /dist/cxf/3.0.16archive.apache.org使用以上两种命令都需要配置环境变量,类似于jdk环境变量配置,但wsimport命令是jdk原生的,所以你若提前配置好jdk环境变量,那么可以在cmd窗口直接使用 ,,cxf环境变量配置如下:
WebService生成客户端代码的两种方式: wsdl2java 、eclipse_axisblog.csdn.net使用以上命令生成的文件都是相同的,具体不再讲述
WebService客户端几种实现方式_Java开发-CSDN博客blog.csdn.net不过这里需要注意的是使用jdk原生方式就不能再项目里集成apache.cxf框架了,不然各种异常错误搞到你怀疑人生
3.基于restful风格的webService生成服务端:,使用的东西都是apache.cxf里的,很简单粗暴,写法类似于controller里编写接口;发布方式如下
JAXRSServerFactoryBean jaxrsServerFactoryBean = new JAXRSServerFactoryBean();jaxrsServerFactoryBean.setServiceBean(new HelloServiceImpl());//具体的服务beanjaxrsServerFactoryBean.setAddress("http://localhost:8080/hello");//设置地址jaxrsServerFactoryBean.create().start();//启动
logger.info("发布成功");
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.io.File;
@Path("/hello")
@Produces("*/*")//规范传递的数据类型
public interface HelloService {
@POST//请求方式
@Path("/hello/")//请求地址
@Consumes({MediaType.APPLICATION_XML})// 服务器接受的请求类型
public boolean hello(@QueryParam("name") String name,File file);
@POST
@Path("/getFile")
@Consumes({"application/xml"})
public void getFile(File file);
}
这里就不讲解怎么把cxf框架和spring进行集成,反正也不是太难.以上需要引入的pom依赖如下
<!-- cxf 进行rs开发 必须导入 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.0.1</version>
</dependency>
<!-- 客户端 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
<version>3.0.1</version>
</dependency>