现实CXF的2种方法
大家好,今天我要介绍的现实 webservice 的一种技术—— CXF 由于本人是一个菜鸟,所以下面所做的都是一些简单的小例子!希望能帮到有需要的同学!好了,废话就不多说了,直接进入正题! 开发环境: myeclipse8.5 + tomcat6.0 + jdk1.6 CXF 版本: apache-cxf-2.3.5.zip (在这里介绍一个下载包的网址给大家: http://www.jar114.com ) 把 apache-cxf-2.3.5.zip 解压出来后,如下图所示目录:(不做解析了)
?
下面所作的小例子都用到 lib 文件夹下面的包(不介意的话就全部加进项目里)! ? 新建一 web 项目,名称叫 HelloWorldCXF 建一包: com.cxf.dao ,在该包下新建一接口,命名为: HelloWorld ,代码如下: ? package com.cxf.dao; ? import javax.jws.WebService; ? @WebService public interface HelloWorld { ?? ?? public String sayHello(String username);?? ??? } ? 建一包: com.cxf.service ,在该包下新建一个类,命名为: HelloWorldImpl ,代码如下: ? package com.cxf.service; ? import javax.jws.WebService; ? import com.cxf.dao.HelloWorld; @WebService public class HelloWorldImpl? implements HelloWorld { ? ?????? public String sayHello(String username) { ??? System.out.println("say hello is called!"); ?????? return "Hello" + username; ?????? ?????? } ? } ? 新建一测试包: com.cxf.action ,在该包下建一个类,类名为: HelloTest ,代码如下: ? package com.cxf.action; ? import org.apache.cxf.endpoint.Server; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; ? import com.cxf.service.HelloWorldImpl; ? ? public class HelloTest { ? ??? public static void main(String[] args) { ? ???? JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean(); ?????? // Web 服务的地址 ?????? factoryBean.setAddress("http://localhost:8081/hello"); ?????? // Web 服务对象调用接口 ?????? factoryBean.setServiceClass(HelloWorldImpl.class); ?????? Server server = factoryBean.create(); ?????? server.start(); ??? } ? } ? 执行代码后,在浏览器打开: http://localhost:8081/hello?wsdl 能如下显示的,证明服务器已经发布成功! ? ?
新建一 web 项目,名称叫 HelloWorldCXFClient 新建一个包,这个包的名称和服务器包的名称一样的: com.cxf.dao ,里面的接口和方法也必须和服务器的一样: ? package com.cxf.dao; ? import javax.jws.WebService; ? @WebService public interface Hello { ??? // 这里的接口方法必须跟服务器接口里面的方法一致 ??? ?? public String sayHello(String username);?? ??? } ? ? 新建一个测试类:代码如下 ? import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; ? import com.cxf.dao.Hello; ? public class ClientTest { ??? public static void main(String []trgs){ ?????? JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean(); ?????? // 获取服务器端 ?????? factoryBean.setAddress( "http://localhost:8081/hello" ); ?????? // 通过客户端的接口获取服务器端的接口 ?????? factoryBean.setServiceClass(Hello. class ); ?????? ?????? Hello hello =(Hello) factoryBean.create(); ?????? System. out .println(hello.sayHello( " 和谐 dota" )); ?????? ??? } ??? } ? 执行代码,控制台能打印出: Hello 和谐 dota ! 到这,一个完整的 CXF 小例子就完成了! ? 不知道大家有没有注意到,上面的接口和现实类都存在有一个标签: @WebService 这个标签的作用是:指明接口是Web 服务 ? 当然你也可以不用这个方式去实现,直接用手动的去进行指明也是可以的!!下面就是用手动这种方式现实功能的,希望大家能找出这2 个方法的不同之处! ? ? ? 新建一 web 项目,名称叫 HelloWorldCXF 建一包: com.cxf.dao ,在该包下新建一接口,命名为: HelloWorld ,代码如下: ? package com.cxf.dao; ? import javax.jws.WebService; ? public interface HelloWorld { ?? ?? public String sayHello(String username);?? ??? } ? 建一包: com.cxf.service ,在该包下新建一个类,命名为: HelloWorldImpl ,代码如下: ? package com.cxf.service; ? import javax.jws.WebService; ? import com.cxf.dao.HelloWorld; ? public class HelloWorldImpl? implements HelloWorld { ? ?????? public String sayHello(String username) { ??? System.out.println("say hello is called!"); ?????? return "Hello" + username; ?????? ?????? } ? } ? 新建一测试包: com.cxf.action ,在该包下建一个类,类名为: HelloTest ,代码如下: ? package com.cxf.action; ? import org.apache.cxf.endpoint.Server; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; ? import com.cxf.service.HelloWorldImpl; ? ? public class HelloTest { ? ??? public static void main(String[] args) { ? ?????? // 发布服务器 ServerFactoryBean factoryBean = new ServerFactoryBean(); ?????? // 获取 Web 服务的地址 ?????? factoryBean.setAddress("http://localhost:8080/hello"); ?????? // Web 服务对象调用接口 ?????? factoryBean.setServiceClass(Hello.class); ?????? // Web 服务对象调用实现接口类 ?????? HelloImpl hello = new HelloImpl(); ?????? factoryBean.setServiceBean(hello); ?????? // 发布 web 服务器 ?????? factoryBean.create(); ??? } ? } ? 执行代码后,在浏览器打开: http://localhost:8081/hello?wsdl 能如下显示的,证明服务器已经发布成功! ? ?
新建一 web 项目,名称叫 HelloWorldCXFClient 新建一个包,这个包的名称和服务器包的名称一样的: com.cxf.dao ,里面的接口和方法也必须和服务器的一样: ? package com.cxf.dao; ? import javax.jws.WebService; ? public interface Hello { ??? // 这里的接口方法必须跟服务器接口里面的方法一致 ??? ?? public String sayHello(String username);?? ??? } ? ? 新建一个测试类:代码如下 ? import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; ? import com.cxf.dao.Hello; ? public class ClientTest { ??? public static void main(String []trgs){ ? // 客户端对象 ?????? ClientProxyFactoryBean factoryBean = new ClientProxyFactoryBean(); ?????? // 获取服务器端 ?????? factoryBean.setAddress("http://localhost:8080/hello"); ?????? // 通过客户端的接口获取服务器端的接口 ?????? factoryBean.setServiceClass(Hello.class); ?????? ?????? Hello hello ; ?????? hello =(Hello) factoryBean.create(); ?????? System. out .println(hello.sayHello( " 和谐 dota" )); ?????? ??? } ??? } ? 执行代码,控制台能打印出: Hello 和谐 dota ! ? 到这,就完成了现实 CXF 的 2 种不同方法!!接下来和大家一起完成 CXF 整合 Spring 的小例子! ? ? ? ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |