/**
**QQ:252574345
**MSN:[email protected]
*/
使用CXF Simple FrontEnd Project,不需要在業務接口中設置具體的協議、@Web Service、@Web Method,僅僅需要創建與具體webservice技術無關的業務接口就可以了(真有點像SCA了,呵呵不恰當的對比)。利用代理類進行發佈服務和獲取服務
(工程文件附後下載)
1。業務接口
package demo.zhaoyl.server;
/**
* 業務接口
* 與wsdl first project 、java first project方式不同的是
* 這個業務接口僅僅是普通的java interface
* @author zhaoyl
*
*/
public interface HelloWorld
{
String sayHi(String name);
}
2。業務接口實現類
package demo.zhaoyl.server;
/**
* 業務接口實現類
* @author zhaoyl
*
*/
public class HelloWorldImpl implements HelloWorld {
/**
* 向客戶端返回一個名字
*/
public String sayHi(String name) {
return "Hello " + name;
}
}
3。服務端
package demo.zhaoyl.server;
import org.apache.cxf.frontend.ServerFactoryBean;
/**
* 服務端
* @author zhaoyl
*
*/
public class Server {
protected Server() throws Exception
{
HelloWorldImpl helloworldImpl = new HelloWorldImpl();
ServerFactoryBean svrFactory = new ServerFactoryBean();
//設置服務接口類
svrFactory.setServiceClass(HelloWorld.class);
//address 也就是wsdl文件中的 <soap:address location="http://localhost:9000/Hello" />
svrFactory.setAddress("http://localhost:9000/Hello");
//在瀏覽器端通過http://localhost:9000/Hello?wsdl訪問生成的wsdl文件
//設置服務實現接口類
svrFactory.setServiceBean(helloworldImpl);
//創建服務
svrFactory.create();
}
public static void main(String args[]) throws Exception {
new Server();
System.out.println("Server ready...");
Thread.sleep(5 * 60 * 1000);
System.out.println("Server exiting");
System.exit(0);
}
}
4。服務端
package demo.zhaoyl.client;
import demo.zhaoyl.server.HelloWorld;
import org.apache.cxf.frontend.ClientProxyFactoryBean;
/**
* 客戶端
* 僅僅需要一個與具體技術無關的java接口HelloWorld
* @author zhaoyl
*
*/
public final class Client {
private Client()
{
}
public static void main(String args[]) throws Exception
{
ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
//設置已發佈服務接口
factory.setServiceClass(HelloWorld.class);
//爲客戶端代理bean 設置已經發布的服務地址
factory.setAddress("http://localhost:9000/Hello");
//獲取已發佈服務接口實例
HelloWorld client = (HelloWorld)factory.create();
System.out.println("Invoke 遠程服務接口方法sayHi()....");
//返回客戶機器用戶名稱
System.out.println(client.sayHi(System.getProperty("user.name")));
System.exit(0);
}
}
啓動服務
運行客戶端
結果:
Invoke 遠程服務接口方法sayHi()....
Hello zhaoyl