CXF WebService笔记day1.txt
2013-03-03 20:43
183 查看
Web Service
--不是框架。更不是一种技术。
而是一种跨平台、跨语言的规范。
为了解决这样的需求场景:
不同平台、不同语言所编写的应用之间如何相互调用?
通俗点:假如java里有如下方法
public List<Cat> getCatsByUser(User user)
要求是,有一个C语言写的程序,它想去调用上面getCatsByUser方法。
Web Service集中解决:
- 远程调用
- 跨平台调用
- 跨语言调用
Web Service实际中用途:
1.同一个公司的新、旧系统的整合。
Linux上的Java应用,去调用windows平台的Delphi应用。
2.不同公司的业务整合。
业务的整合就要带来,不同公司的系统整合。
不同公司的系统可能存在平台不同、语言不同的问题。
3.内容聚合。
一个应用需要提供,天气预报、股票行情、黄金行情、编程语言行情……
这个内容聚合的应用,需要调用大量不同平台,不同语言编写的应用的方法。
……
CXF
Axis(Apache) -> Axis 2(Apache)
XFire -> CXF(XFire + Celtrix)
XFire (Web Service框架)
Celtrix (ESB框架)
SOA (面向服务的架构)
Service1, Service2, Service3--所有组件都是“即插即用”的。
IBM提倡的SOA架构: 希望以“组装电脑”的方式来开发软件。
1.各种提供服务的组件。(Web Service)
2.企业服务总线(Enterprise Service Bus , ESB)
CXF号称是SOA框架
CXF (Apache)
CXF内置了一个Jetty Web服务器。
--------------------------------------------
使用CXF开发Web Service服务器端:
/****************************************
每个Web Service组件需要2个部分:接口和实现类。
*****************************************/
(1)开发一个Web Service业务接口。
该接口要用@WebService修饰。
(2) 开发一个Web Service实现类。
实现类也需要用@WebService修饰。
(3) 使用Endpoint类的静态方法来发布WebService
--------------------------------------------
使用CXF开发Web Service客户端:
(1) 调用CXF提供的wsdl2java工具,根据WSDL文档生成相应的Java代码。
WSDL - Web Service Definition Language
任何语言实现了Web Service, 都需要提供、并暴露WSDL文档。
(2) 找到wsdl2java所生成类中,一个继承了Service的类。
该类的实例可当成工厂来使用。
(3) 调用Service子类的实例的getXxxPort方法,返回远程Web Service的代理。
形参、返回值
1. 当形参、返回值的类型是String、基本数据类型时,CXF肯定可以轻松地处理。
2. 当形参、返回值类型是JavaBean式的复合类、List集合、数组等时
CXF也可以很好的的处理。
3. 还有一些像Map、非JavaBean式的复合类,CXF是处理不了的。
/***********************************
XML里的两个属性:
targetNamespace - 相当于Java语言里的package
xmlns - 相当于Java语言的import
import:u java.util.*;
import:s java.sql.*;
u:Date d = new u:Date();
************************************/
Web Service的三个技术基础:
1. WSDL Web Service Definition Language - Web Service定义语言。
2. SOAP Simple Object Access Protocol ,简单对象访问协议。
3. UDDI
一次Web Service的调用 -- 其实并不是方法调用,而是发送SOAP消息(即XML文档片段)。
对于sayHi操作来说,
传入消息是:
<sayHi>
<arg0>字符串</arg0>
<sayHi>
传出消息是:
<sayHiResponse>
<return>字符串</return>
</sayHiResponse>
对于getCatsByUser操作来说,
传入消息是:
<getCatsByUser>
<arg0>
<address>字符串</adress>
<id>整数值</id>
<name>字符串</name>
<pass>字符串</pass>
</arg0>
</getCatsByUser>
传出消息是:
<getCatsByUserResponse>
<return> --可能出现0~N次
<color>字符串</color>
<id>整数值</id>
<name>字符串</name>
</return>
</getCatsByUserResponse>
----------------------------------------
阅读wsdl文档个人小总结:
1.进入wsdl接口文档http://192.168.1.27:9999/fkjava?wsdl=HelloWorld.wsdl
+<wsdl:types>
+<wsdl:message name="sayHiResponse">
+<wsdl:message name="getCatsByUserResponse">
+<wsdl:message name="sayHi">
+<wsdl:message name="getCatsByUser">
+<wsdl:portType name="HelloWorld">
2.先展开portType,->找到operation(<wsdl:operation name="sayHi">)->input message(message="nsl:sayHi")
再展开对应的message->part element
再展开types->找到对应元素,通过对应元素的类型type,找到下面相应的复合类型complexType->展开就可以看到传入/传出消息的参数名/返回name,及返回类型type
----------------------------------------
通俗地说,WSDL文档描述了Web Service如下3个方面:
- WHAT :该Web Service包含“什么”操作。
- HOW :该Web Service的操作应该“怎样”调用?
- WHERE :该Web Service的服务地址。
/********************************
只要得到Web Service的WSDL文档
接下来程序就可以调用Web Service
********************************/
调用一次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开发中,如果遇到系统无法自动处理的类型,就需要程序员自行处理。
处理思路是:提供一个转换器,该转换器负责把CXF搞不定的类型,转换CXF搞得定的类型
(1) 使用@XmlJavaTypeAdapter修饰CXF无法自动处理的类型.
使用该Annotation时,通过value属性指定一个转换器。
(2) 实现自己的转换器。
实现转换器时,需要开发一个CXF搞得定的类型。
对于getAllCats操作来说,
传入消息是:
<getAllCats>
</getAllCats>
传出消息是:
<getAllCatsResponse>
<return>
<entries> -- 可出现0~N次
<key>字符串</key>
<value>
<color>字符串</color>
<id>整数值</id>
<name>字符串</name>
</value>
</entries>
</return>
</getAllCatsResponse>
--不是框架。更不是一种技术。
而是一种跨平台、跨语言的规范。
为了解决这样的需求场景:
不同平台、不同语言所编写的应用之间如何相互调用?
通俗点:假如java里有如下方法
public List<Cat> getCatsByUser(User user)
要求是,有一个C语言写的程序,它想去调用上面getCatsByUser方法。
Web Service集中解决:
- 远程调用
- 跨平台调用
- 跨语言调用
Web Service实际中用途:
1.同一个公司的新、旧系统的整合。
Linux上的Java应用,去调用windows平台的Delphi应用。
2.不同公司的业务整合。
业务的整合就要带来,不同公司的系统整合。
不同公司的系统可能存在平台不同、语言不同的问题。
3.内容聚合。
一个应用需要提供,天气预报、股票行情、黄金行情、编程语言行情……
这个内容聚合的应用,需要调用大量不同平台,不同语言编写的应用的方法。
……
CXF
Axis(Apache) -> Axis 2(Apache)
XFire -> CXF(XFire + Celtrix)
XFire (Web Service框架)
Celtrix (ESB框架)
SOA (面向服务的架构)
Service1, Service2, Service3--所有组件都是“即插即用”的。
IBM提倡的SOA架构: 希望以“组装电脑”的方式来开发软件。
1.各种提供服务的组件。(Web Service)
2.企业服务总线(Enterprise Service Bus , ESB)
CXF号称是SOA框架
CXF (Apache)
CXF内置了一个Jetty Web服务器。
--------------------------------------------
使用CXF开发Web Service服务器端:
/****************************************
每个Web Service组件需要2个部分:接口和实现类。
*****************************************/
(1)开发一个Web Service业务接口。
该接口要用@WebService修饰。
(2) 开发一个Web Service实现类。
实现类也需要用@WebService修饰。
(3) 使用Endpoint类的静态方法来发布WebService
--------------------------------------------
使用CXF开发Web Service客户端:
(1) 调用CXF提供的wsdl2java工具,根据WSDL文档生成相应的Java代码。
WSDL - Web Service Definition Language
任何语言实现了Web Service, 都需要提供、并暴露WSDL文档。
(2) 找到wsdl2java所生成类中,一个继承了Service的类。
该类的实例可当成工厂来使用。
(3) 调用Service子类的实例的getXxxPort方法,返回远程Web Service的代理。
形参、返回值
1. 当形参、返回值的类型是String、基本数据类型时,CXF肯定可以轻松地处理。
2. 当形参、返回值类型是JavaBean式的复合类、List集合、数组等时
CXF也可以很好的的处理。
3. 还有一些像Map、非JavaBean式的复合类,CXF是处理不了的。
/***********************************
XML里的两个属性:
targetNamespace - 相当于Java语言里的package
xmlns - 相当于Java语言的import
import:u java.util.*;
import:s java.sql.*;
u:Date d = new u:Date();
************************************/
Web Service的三个技术基础:
1. WSDL Web Service Definition Language - Web Service定义语言。
2. SOAP Simple Object Access Protocol ,简单对象访问协议。
3. UDDI
一次Web Service的调用 -- 其实并不是方法调用,而是发送SOAP消息(即XML文档片段)。
对于sayHi操作来说,
传入消息是:
<sayHi>
<arg0>字符串</arg0>
<sayHi>
传出消息是:
<sayHiResponse>
<return>字符串</return>
</sayHiResponse>
对于getCatsByUser操作来说,
传入消息是:
<getCatsByUser>
<arg0>
<address>字符串</adress>
<id>整数值</id>
<name>字符串</name>
<pass>字符串</pass>
</arg0>
</getCatsByUser>
传出消息是:
<getCatsByUserResponse>
<return> --可能出现0~N次
<color>字符串</color>
<id>整数值</id>
<name>字符串</name>
</return>
</getCatsByUserResponse>
----------------------------------------
阅读wsdl文档个人小总结:
1.进入wsdl接口文档http://192.168.1.27:9999/fkjava?wsdl=HelloWorld.wsdl
+<wsdl:types>
+<wsdl:message name="sayHiResponse">
+<wsdl:message name="getCatsByUserResponse">
+<wsdl:message name="sayHi">
+<wsdl:message name="getCatsByUser">
+<wsdl:portType name="HelloWorld">
2.先展开portType,->找到operation(<wsdl:operation name="sayHi">)->input message(message="nsl:sayHi")
再展开对应的message->part element
再展开types->找到对应元素,通过对应元素的类型type,找到下面相应的复合类型complexType->展开就可以看到传入/传出消息的参数名/返回name,及返回类型type
----------------------------------------
通俗地说,WSDL文档描述了Web Service如下3个方面:
- WHAT :该Web Service包含“什么”操作。
- HOW :该Web Service的操作应该“怎样”调用?
- WHERE :该Web Service的服务地址。
/********************************
只要得到Web Service的WSDL文档
接下来程序就可以调用Web Service
********************************/
调用一次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开发中,如果遇到系统无法自动处理的类型,就需要程序员自行处理。
处理思路是:提供一个转换器,该转换器负责把CXF搞不定的类型,转换CXF搞得定的类型
(1) 使用@XmlJavaTypeAdapter修饰CXF无法自动处理的类型.
使用该Annotation时,通过value属性指定一个转换器。
(2) 实现自己的转换器。
实现转换器时,需要开发一个CXF搞得定的类型。
对于getAllCats操作来说,
传入消息是:
<getAllCats>
</getAllCats>
传出消息是:
<getAllCatsResponse>
<return>
<entries> -- 可出现0~N次
<key>字符串</key>
<value>
<color>字符串</color>
<id>整数值</id>
<name>字符串</name>
</value>
</entries>
</return>
</getAllCatsResponse>
相关文章推荐
- 使用CXF开发WebService服务器端接口学习笔记一
- CXF学习笔记(1)-HelloWorld!-发布webservice .
- WebService学习笔记-使用CXF发布Webservice
- CXF学习笔记(1)-HelloWorld!-发布webservice
- [转] WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单
- WebService学习笔记-CXF添加拦截器
- WebService笔记(第三弹:使用CXF开发WebService)
- 【笔记】WebService CXF与SSM整合,模拟实名认证功能
- WebService学习笔记-CXF支持的数据类型
- WebService学习笔记-使用CXF编写基于Spring的Webservice
- WebService学习笔记-CXF添加拦截器
- WebService学习笔记-CXF添加自定义拦截器
- webservice-cxf笔记
- iphone开发笔记四 webservice环境配置cxf使用
- webservice学习笔记 --- day03 CXF+Spring+REST
- WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单
- WebService学习笔记--CXF基础
- WebService学习笔记-使用CXF编写基于Spring的Webservice
- CXF学习笔记(3)-HelloWorld!-通过servlet发布webservice
- WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单