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