大家好,今天我要介紹的現實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

 

到這,就完成了現實CXF2種不同方法!!接下來和大家一起完成CXF整合Spring的小例子!