CXF WEB service 框架学习笔记.doc

上传人:laozhun 文档编号:2396992 上传时间:2023-02-17 格式:DOC 页数:7 大小:155KB
返回 下载 相关 举报
CXF WEB service 框架学习笔记.doc_第1页
第1页 / 共7页
CXF WEB service 框架学习笔记.doc_第2页
第2页 / 共7页
CXF WEB service 框架学习笔记.doc_第3页
第3页 / 共7页
CXF WEB service 框架学习笔记.doc_第4页
第4页 / 共7页
CXF WEB service 框架学习笔记.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《CXF WEB service 框架学习笔记.doc》由会员分享,可在线阅读,更多相关《CXF WEB service 框架学习笔记.doc(7页珍藏版)》请在三一办公上搜索。

1、http:/cxf.apache.org/docs/index.htmlhttp:/cxf.apache.org/注意,在非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中的同名包删除,或者直接

2、使用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

3、d:/cxf-client -p example1.client http:/127.0.0.1:8080/ws/HelloWorld?wsdlJAXBCXF默认的数据绑定使用的JAXB,XFIRE使用Aegis替代数据绑定就是把java对象转化为xml和把xml文件转化为java对象不管使用任何的XML解析代码库(dom4j等),对于xml只是一个解析工作而已,不能马上绑定到java 对象。对于对象,每次都需要set 或者get相应的属性,当然也可以使用map 来保存xml配置。 于是,一种新的处理方式用于对象和xml之间的映射就变得非常需要,还好sun提供了jaxb,一种很方便的方式来处理

4、java对象和xml内容其中的xjc po.xsd能把xsd中定义的java结构转换为java类,这有点像xmlbeans的scompJAX-WShttps:/jax-JAX-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语言定义远程调用所需要实现

5、的接口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规范,同时

6、没有对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的描述,生成相关clie

7、nt接口代理方法,通过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,

8、会调用handler的handleMessage方法,通常用handler来承储消息,解密或者保证消息到达的顺序。handler通过在HandlerChain标注配置,handlers.xml文件内容为:handler-chains xmlns= WSSOAPHandler com.cxf.test.WSSOAPHandler WSHandler com.cxf.test.WSHandler 6,SOAP消息被反序列化为JAVA对象,传到真正的实现业务的类。7,调用真正的业务方法,执行后利用JAXB注解序列化成SOAP返回消息。8,如果配置了handler,会调用handler的handleM

9、essage方法。如果业务方法有异常抛出,把异常转为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

10、, 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 e

11、ndpoint 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的实例,这个实例被叫做Pr

12、oxy。它的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发到服

13、务器端。5,返回response是后与4类似,InvocationHandler负责把XML利用JAXB反序列化为java对象。上面是ProxyWS-Addressing具体而言,WS-Addressing为同步和/或异步传输的SOAP消息提供了一套统一的寻址方式,而且,它还提供了一些寻址特性来帮助Web服务的开发人员围绕多样性的消息交换模式不仅仅只是请求/响应的简单交换模式来构建新的应用WS-Policy(WS-Policy) 规范为服务请求者和服务提供者定义了语法和语义来描述他们的需求、首选项和性能如:安全、隐私 、应用程序优先权 、用户帐户优先权 、传输控制WS-Security构建安全

14、的 Web 服务以实现完整性和机密性时使用,它被设计成用来构建多种安全性模型(包括 PKI、Kerberos 和 SSL)的基础。WS-Security 特别为多安全性令牌、多信任域、多签名格式和多加密技术提供支持。本规范提供了三种主要的机制:安全性令牌传播、消息完整性和消息机密性。这些机制本身并不提供完整的安全性解决方案。相反,WS-Security 是一种构件,它可以与其它 Web 服务扩展和更高级的特定于应用程序的协议联合使用,以适应多种安全性模型和加密技术。这些机制可以独立使用(例如传送安全性令牌),或以紧密集成的方式使用(例如,对消息签名和加密,并提供与用于签名和加密的密钥相关的安全

15、性令牌层次结构)。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 S

16、ERVICE,或者说明该接口为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 in

17、put message and no output拦截器参考:jax-ws中的javax.xml.ws.handler.Handler是个消息拦截器,能够在你的webserver前后进行处理Handler分为LogicalMessage:其方法getPayload(),以 XML 源的形式获取消息负载,可以在相同的 LogicalMessage 实例上多次调用,总是返回可以用来检索整个消息负载的新的 Source1. Interceptor一个处理消息 handleMessage, 一个是处理错误 handleFault,提醒注意的是,在实行具体的Interceptor的这两个方法中,千万别调

18、用Interceptor内部的成员变量。这是由于Interceptor是面向消息来进行处理的,每个Interceptor都有可能运行在不同的线程中,如果调用了Interceptor中的内部成员变量,就有在Interceptor中造成临界资源的访问的情况,而这时的Interceptor也就不是线程安全的Interceptor了。2. InterceptorChain单个的Interceptor功能有限,CXF要实现一个SOAP消息处理,需要将许许多多的Interceptor组合在一起使用。因此设计了 InterceptorChain,在我看了InterceptorChain就像是一个Interc

19、eptor的小队长有调配安置Interceptor的权力(add,remove),控制消息处理的权力(doInterceptor,pause,resume,reset,abort),有交付错误处理的权力( get|setFaultObserver)。更有意思的是为灵活控制Interceptor的处理消息顺序(doInterceptStartingAt,doInterceptorStartingAfter),这也是InterceptorChain比较难理解的地方。3. Message由于Interceptor是针对Message来进行处理的,当你打开Message这个类文件时,你会发现在Mess

20、age中定义了很多常量,同时你还可以从Message中获取到很多与Message操作相关的信息。可以获取设置的对象有InterceptorChain Exchange Destination,还有获取设置Content的泛型接口,是不是感觉Message和Bus差不多,都成了大杂货铺4. Exchange和Message打交道就离不开Exchange。Exchange建立In/Out,InFault/OutFault Message 之间的联系,你可以从Exchange中获取到与消息传输相关的Conduit,Destination的信息,同时也可以设置和Session相关的其他信息,以及知道是否是OneWay的消息。5. AbstractFeature为了简化配置Interceptor的复杂操作,在这里设置了AbstractFeature,通过Feature我们可以向Bus,Client,Endpoint配置不同功能的Interceptor组。这样可以极大减轻我们配置文件的体积。 org.apache.cxf.jaxws.EndpointImpl(Busbus,java.lang.Objectimplementor)包含org.apache.cxf.bus.BusFactory

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号