WebService的讲解 和 CXF 的初步使用

摘要:
webservice定义语言,对应.wsdl文档,一个webservice会对应一个唯一的wsdl文档,定义了客户端与服务端发送请求和响应的数据格式和过程3.如何发布一个webservice?webservice能解决:跨平台调用跨语言调用远程调用3.3.什么时候使用webService?
1. 复习准备

1.1. Schema约束

几个重要知识:

  1. namespace

相当于schema文件的id

  1. targetNamespace属性

用来指定schema文件的namespace的值

  1. xmlns属性

引入一个约束, 它的值是一个schema文件的namespace

  1. schemaLocation属性

用来指定引入的schema文件的位置

schema规范中:

1. 所有标签和属性都需要有schema文件来定义

2. 所有的schema文件都需要有一个id, 但在这里它叫namespace,

3. namespace的值由什么来指定?

targetNamespace属性来指定, 它的值是一个url(很有可能不存在)

4. 如何引入一个Schema约束?

属性: xmlns属性

属性值: 对应的schema文件的id(namespace)

5. 如果引入的schema不是w3c组织定义, 必须指定schema文件的位置

6. schema文件的位置由什么属性来指定?

属性: schemaLocation

属性值: namespace path

7. 如果引入了N个约束, 需要给n-1个取别名

1.2. HTTP协议

几个重要知识:

1.请求的组成:
请求行(请求方式 path http1.1)

请求头

请求体:只有post请求有

2.响应的组成
响应状态行:

响应头

响应体:浏览器解析显示的数据

3.请求的过程


2.
面试问题

1.webservice相当于HTTP+?+?

? : xml

? : schema

2.wsdl是什么?

webservice定义语言, 对应.wsdl文档, 一个webservice会对应一个唯一的wsdl文档,

定义了客户端与服务端发送请求和响应的数据格式和过程

3.如何发布一个webservice?

定义SEI @webservice @webMethod

定义SEI的实现

发布: Endpoint.publish(url, SEIImplObject)

4. 如何请求一个webservice?

1.根据wsdl文档生成客户端代码 jdk/cxf

2.根据生成的代码调用webService

3. 关于Web Service的几个问题

3.1. Web service是什么?

1. 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据)

2.一个跨语言、跨平台的规范(抽象)

3.多个跨平台、跨语言的应用间通信整合的方案(实际)

以各个网站显示天气预报功能为例:

气象中心的管理系统将收集的天气信息并将数据暴露出来(通过WebService Server),

而各大站点的应用就去调用它们得到天气信息并以不同的样式去展示(WebService Client).

网站提供了天气预报的服务,但其实它们什么也没有做,

只是简单了调用了一下气象中心服务器上的一段代码而已

3.2.为什么要用Web service

web service能解决:

跨平台调用

跨语言调用

远程调用

3.3. 什么时候使用web Service?

1. 同一家公司的新旧应用之间

2. 不同公司的应用之间

分析业务需求:天猫网与中通物流系统如何交互?

3. 一些提供数据的内容聚合应用:天气预报、股票行情

4. Web Service中的几个重要术语

4.1.WSDLweb service definition language

直译: WebService定义语言

1.对应一种类型的文件.wsdl

2.定义了web service的服务器端与客户端应用交互传递请求和响应数据的格式和方式

3.一个web service对应一个唯一的wsdl文档

4.2.SOAPsimple object access protocal

直译: 简单对象访问协议

  1. 是一种简单的、基于HTTPXML的协议, 用于WEB上交换结构化的数据
  2. soap消息:请求消息响应消息

http+xml片断


4.3.
SEIWebService EndPoint Interface(终端)

直译:web service的终端接口,

  1. 就是WebService服务器端用来处理请求的接口

@Webservice

@WebMethod


4.4.
CXFCeltix + XFire

一个apache的用于开发webservice服务器端和客户端的框架

5.开发webservice

5.1. 概述

  • 开发手段:

–使用JDK开发(1.6及以上版本)

–使用CXF框架开发(工作中)

  • 组成:

–服务器端

–客户端

5.1.使用JDK开发WebService

1).开发服务器端

  • Web Service编码:

–@WebService( SEISEI的实现类)

–@WebMethod(SEI中的所有方法)

WebService的讲解 和 CXF 的初步使用第1张WebService的讲解 和 CXF 的初步使用第2张
1 importjavax.jws.WebMethod;
2 importjavax.jws.WebService;
3 
4 /**
5 * SEI
6 * @authorAdministrator
7 *
8  */
9 @WebService
10 public interfaceHelloWs {
11 
12 @WebMethod
13     publicString sayHello(String name);
14 }
Interface
WebService的讲解 和 CXF 的初步使用第3张WebService的讲解 和 CXF 的初步使用第4张
1 importjavax.jws.WebService;
2 
3 importcom.ittest.ws.service.HelloWs;
4 /**
5 * SEI  的实现
6 * @authorAdministrator
7 *
8  */
9 @WebService
10 public class HelloWsImpl implementsHelloWs {
11 
12     publicString sayHello(String name) {
13         System.out.println("service sayHello()  "+name);
14         return "Hello "+name;
15 }
16 
17 }
Implement
  • 发布Web Service

–Endpoint(终端, 发布webservice)

