【java】webservice服务
文章目录
- 1. 介绍
- 1.1 webservice介绍
- 1.2 soap协议介绍
- 1.3 wsdl
- 1.4 UDDI
- 1.5 ApacheCXF
- 2. 开发
- 2.1 JAX-WS
- 2.1.1 cxf实现
- 2.1.1.1 依赖
- 2.1.1.2 服务端代码
- 2.1.1.3 客户端代码
- 2.1.2 cxf实现+整合spring
- 2.1.2.1 依赖
- 2.1.2.2 服务端代码和配置
- 2.1.2.3 客户端代码和配置
- 2.2 JAXM&SAAJ
- 2.3 JAX-RS
- 2.3.1 restful介绍
- 2.3.1 cxf实现
- 2.3.1.1 服务端代码+依赖
- 2.3.1.2 客户端代码+依赖
- 2.3.2 cxf实现+整合spring
- 2.3.2.1 服务端代码+依赖
- 2.3.2.2 客户端代码+依赖
- 2.4 WS和RS区别
官方web服务地址
java进阶教程之webservice深入浅出【黑马程序员】视频地址
1. 介绍
1.1 webservice介绍
webservice即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术。
JAVA 中共有三种WebService规范,分别是JAXM&SAAJ
、JAX-WS(JAX-RPC)
、JAX-RS
。
webservice三要素:soap
、wsdl
、uddi
1.2 soap协议介绍
SOAP即简单对象访问协议(
Simple Object Access Protocol
),是用于交换XML(标准通用标记语言下的一个子集)编码信息的轻量级协议。它有三个主要方面:XML-envelope为描述信息内容和如何处理内容定义了框架,将程序对象编码成为XML对象的规则,执行远程过程调用(RPC)的约定。SOAP可以运行在任何其他传输协议上。
(2) SOAP作为一个基于XML语言的协议用于有网上传输数据。
(3) SOAP = 在HTTP的基础上+XML数据。
(4) SOAP是基于HTTP的。
(5) SOAP的组成如下:
a) Envelope - 必须的部分。以XML的根元素出现。
b) Headers - 可选的。
c) Body - 必须的。在body部分,包含要执行的服务器的方法和发送到服务器的数据。
1.3 wsdl
Web Service描述语言WSDL(SebService Definition Language)就是用机器能阅读的方式提供的一个正式描述文档而基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web Service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。
wsdl说明书,
- 通过wsdl说明书,就可以描述webservice服务端对外发布的服务;
- wsdl说明书是一个基于xml文件,通过xml语言描述整个服务;
- 在wsdl说明中,描述了:
1. 对外发布的服务名称(类)
2. 接口方法名称(方法)
3. 接口参数(方法参数)
4. 服务返回的数据类型(方法返回值)
1.4 UDDI
Web 服务提供商又如何将自己开发的 Web 服务公布到因特网上,这就需要使用到 UDDI 了,UDDI的话,是一个跨产业,跨平台的开放性架构,可以帮助 Web 服务提供商在互联网上发布 Web 服务的信息。UDDI 是一种目录服务,企业可以通过 UDDI 来注册和搜索 Web 服务。简单来时候话,UDDI 就是一个目录,只不过在这个目录中存放的是一些关于 Web 服务的信息而已。并且 UDDI 通过SOAP 进行通讯,构建于 . Net 之上。UDDI 即 Universal Description,Discovery andIntegration,也就是通用的描述,发现以及整合。UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为WebService提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。
1.5 ApacheCXF
Apache CXF =
Celtix + XFire
,ApacheCXF 的前身叫Apache CeltiXfire
,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。目前它仍只是 Apache 的一个孵化项目。
Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTfulHTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。
总结: 一种webservice实现框架
2. 开发
2.1 JAX-WS
全称:
Java API For XML-WebService
,JDK1.6 自带的版本为 JAX-WS2.1,其底层支持为 JAXB。JAX-WS(JSR 224)规范的 API 位于 javax.xml.ws.* 包,其中大部分都是注解,提供 API 操作 Web 服务(通常在客户端使用的较多,由于客户端可以借助 SDK 生成,因此这个包中的 API 我们较少会直接使用)。
2.1.1 cxf实现
2.1.1.1 依赖
<!--要进行jax-ws服务开发--><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.0.1</version></dependency><!--内置jetty web服务器:用tomcat运行,不需要,此处测试类启动依然需要--><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http-jetty</artifactId><version>3.0.1</version></dependency><!--日志实现--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.12</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency><!--httpclietn--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5.13</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.73</version></dependency>
2.1.1.2 服务端代码
--接口
@WebService//客户端调用,也需要加入该注解
public interface UserService {public String sayHi(String name);
}
--实现
public class UserServiceImpl implements UserService {@Overridepublic String sayHi(String name) {return "Hello,Welcom to the impl";}}--发布public static void main(String[] args) {//服务工厂JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();//设置服务地址jaxWsServerFactoryBean.setAddress("http://localhost:8081/user");//访问wsdl地址:http://localhost:8081/user?wsdl//设置服务类jaxWsServerFactoryBean.setServiceBean(new UserServiceImpl());//设置服务接口jaxWsServerFactoryBean.setServiceClass(UserService.class);//不是必须的// 添加日志输入、输出拦截器,观察soap请求、soap响应内容
// jaxWsServerFactoryBean.getInInterceptors().add(new LoggingInInterceptor());
// jaxWsServerFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());//发布服务jaxWsServerFactoryBean.create();System.out.println(logger);logger.info("服务端启动");}
2.1.1.3 客户端代码
@Testpublic void fun3() {// 服务接口访问地址:http://localhost:8000/ws/hello// 创建cxf代理工厂JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();// 设置远程访问服务端地址jaxWsProxyFactoryBean.setAddress("http://localhost:8081/user");// 设置接口类型jaxWsProxyFactoryBean.setServiceClass(UserService.class);// 对接口生成代理对象UserService helloService = jaxWsProxyFactoryBean.create(UserService.class);// 远程访问服务端方法String content = helloService.sayHi("Jet");System.out.println(content);}
2.1.2 cxf实现+整合spring
2.1.2.1 依赖
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.22</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.3.22</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>3.0-alpha-1</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency><!--要进行jax-ws服务开发--><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.0.1</version></dependency><!--内置jetty web服务器--><dependency><groupId>org.apache.cxf</groupId><artifactId