欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    CXF WEB service 框架学习笔记 .doc

    • 资源ID:2396988       资源大小:114KB        全文页数:7页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    CXF WEB service 框架学习笔记 .doc

    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中的同名包删除,或者直接使用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.5bin>wsdl2java -d 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,一种很方便的方式来处理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语言定义远程调用所需要实现的接口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:/<endpoint-address>?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文件内容为:<handler-chains xmlns=" <handler-chain>  <handler>   <handler-name>WSSOAPHandler</handler-name>   <handler-class>com.cxf.test.WSSOAPHandler</handler-class>  </handler> </handler-chain> <handler-chain>        <handler>            <handler-name>WSHandler</handler-name>            <handler-class>com.cxf.test.WSHandler</handler-class>        </handler>    </handler-chain></handler-chains> 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文件中的<wsdl:service name="WSCXFProviderService">部分对应。然后通过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(WS-Policy) 规范为服务请求者和服务提供者定义了语法和语义来描述他们的需求、首选项和性能如:安全、隐私 、应用程序优先权 、用户帐户优先权 、传输控制WS-Security构建安全的 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,对应于<wsdl:definitions>的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,doInterceptorStartingAfter),这也是InterceptorChain比较难理解的地方。3. Message由于Interceptor是针对Message来进行处理的,当你打开Message这个类文件时,你会发现在Message中定义了很多常量,同时你还可以从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组。这样可以极大减轻我们配置文件的体积。 <jaxws:endpoint id=”UserService” implementor=”com.UserServiceImpl” address=”/Users”> </jaxws:endpoint>org.apache.cxf.jaxws.EndpointImpl(Bus bus,java.lang.Object implementor) 包含<jaxws:inInterceptors><jaxws:features><jaxws:serviceFactory><jaxws:handlers> org.apache.cxf.bus.BusFactory

    注意事项

    本文(CXF WEB service 框架学习笔记 .doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开