WebService的讲解 和 CXF 的初步使用第5张WebService的讲解 和 CXF 的初步使用第6张
1 importjavax.xml.ws.Endpoint;
2 
3 importcom.ittest.ws.service.impl.HelloWsImpl;
4 
5 /**
6 * 发布webservice
7 * @authorAdministrator
8 *
9  */
10 public classTestService {
11 
12     public static voidmain(String[] args) {
13         String address = "http://192.168.1.100:8989/webService_01_sayService/hellows";
14         Endpoint.publish(address, newHelloWsImpl());
15         System.out.println("发布 webService_01_sayService 成功");
16 }
17 }
EndPoint

2). 开发客户端

  • 使用eclipse提供的web service浏览器访问

–查看对应的wsdl文档:…..?wsdl(一般浏览器)

请求webService并查看请求和响应消息(webservice浏览器)

  • 创建客户端应用编码方式访问

–借助jdk的wsimort.exe工具生成客户端代码:

wsimport -keep url//url为wsdl文件的路径

–借助生成的代码编写请求代码

WebService的讲解 和 CXF 的初步使用第7张

WebService的讲解 和 CXF 的初步使用第8张

5.2.监听请求: 使用EclipseTCP/IP工具(端口转发)

  1. 将服务器端的WSDL文档保存到客户端本地
  2. 修改文档: 将端口号从8989改为8080
  3. 根据本地的wsdl文档生成客户端代码, 并编写客户端的调用代码
  4. 配置eclipseTCP/IP,启动监听

WebService的讲解 和 CXF 的初步使用第9张

  1. 执行客户端代码发送WebService请求

WebService的讲解 和 CXF 的初步使用第10张

5.3.调用免费的web service(天气预报)

  1. Google免费WebService, 找到提供天气预报Webservice的网络地址

http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx

  1. 使用eclipseweb service浏览器访问
  1. 客户端编码方式访问

–借助命令工具自动生成客户端代码

–借助生成的代码编写请求代码

异常说明: 直接生成客户端代码会抛异常, 无法生成客户端代码, 解决办法:

      1. 将对应的wsdl文档保存到本地
      2. 修改wsdl文档的部分内容:

<s:element ref="s:schema" /><s:any />替换成

<s:any minOccurs="2" maxOccurs="2"/>

备注: 这个是Java调用net的webservice都有的问题

5.4.使用CXF开发web service

EndPoint: 加入cxf的jar包即可,其它不需要改动

Client: 加入cxf的jar包即可,使用cxfwsdl2java命令生成代码(加入path)

D:javaeclipsWorkSpacejavaeeProjectwebService_01_cxf_client3src>wsdl2java       D:javaeclipsWorkSpacejavaeeProjectwebService_01_cxf_client3hellows.wsdl

wsdl2java异常说明:

G:myeclipseworkspaceWS-clientsrc>wsdl2javahttp://192.168.1.4/server?wsdl

Exceptioninthread"main"java.lang.AssertionError:org.xml.sax.SAXParseExcepti

on;systemId:jar:file:/F:/apache-cxf-3.0.0/lib/jaxb-xjc-2.2.7.jar!/com/sun/tool

s/xjc/reader/xmlschema/bindinfo/binding.xsd;lineNumber:52;columnNumber:88;s

chema_reference:由于accessExternalSchema属性设置的限制而不允许'file'访问,

因此无法读取方案文档'xjc.xsd'

原因:  Cxf jdk的版本不匹配 .

微博文章: http://blog.csdn.net/yajun0628/article/details/74458351

免责声明:文章转载自《WebService的讲解 和 CXF 的初步使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IE下设置SELECT项不可选.mtl文件格式解析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

每天一个linux命令(24):Linux文件类型与扩展名

Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件)。 一. 文件类型 Linux文件类型常见的有:普通文件、目录文件、字符设备文件和块设备文件、符号链接文件...

ASP.NET基础知识整理

Asp.net六大对象 1.Request-->读取客户端在Web请求期间发送的值 常用方法: 1、Request.UrlReferrer请求的来源,可以根据这个判断从百度搜的哪个关键词、防下载盗链、防图片盗链,可以伪造(比如迅雷)。 (使用全局一般处理程序) 2、Request.UserHostAddress获得访问者的IP地址 3、Reque...

认识Windows Communication Foundation

            好久没有写博客,作为一个程序员,我居然习惯了不写博客。也难怪这些年来,一直原地踏步,无所长进。真是一份付出一份收获,种瓜得瓜,种豆得豆。 Windows Communication Foundation   是一种非常实用、非常强大的技术。属于.NET范畴内的,微软推出的技术。在这个.NET即将失去市场的日子里,也只有WCF这个技术...

SSH的通讯和认证

SSH的通讯和认证 转自:http://blog.sina.com.cn/s/blog_4e9440910100zxk0.html 之前一直对SSH的认证模棱两可,今天对SSH的通讯,认证和配置有了进一步的学习。 大多数文档都没有将SSH的连线加密通讯和SSH的登录加密认证特别地区分来讲,对于我这种对密钥不太熟悉的人来说常常引起一些歧义。 首先,必须把通讯...

学会使用Web Service下(客户端访问)/(服务器端访问)

http://www.cnblogs.com/ruihua/archive/2007/10/28/940287.html http://www.cnblogs.com/ruihua/archive/2007/10/28/939932.html学会使用Web Service上(服务器端访问)     关于什么是Web Service,相信在很多地方都会有介绍...

动态调用WebService(C#)

 通常我们在程序中需要调用WebService时,都是通过“添加Web引用”,让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务。这样是使工作简单了,但是却和提供Web服务的URL、方法名、参数绑定在一起了,这是VS.NET自动为我们生成Web服务代理的限制。如果哪一天发布Web服务的URL改变了,则我们需要重新让VS.NET生成代理,并重新...