CXF框架webservice教程.doc_第1页
CXF框架webservice教程.doc_第2页
CXF框架webservice教程.doc_第3页
CXF框架webservice教程.doc_第4页
CXF框架webservice教程.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

CXF框架实现webservice教程1 使用CXF实现一个简单的WEB SERVICE首先介绍如何用CXF实现一个基本的hello world首先到apache官网去下载CXF的开发jar包/cxf/2.4.3/apache-cxf-2.4.3.zip创建cxf webservice服务器端普通java项目,叫做HelloCxfServer,把必须用到的jar文件通过构建路径引入,为了省事,可以直接把所有的jar引入此处注意:如果是jdk1.6启动服务器会发生如下错误JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/E:/javaLib/cxf_all_jar/jaxb-impl-.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.2 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader.这是由于jdk1.6的jar包和cxf的jar包冲突造成的,需要把cxf lib中的endorsed目录拷入到D:Program FilesJavajdk1.6.0jrelib目录下创建一个接口HelloWorld和一个实现类HelloWorldImpl,只提供一个成员方法,叫做sayHello,给接口和实现类添加注解WebService,这是最基本的注解/test/HellWorld.java源码package test;import javax.jws.WebService;WebServicepublic interface HelloWorld String sayHello(String name);/test/HelloWorldImpl.java源码package test;import javax.jws.WebService;WebServicepublic class HelloWorldImpl implements HelloWorld Overridepublic String sayHello(String name) System.out.println(sayHello方法被调用.);return hello, + name;CXF自带了一个Web Service容器Jetty,这是一个WEB容器,类似于tomcat,能够直接发布web service,下面创建一个发布服务类MainServer,执行这个类就会运行服务器,看到控制台输出日志信息,表示启动服务成功/test/MainServier.java源码package test;import org.apache.cxf.endpoint.Server;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;public class MainServer public static void main(String args) /创建一个JaxWs服务器工厂JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();/设置发布类factory.setServiceClass(HelloWorldImpl.class);/设置服务发布的地址factory.setAddress(http:/localhost:6666/MyCxfService);/根据设置创建一个服务器Server server = factory.create();/启动服务器server.start(); 发布成功以后,可以通过浏览器去查看生成的WSDL,在浏览器地址栏输入http:/localhost:6666/MyCxfService?wsdl,效果如下:下面创建访问WebService的客户端,可以重新创建一个项目,也可以就在这个项目里实现,我下面在同一个项目中创建一个类HelloWorldCient/test/HelloWorldClient.java源码package test;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;import org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean;public class HelloWorldClient public static void main(String args) /创建一个JaxWs的代理工厂JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();/设置访问地址factory.setAddress(http:/localhost:6666/MyCxfService);/设置接口类型factory.setServiceClass(HelloWorld.class);/获得代理类实例HelloWorld helloWorld = (HelloWorld) factory.create();/调用方法String str = helloWorld.sayHello(张三);System.out.println(str);运行客户端,会看到控制台,输出:hello,张三2 WSDL结构分析主要通过上一章生成的WSDL,来对WSDL语言的标签进行解释Web Services Description Language的缩写,是一个用来描述Web服务和说明如何与Web服务通信的XML语言。为用户提供详细的接口说明书。查看刚才生成的WSDL,可以分析出以下的知识点:wsdl:definitions:根标签属性name=HelloWorldImplService:服务名称设置,HelloWorldImplService系统自动按照类名生成的,当然这个名字可以通过注解设置进行自定义属性targetNamespace=http:/test/ :名称空间设置,默认会用反写包名作为名称空间,例如,包名是com.icss.test,那么名称空间就是/,通过注解设置也可以自定义wsdl:types元素: 使用某种语法(如 XML 模式)的数据类型定义(string、int),描述了接口中方法的参数(输入参数)和返回值(输出参数)名称和类型可以通过注解来给输入参数的名字和输出参数的名字进行自定义,默认是输出参数是return和第一个输入参数是arg0,被修改为sayHelloResult和nameWebServicepublic interface HelloWorld WebResult(name=sayHelloResult)String sayHello(WebParam(name=name)String name);wsdl:message元素:描述要传递的数据,web service是把请求和响应都包装成一个message来传递,客户端把请求封装成message传递给服务器,而服务器把响应封装成message发送回客户端part元素:消息参数wsdl:portType/ Interface元素:一个或多个端点支持的操作的抽象集。此名称已更改,因此可能会遇到两者中的任何一个。这个元素其实就是对应我们的接口。接口中的每一个方法被映射为一个Operation元素wsdl:binding元素:特定端口类型的具体协议和数据格式规范,设置协议,一般都是soap协议wsdl:service元素:一个接口就是一个portType,如果我们有很多接口,那么就组成一个service,包含很多访问地址3 WebService工作原理以及SOAP简介Webservice工作原理大致流程:客户端向服务器端发出一个GET请求,然后响应的就是WSDL,告诉客户端有哪些暴露的接口功能可以调用。Webservice提供一个工具类,叫做WSDL2Java,可以根据WSDL生成一系列的代理类。当客户端得到WSDL之后,就会向服务器端发出一个SOAP请求,这个SOAP请求就是一段XML,然后服务器端接收到SOAP请求,再对这个请求进行解析,然后再把请求的结果返回客户端。客户端服务器端GET请求WSDLSOAP请求SOAP响应在服务器端代码加入两个日志拦截器,可以看到每次请求和响应的日志信息,代码如下/设置服务发布的地址factory.setAddress(http:/localhost:6666/MyCxfService);/加入一个接收请求日志拦截器factory.getInInterceptors().add(new LoggingInInterceptor();/加入一个返回响应日志拦截器factory.getOutInterceptors().add(new LoggingOutInterceptor();/根据设置创建一个服务器Server server = factory.create();4 JAX-WSJAX-WS规范是一组SUN公司提供的XML web services的标准JAVA API,主要提供两个包的类,分别是javax.jws和javax.jws.soap,例如WebService就是这两个包中的注解通过CXF下载包中bin目录中的wadl2java命令可以把一个wsdl文档转换为对应的java文件,这个就不掩饰了5 JAXBJAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。主要功能就是把一个java对象映射成一段XML,也可以反向把一段XML映射为一个java文件通过JAXB的一些注解可以对把一个java bean类转换为XML进行具体设置,例如哪些属性不转换啦,哪些方法做转换啦,等等6 Spring和CXF整合可用通过Spring来发布CXF的web serivce,但是这样就需要用到tomcat服务器,这样也会出现jar包冲突异常。解决办法就是通过执行system.out.println(System.getProperty(java.endorsed.dirs);找到相应位置,将jaxb-api-2.1.jar和jaxb-impl-2.1.12.jar放到对应目录下即可。没有endorsed目录,自己建一个。 我的WEB项目中,打印出来的路径是:D:Tomcat 6.0/common/endorsed,我直接把CXF包中的lib目录中的endorsed目录拷贝到D:Tomcat 6.0/common中就好用了,没有common目录自己创建一个具体搭配环境步骤:1、 创建项目CxfSpring,通过myeclipse引入Spring核心jar包和cxf的jar包2、 创建包中的接口和类,分别加上WebService注解com.cwj.test.Ihelloworld.java源码package com.cwj.test;import javax.jws.WebService;WebServicepublic interface IHelloWorld String sayHello(String name);com.cwj.test.HelloWorldImpl.java源码package com.cwj.test;import javax.jws.WebService;WebServicepublic class HelloWorldImpl implements IHelloWorld Overridepublic String sayHello(String name) System.out.println(sayHello方法被调用.);return 你好, + name;3、 在WEB-INF目录下(或者是在src下)创建一个beans.xml配置文件,在这个配置文件中配置端点beans文件名其实是自定义的,源码如下:!- -如果是用配置端点方式2,那么就需要在的spring配置文件中定义bean类,其实这两个配置文件可以写成一个,也可以写成多个,不管几个文件反正都需要在web.xm文件中引用applicationContext.xml配置文件源码 4、 在web.xml文件中配置初始化spring容器和cxf的核心servletweb.xml源码contextConfigLocationclasspath:applicationContext.xml,WEB-INF/beans.xmlorg.springframework.web.context.ContextLoaderListenerCXFServletorg.apache.cxf.transport.servlet.CXFServlet1CXFServlet/service/*index.jsp这时候打开浏览器输入http:/localhost:7777/CxfSpring/service,访问service根目录,可以看到service信息列表点击service链接,可以看到service的wsdl下面创建一个客户端项目CxfSpringClient,引入spring核心jar包和cxf所有jar包,利用spring去访问webservice1、 创建com.c

温馨提示

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

评论

0/150

提交评论