CXFWEBservice框架学习笔记.doc_第1页
CXFWEBservice框架学习笔记.doc_第2页
CXFWEBservice框架学习笔记.doc_第3页
CXFWEBservice框架学习笔记.doc_第4页
CXFWEBservice框架学习笔记.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/docs/index.html/注意,在非java-project中,例如在web-project中可能出现(activation.jar和mail.jar)与工程中的j2ee.jar以及myeclipse中d:myeclipse 5.5.1 gamyeclipseeclipsepluginscom.genuitec.eclipse.j2eedt.core_5.5.1datalibrarysetee_5的javaee.jar里面的同名包发生冲突,建议把j2ee.jar和javaee.jar中的同名包删除,或者直接使用j2ee.jar把eclipse自带的javaee.jar从工程中去除并加入相应的包1. wsdl2java生成客户端代码2. jaxb3. jax-ws4. ws-addressing5. ws-policy6. ws-security7. webservice 注释8. 拦截器wsdl2java生成客户端代码cxf支持代码生成1)java to wsdl 、2)wsdl to java 、3)xsd to wsdl 、4)wsdl to xml 5)wsdl to soap 、6)wsdl to service 如下:d:apache-cxf-2.2.5binwsdl2java -d d:/cxf-client -p example1.client :8080/ws/helloworld?wsdljaxb/group/10141/topic/12028cxf默认的数据绑定使用的jaxb,xfire使用aegis替代数据绑定就是把java对象转化为xml和把xml文件转化为java对象不管使用任何的xml解析代码库(dom4j等),对于xml只是一个解析工作而已,不能马上绑定到java 对象。对于对象,每次都需要set 或者get相应的属性,当然也可以使用map 来保存xml配置。 于是,一种新的处理方式用于对象和xml之间的映射就变得非常需要,还好sun提供了jaxb,一种很方便的方式来处理java对象和xml内容其中的xjc po.xsd能把xsd中定义的java结构转换为java类,这有点像xmlbeans的scompjax-ws//webservices/docs/2.0/tutorial/doc/index.htmljax-ws规范是一组xml web services的java api (官方:jax-rpc 2.0 renamed to jax-ws 2.0)在 jax-ws中,一个远程调用可以转换为一个基于xml的协议例如soap。在使用jax-ws过程中,开发者不需要编写任何生成和处理soap消息的代码。jax-ws的运行时实现会将这些api的调用转换成为对于soap消息。在服务器端,用户只需要通过java语言定义远程调用所需要实现的接口sei (service endpoint interface),并提供相关的实现,通过调用jax-ws的服务发布接口就可以将其发布为webservice接口。在客户端,用户可以通过jax-ws的api创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。通过web service所提供的互操作环境,我们可以用jax-ws轻松实现java平台与其他编程环境(.net等)的互操作。jax-ws与jax-rpc之间的关系sun最开始的web services的实现是jax-rpc 1.1 (jsr 101)。这个实现是基于java的rpc,并不完全支持schema规范,同时没有对binding和parsing定义标准的实现。jax-ws2.0 (jsr 224)是sun新的web services协议栈,是一个完全基于标准的实现。在binding层(xml2java对象),使用的是the java architecture for xml binding (jaxb, jsr 222),在parsing层,使用的是the streaming api for xml (stax, jsr 173),同时它还完全支持schema规范。1客户端开发者通过url得到wsdl文件(通过http访问可以得到http:/?wsdl)2客户端根据wsdl的描述,生成相关client接口代理方法,通过http post发送soap消息给服务器端。3服务器端listener接受到soap请求消息,对java来说,通常是一个servlet或者ejb。listener把消息转发给 dispatcher,有时候listener和dispatcher也可能是同一个类。dispatcher会把请求消息交给webservice的运行终端。4,这时候,服务器端会将http request转成服务器端的消息类型,形成javax.xml.ws.handler.messagecontext,并处理soap消息的头信息,如mustunderstand。5,如果在服务器端配置了handler,会调用handler的handlemessage方法,通常用handler来承储消息,解密或者保证消息到达的顺序。handler通过在handlerchain标注配置,handlers.xml文件内容为: wssoaphandler com.cxf.test.wssoaphandler wshandler com.cxf.test.wshandler 6,soap消息被反序列化为java对象,传到真正的实现业务的类。7,调用真正的业务方法,执行后利用jaxb注解序列化成soap返回消息。8,如果配置了handler,会调用handler的handlemessage方法。如果业务方法有异常抛出,把异常转为soap fault 消息。9,listener通过http把response返回给客户端。jax-ws的客户端调用分为proxy方式以及dispatch方式url wsdlurl = new url(file:/d:/ wsdl/prjcxfweb.wsdl);qname serviceqname = new qname(/, wscxfproviderservice);qname portqname = new qname(/, wscxfproviderport);service service = service.create(wsdlurl, serviceqname);wscxfprovider port = (wscxfprovider) service.getport(portqname, wscxfprovider.class);try system.out.println(port.testws(message);catch(soapfaultexception e) system.out.println(e.getfault().getfaultcode(); system.out.println(e.getfault().getfaultstring();1,用工具通过wsdl文件产生一个sei(service endpoint interface),一个java的interface,能够对应该web service提供的功能。这个interface的类名会对应到wsdl的porttype名称,方法会和operation对应,方法的参数会和message以及types对应。cxf和axis都提供这样的工具:wsdl2java。【上面的wscxfprovider就是sei】2,初始化service,指定wsdl url和service的qname,service的qname的前一部分是命名空间,后一部分是名称,与wsdl文件中的部分对应。然后通过getport得到一个实现了sei的实例,这个实例被叫做proxy。它的qname与 wsdl文件中的wsdl:port name=wscxfproviderport部分对应。3,通过sei调用web service,传给sei的参数是加上jaxb annotation的java类(简单类型和string不用标记)。4,传入的参数被序列化为soap消息的payload(body部分的xml),这是因为service.getport是通过proxy机制创建的,调用这个proxy的方法时,和它关联的invocationhandler的invoke方法也会执行,invoke方法会通过jaxb把java参数序列化为xml。然后会把soap request发到服务器端。5,返回response是后与4类似,invocationhandler负责把xml利用jaxb反序列化为java对象。上面是proxyws-addressing具体而言,ws-addressing为同步和/或异步传输的soap消息提供了一套统一的寻址方式,而且,它还提供了一些寻址特性来帮助web服务的开发人员围绕多样性的消息交换模式不仅仅只是请求/响应的简单交换模式来构建新的应用ws-policy/developerworks/cn/webservices/ws-policy.html(ws-policy) 规范为服务请求者和服务提供者定义了语法和语义来描述他们的需求、首选项和性能如:安全、隐私 、应用程序优先权 、用户帐户优先权 、传输控制ws-security/developerworks/cn/webservices/ws-secure/构建安全的 web 服务以实现完整性和机密性时使用,它被设计成用来构建多种安全性模型(包括 pki、kerberos 和 ssl)的基础。ws-security 特别为多安全性令牌、多信任域、多签名格式和多加密技术提供支持。本规范提供了三种主要的机制:安全性令牌传播、消息完整性和消息机密性。这些机制本身并不提供完整的安全性解决方案。相反,ws-security 是一种构件,它可以与其它 web 服务扩展和更高级的特定于应用程序的协议联合使用,以适应多种安全性模型和加密技术。这些机制可以独立使用(例如传送安全性令牌),或以紧密集成的方式使用(例如,对消息签名和加密,并提供与用于签名和加密的密钥相关的安全性令牌层次结构)。javax.jws包webservice注释webservicepublic interface webservicesample string say(string hello); webresult(name = user)string sayusername(webparam(name = user) userdto user); webresult(name = req) respbean action(webparam(name = req)reqbean req);1)webservice,将接口中的所有方法输出为web service,说明类继承了a web service,或者说明该接口为web service 接口endpointinterface 属性,一般都作用于接口的实现类上,且其值就是该实现类的接口的全路径。name 属性用来指定 webservice的name,对应于的name属性2)webresult自定义返回值将其mapping到wsdl和xml-wsdl:part3)webparam自定义返回值将其mapping到message part和xml-wsdl:messagewebparam注解ws服务的行为的参数信息header=true表示信息是否添加到soap的header中4)webmethodonewayonly an input message and no output拦截器参考:jax-ws中的javax.xml.ws.handler.handler是个消息拦截器,能够在你的webserver前后进行处理handler分为logicalmessage:其方法getpayload(),以 xml 源的形式获取消息负载,可以在相同的 logicalmessage 实例上多次调用,总是返回可以用来检索整个消息负载的新的 source1. interceptor一个处理消息 handlemessage, 一个是处理错误 handlefault,提醒注意的是,在实行具体的interceptor的这两个方法中,千万别调用interceptor内部的成员变量。这是由于interceptor是面向消息来进行处理的,每个interceptor都有可能运行在不同的线程中,如果调用了interceptor中的内部成员变量,就有在interceptor中造成临界资源的访问的情况,而这时的interceptor也就不是线程安全的interceptor了。2. interceptorchain单个的interceptor功能有限,cxf要实现一个soap消息处理,需要将许许多多的interceptor组合在一起使用。因此设计了 interceptorchain,在我看了interceptorchain就像是一个interceptor的小队长有调配安置interceptor的权力(add,remove),控制消息处理的权力(dointerceptor,pause,resume,reset,abort),有交付错误处理的权力( get|setfaultobserver)。更有意思的是为灵活控制interceptor的处理消息顺序(dointerceptstartingat,dointerceptorstarti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论