Java中WebService的各种实现方式
■一、WebService概念
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。
所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法。
■二、WebService三要素
·SOAP:基于HTTP协议,采用XML格式,用来传递信息的格式。
·WSDL:用来描述如何访问具体的服务。(相当于说明书)
·UDDI:用户自己可以按UDDI标准搭建UDDI服务器,用来管理,分发,查询WebService 。其他用户可以自己注册发布WebService调用。(现在基本废弃)
1.SOAP(通信协议)
Simple Object Access Protocol,简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。
2.WSDL
WSDL(Web Service Description Language),是一个用来描述Web服务(Web Service)和说明如何与Web服务通信的XML语言。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。
No | 元素 | 说明 | |||||||||||||||||||||||||||
1 | Type(消息类型) | 数据类型定义的容器,它使用某种类型系统(如 XSD)。 | |||||||||||||||||||||||||||
2 | Message(消息) | 通信数据的抽象类型化定义,它由一个或者多个 part 组成。 | |||||||||||||||||||||||||||
3 | Part | 消息参数 | |||||||||||||||||||||||||||
4 | Operation(操作) | 对服务所支持的操作进行抽象描述,WSDL定义了四种操作:1.单向(one-way):端点接受信息;2.请求-响应(request-response):端点接受消息,然后发送相关消息;3.要求-响应(solicit-response):端点发送消息,然后接受相关消息;4.通知(notification):端点发送消息。 | |||||||||||||||||||||||||||
5 | PortType(端口类型) | 特定端口类型的具体协议和数据格式规范。 | |||||||||||||||||||||||||||
6 | Binding | 特定端口类型的具体协议和数据格式规范。 | |||||||||||||||||||||||||||
7 | Port | 定义为绑定和网络地址组合的单个端点。 | |||||||||||||||||||||||||||
8 | Service | 相关端口的集合,包括其关联的接口、操作、消息等。 |
(1)wsdl的阅读方法
是从下往上读。
每个wsdl有且只有一个Service节点。
①先找service节点
②service节点中找port节点。每个port对应一个PortType。
③port节点对应一binding节点。每个binding节点对应一个PortType。
④portType中有operation 节点就是服务的方法。
⑤operation 中有input(参数)和output(返回值)
⑥input(参数)和output(返回值)对应message节点
⑦message对应element节点。element节点对应complexType节点描述了参数及返回值的数据类型。
(2)使用注解规范wsdl
@WebService: 定义服务,在public class上边。
targetNamespace:指定命名空间。
name:portType的名称。
portName:port的名称。
serviceName:服务名称。
@WebResult:定义返回值。
name:返回结果值的名称。
@WebParam:定义参数。
name:指定参数的名称。
@WebMethod
exclude:排除指定的方法。
3.UDDI
UDDI 是一种目录服务,通过它,企业可注册并搜索 Web services。企业将自己提供的Web Service注册在UDDI,也可以使用别的企业在UDDI注册的web service服务,从而达到资源共享。UDDI旨在将全球的webservcie资源进行共享,促进全球经济合作。但是使用webservice并不是必须使用UDDI,因为用户通过WSDL知道了web service的地址,可以直接通过WSDL调用webservice。(现已废弃)
■三、WebService的工作原理
·对服务端而言,各类WebService框架的本质就是一个大大的Servlet,当远程调用客户端给它通过http协议发送过来soap格式的请求数据时,它分析这个数据,就知道要调用哪个java类的哪个方法,于是去查找或创建这个对象,并调用其方法,再把方法返回的结果包装成soap格式的数据,通过http响应消息回给客户端。
·对客户端而言,我们给这个类WebService客户端API传递wsdl文件的url地址,这些API就会创建出底层的代理类,我调用这些代理,就可以访问到webservice服务。代理类把客户端的方法调用变成soap格式的请求数据再通过HTTP协议发出去,并把接收到的soap数据变成返回值返回。
■四、WebService框架介绍(Java)
·JDK
■一、服务端发布服务
1.项目结构
2.pom.xml ※pom文件不用引入特定jar。
3.WebService业务类
4.Servlet类 ※为程序启动时发布WebService用,如果CXF等框架无需自己做Servlet类。
5.启动类 ※需要追加注解@ServletComponentScan,使程序启动时扫描@WebServlet注解。
6.wsdl ※http://localhost:8888/com/webservicejdkserverdemo/server?wsdl
7.wsdl ※http://localhost:8888/com/webservicejdkserverdemo/server?xsd=1
■二、客户端调用服务
通过java jdk 自带的一个命令 wsimport 根据服务端说明书(wsdl)生成本地的java 代码。直接操作这些java 代码,就可以调用服务端webservice。
wsimport命令说明
No | 命令参数 | 说明 | ||||||||||||||||||||||||||||
1 | -d <directory> | 指定放置生成的输出文件的位置 | ||||||||||||||||||||||||||||
2 | -encoding <encoding> | 指定源文件所使用的字符编码 | ||||||||||||||||||||||||||||
3 | -keep | 保留生成的文件 | ||||||||||||||||||||||||||||
4 | -p <pkg> | 指定目标程序包 | ||||||||||||||||||||||||||||
5 | -s <directory> | 指定放置生成的源文件的位置 |
1.wsimport生成客户端代码
※wsimport -keep -p com.webservicejdkclientdemo.webservice.client -s D:\\wsdljava -d D:\\wsdlclass http://localhost:8888/com/webservicejdkserverdemo/server?wsdl
生成class代码
生成java代码
2.客户端项目结构
3.WebService测试类
·CXF
■一、服务端发布服务
1.项目结构
2.pom.xml ※需要追加cxf-spring-boot-starter-jaxws。
3.WebService业务类
1).接口类
2).接口实现类
4.配置类
5.启动类
6.wsdl ※http://localhost:8080/cxf/server/helloCXF?wsdl
■二、客户端调用服务
1.客户端项目结构
2.WebService测试类
·AXIS
■一、服务端发布服务
Axis2对Spring支持不是很好,集成起来比较困难。Axis2的开发方式类似一个小型的应用服务器,Axis2的开发包要以WAR的形式部署到Servlet容器中,比如Tomcat,通过这些容器可以对工作中的Web Service进行很好的监控和管理。
※官网地址:http://axis.apache.org/axis2/java/core/
■二、客户端调用服务
1.项目结构
2.pom.xml
3.测试类