webservice笔记

Web Service(不是框架,更甚至不是一种技术,而是一种跨平台、跨语言的规范)
为了解决这样的需求场景:
不同的平台,不同语言编写的应用之间如何相互调用?
通俗点:假如java里有如下方法
public List<Cat> getCatsByUser(User user)
要求是,有一个c语言写的程序,它想去调用上面的getCatsByUser方法

Web Service集中解决
- 远程调用
- 跨平台调用
- 跨语言调用

Web Service实际中用途
1、同一个公司的新、旧系统的整合
Linux上的java应用,去调用windows平台的Delphi应用
2、不同公司的业务整合
业务的整合就要带来,不同公司的系统整合
不同公司的系统可能存在平台不同,语言不同的问题。
3、内容聚合
一个应用需要提供,天气预报,股票行情、黄金行情、编程语言行情......
这个内容聚合的应用,需要调用大量不同平台、不同语言编写的应用的方法。

CXF  getWeather
Axis  --> Axis2
XFire --> CXF(XFire + Celtrix)
XFire(WebService框架)  Celtrix(ESB框架)
CXF内置了一个Jetty Web服务器

SOA(面向服务的架构)
Service1 Service2 Service3 --所有组件都是"即插即用"的
IBM提倡的SOA架构,希望以"组装电脑"的方式来开发软件

1、各种提供服务的组件(WebService)
2、企业服务总(Enterprise Service Bus , ESB)


使用CXF开发 Web Service服务器端
每个WebService组件都需要两部分,接口和实现类
(1)开发一个WebService业务接口,该接口要用@WebService注解修饰
(2)开发一个WebService实现类,实现类也需要@WebService注解修饰
(3)发布WebService

使用CXF开发Web Service客户端
(1)调用CXF提供的wsdl2java工具,根据WSDL文档生成相应的java代码。
WSDL- Web Service Definition Language
任何语言实现了WebService,都需要提供并暴露WSDL文档
(2)找到wsdl2java所生成类中,一个继承了Service的类,该类的实例可当成工厂来使用
(3)调用Service子类的实例的getXxxPort方法,返回远程WebService的代理

形参、返回值
1、当形参、返回值的类型是String、基本数据类型时,CXF肯定可以轻松地处理
2、当形参、返回值类型是JavaBean式的复合类,List集合,数组等时,CXF也可以很好的处理
3、还有一些像Map、飞javabean式的复合类,CXF是处理不了的

-----------------------------------------------------------------------------
XML里的两个属性
targetNamespace  相当于java语言里面的pack
xmlns 相当于java语言里面的import


-----------------------------------------------------------------------------------
WSDL
targeNamespace 对应接口部分的包名倒着写

------------------------------------------------------------------------------------
一个Webservice需要2n(n代表方法的个数)消息,(一个送出去的消息,一个返回来的消息)
------------------------------------------------------------------------------
一次WebService的调用 -- 其实并不是方法调用,而是发送SOAP消息(即XML文档片段)
对于sayHi操作来说
传入消息是:
<sayHi>
<arg0>字符串</arg0>
</sayHi>
传出的消息是:
<sayHiResponse>
<return>字符串</return>
</sayHiResponse
对于getCatsByUser操作来说


通俗的说:WSDL文档描述了WebService如下3方面
what:该Webservice 包含"什么操作"
how:该WebService的操作应该"怎样调用"
where:该webservice的服务地址
-------------------------------------------------------
只要得到webservice的wsdl文档,接下来程序就可以调用webservice
------------------------------------------------------




一个元素里面能够出现哪些内容,由他的type来决定

调用一次WebService的本质:
dom4j解析XML文档
1、客户端把调用方法的参数,转化为XML文档片段(SOAP消息),该文档片段必须符合WSDL定义的格式
2、客户端通过网络把XML文档片 段传给服务器
3、服务器接收到XML文档片段
4、服务器解析XML文档片段,提取其中的数据,并把数据转换为调用Webservice所需的数据(或者参数)
5、服务器端执行方法
6、把执行方法得到的返回值,再次转换生成为XML文档片段(SOAP消息,output消息),该文档片段必须符合WSDL定义的格式
7、通过网络在把XML文档片段传给客户端
8、客户端接收到XML文档片段
9、客户端解析XML文档片段,提取其中的数据,并把数据转换为调用 webservice的返回值

从上面的调用本质来看,要一个语言支持webservice
唯一的要求是:该语言支持XML文档解析、生成、支持网络传输


客户端所需要做的就是:发送XML文档和接收XML文档,并解析出来
-------------------------------------------------------------------------
在CXF开发中,如果遇到CXF无法处理的类型,就需要程序员自行处理
处理思路:提供一个转换器,该转换器负责把CXF搞不定的类型,转换为CXF搞的定的类型
(1)使用@XmlJavaTypeAdapter注解修饰CXF无法处理的类型,使用
  该Annotation时,通过value属性指定一个转换器
(2)实现自己的转换器。
实现转换器时,需要开发一个CXF搞的定的类型
  
  
-------------------------------------------------------------------
CXF与Spring的整合
可以在传统的javaEE用用的基础上,添加一层WebService层
我们的javaEE应用就可以对外暴露成WebService
这样就允许任何平台,任何语言编写的程序来调用这个javaEE应用

在传统的SSH项目中增加Webservice的步骤
1、复制CXF的jar包(最核心的6个)
2、在web.xml配置cxf的核心控制器:CXFServlet
3、在Spring配置文件中导入CXF提供的schema,XML配置文件
4、在Spring配置文件中使用jaxws:endpoint元素来暴露webservice
5、如果要添加拦截器,在jaxws:endpoint元素里添加inInterceptors、outInterceptors


CXF与Spring的另一种整合

  
  




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值