webservice笔记
发布时间:2020-12-16 23:09:00 所属栏目:安全 来源:网络整理
导读:Web Service(不是框架,更甚至不是一种技术,而是一种跨平台、跨语言的规范) 为了解决这样的需求场景: 不同的平台,不同语言编写的应用之间如何相互调用? 通俗点:假如java里有如下方法 public ListCat getCatsByUser(User user) 要求是,有一个c语言写的
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 Service2Service3 --所有组件都是"即插即用"的 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的另一种整合 ?? ??
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |