2种实现CXF方法例子
?
?
?
下面所作的小例子都用到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!