加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Webservice介绍,CXF入门程序

发布时间:2020-12-17 00:54:42 所属栏目:安全 来源:网络整理
导读:一. 什么是WedService? WebService不是框架,甚至不是一种技术,而是一种跨平台,跨语言的规范,WebService的出现是为了解决这样的需求场景: 不同平台,不同语言所编写的应用之间相互调用. 二. WedService有什么用? WebService可以集中解决以下问题: 1. 远程调用

一. 什么是WedService?

WebService不是框架,甚至不是一种技术,而是一种跨平台,跨语言的规范,WebService的出现是为了解决这样的需求场景: 不同平台,不同语言所编写的应用之间相互调用.


二. WedService有什么用?

WebService可以集中解决以下问题:

1. 远程调用

2. 跨平台调用

3. 跨系统调用


那么WebService在企业中有什么用呢?

1. 同一个公司新旧系统的整合.
2. 不同公司的业务整合: 业务的整合就要带来不同公司的系统整合,而不同公司的系统可能存在平台不同,语言不同的问题.
3. 内容聚合: 一个应用需要提供天气预报,股票行情,黄金行情等,?内容聚合的应用需要调用大量不同平台,不同语言编写的应用的方法.


三. 面向服务架构(SOA)

1. 什么是面向服务架构: service1,service2,service3 - 所有组件都是"即插即用"的.
? ?IBM提倡的SOA架构: 希望以"组装电脑"的方式来开发软件
? ?① 各种提供服务的组件
? ?② 企业服务总线(Enterpise Service Bus - ESB)
2. CXF号称是SOA框架


四. WebService三大技术基础

1. WSDL:?web service definition language - web service定义语言

? ?- 通俗地说,WSDL文档描述了Web Service如下三个方面:
? ?- WHAT: 该Web Service 包含什么操作
? ?- HOW: 该Web Service的操纵应该怎样调用
? ?- WHERE: 该Web Service的服务地址


2.?SOAP: Simple Object Access Protocol: 简单对象访问协议

? ? 一次web service的调用,其实并不是方法调用,而是发送SOAP消息(即xml文档片段)


3.?UDDI:?Universal Description,Discovery and Integration

? ??UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索


※ 调用一次Web Service的本质:
1. 客户端把调用方法参数,转换成XML文档片段(SOAP消息 - input消息) - 该文档片段必须符合WSDL定义的格式
2. 通过网络,把xml文档片段传给服务器
3. 服务器接收到xml文档片段
4. 服务器解析XML文档片段,提取其中的数据,并把数据转换调用Web Service所需要的参数值
5. 服务器端执行方法
6. 把执行方法得到的返回值,再次转换为生成为XML文档片段(SOAP消息 - output消息)- 该文档片段必须符合WSDL定义的格式
7. 通过网络,把xml文档片段传给客户端
8. 客户端接受到xml文档片段
9. 客户端解析xml文档片段,并把数据转换调用Web Service的返回值
从上面调用本质来看,要一个语言支持web service唯一的要求是: 该语言支持xml文档的解析,生成,支持网络传输


五. 使用CXF开发WebService程序

1. 环境准备:

① 下载Apache cxf2.2.10环境:?http://download.csdn.net/detail/zdp072/7429645

② 所需Jar包:?

? ? cxf-2.2.10.jar

? ??geronimo-servlet_2.5_spec-1.2.jar

? ??jetty-6.1.21.jar

? ??jetty-util-6.1.21.jar

? ??wsdl4j-1.6.2.jar

? ??XmlSchema-1.4.5.jar


③ 配置path环境变量:?G:Java_libapachecxfapache-cxf-2.2.10bin (cxf的解压目录)

? ? 命令行输入: wsdl2java查看是否配置成功


2. 开发服务端:

①?开发一个Web Service业务接口,该接口要用@WebService修饰

[java]? view plain copy

在CODE上查看代码片

派生到我的代码片

  1. @WebService ??
  2. public?interface?HelloService?{??
  3. ????public?String?sayHello(String?name);??
  4. }??

②?开发一个Web Service实现类,实现类也需要用@WebService修饰

[java]? view plain copy

在CODE上查看代码片

派生到我的代码片

  1. @WebService (endpointInterface="com.zdp.service.HelloService")??
  2. class?HelloServiceImpl?implements?HelloService?{??
  3. ????@Override??
  4. ????public?String?sayHello(String?name)?{??
  5. ????????return?name?+?",?您好!?现在的时间是:?"?+?new?Date();??
  6. ????}??
  7. }??

③?使用Endpoint类的静态方法发布WebService?

[java]? view plain copy

在CODE上查看代码片

派生到我的代码片

  1. class?MyServer?{??
  2. ????static?void?main(String[]?args)?{??
  3. ????????HelloService?helloService?=?new?HelloServiceImpl();??
  4. ????????Endpoint.publish("http://localhost/sayHello",?helloService);??
  5. ????????System.out.println("Web?Service?暴露成功");??
  6. ????}??
  7. }??

注:?每个Web Service组件需要2个部分: 接口和实现类


④ 运行MyServer(CXF内置了一个Jetty Web服务器),在浏览器中输入以下地址:?http://localhost/sayHello?wsdl?,?如果WebService暴露成功将会在浏览器里看到一个xml文件


3. 开发客户端

① 打开命令行,cd进入客户端的src目录,运行:?wsdl2java http://localhost/sayHello?wsdl,?目的就是通过暴露的wsdl生成Java类

② 写一个客户端测试类:

[java]? view plain copy

在CODE上查看代码片

派生到我的代码片

  1. class?MyClient?{??
  2. ????void?main(String[]?args)?{??
  3. ????????HelloServiceImplService?factory?=?new?HelloServiceImplService();??
  4. ????????HelloService?helloService?=?factory.getHelloServiceImplPort();?//?返回一个代理??
  5. ????????System.out.println(helloService.sayHello("zhangsan"));??
  6. ????}??
  7. }??

③ 代码结构图及下载地址:?http://download.csdn.net/detail/zdp072/7429637

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读