CXF实现WebService(完整源码可运行)

首先我们需要新建一个maven项目,在pom中添加依赖和jetty作为测试的web service的web容器。

如下是测试用到的pom文件内容:

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  4.0.0
  cn.outofmemory
  hello-apache-cxf
  war
  0.0.1-SNAPSHOT
  hello-apache-cxf Maven Webapp
  http://maven.apache.org
     
        2.2.7  
   
 


     
         
            org.apache.cxf  
            cxf-rt-frontend-jaxws  
            ${cxf.version}  
       
 
         
            org.apache.cxf  
            cxf-rt-transports-http  
            ${cxf.version}  
       
 
         
            org.apache.cxf  
            cxf-rt-transports-http-jetty  
            ${cxf.version}  
       
 
         
            org.apache.cxf  
            cxf-rt-ws-security  
            ${cxf.version}  
       
 
         
            org.apache.cxf  
            cxf-rt-ws-policy  
            ${cxf.version}  
       
 
         
            org.apache.cxf  
            cxf-bundle-jaxrs  
            ${cxf.version}  
       
 
         
            javax.ws.rs  
            jsr311-api  
            1.1.1  
       
 
         
            org.slf4j  
            slf4j-api  
            1.5.8  
       
 
         
            org.slf4j  
            slf4j-jdk14  
            1.5.8  
       
 
         
            commons-httpclient  
            commons-httpclient  
            3.0  
       
 
         
            commons-io  
            commons-io  
            2.3  
       
 
         
            junit  
            junit  
            4.8.1  
            test  
       
 
 



  
          compile 
        hello-apache-cxf  
         
             
                src/main/resources  
           
 
             
                src/main/java  
                 
                    **  
               
 
                 
                    **/*.java  
               
 
           
 
       
 
         
             
                org.apache.maven.plugins  
                maven-compiler-plugin  
                2.3.2
                 
                    1.5  
                    1.5  
               
 
           
 

    org.mortbay.jetty  
    maven-jetty-plugin  
    6.0.0  
  
       
 
   
 

然后需要定义web service接口,在接口定义中要添加必要的annotation注解来标注出来webservice接口和提供的方法,以及参数等,如下接口文件:

package cn.outofmemory.hello_apache_cxf;


import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;


@WebService
public interface HelloService {


    @WebMethod
    @WebResult String hello(@WebParam String who);


}

定义完接口之后需要实现接口,接口实现代码如下:

package cn.outofmemory.hello_apache_cxf;
public class SimpleHelloService implements HelloService {



    public String hello(String who) {
        return "hello " + who;
    }


}

这个实现类不需要做任何的标注。

这样webservice的实现部分就算完了,我们需要在web容器中运行web service,如下Server代码:

package cn.outofmemory.hello_apache_cxf;


import org.apache.cxf.jaxws.JaxWsServerFactoryBean;


public class Server {


    public static void main(String[] args) throws Exception {
        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();  
        factory.setServiceClass(SimpleHelloService.class);  


        factory.setAddress("http://localhost:8080/ws/HelloService");  
        factory.create();  


        System.out.println("Server start...");  
    }
}

可以运行这个类,然后在浏览器中访问:http://localhost:8080/ws/HelloService。

可以让Server端保持启动状态,下面我们写Client端来调用server端的webservice,如下client端代码:

package cn.outofmemory.hello_apache_cxf;


import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;


public class ServiceClient {
    public static void main(String[] args) {  
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();  
        factory.setServiceClass(HelloService.class);  
        factory.setAddress("http://localhost:8080/ws/HelloService");  
        HelloService helloworld = (HelloService) factory.create();  
        System.out.println(helloworld.hello("outofmemory.cn"));  
        System.exit(0);  
    }  
}

运行client,可以得到hello outofmemory.cn的输出。

源码,http://download.csdn.net/download/binyulong/10152842

你可能感兴趣的:(java)