CXF入門

又一HelloWorld示例,老套的HelloWorld是入門經典。也是基礎和必須掌握的,下面看看HelloWorldWebService,很簡單。

需要的jar包如下:

image

1、 HelloWorldService服務器端代碼

package com.hoo.service;
 
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
 
/**
 * <b>function:</b>CXF WebService 服務器端helloWorld示例
 * @author hoojo
 * @createDate 2011-3-16 上午08:29:07
 * @file HelloWorld.java
 * @package com.hoo.service
 * @project CXFWebService
 * @blog http://blog.csdn.net/IBM_hoojo
 * @email [email protected]
 * @version 1.0
 */
@WebService
@SOAPBinding(style = Style.RPC)
public class HelloWorldService {
    
    public String sayHello(@WebParam(name = "name") String name) {
        return name + " say: Hello World ";
    }
}

要說明的是,上面的服務器端代碼運用了JDK5的新特性Annotation,這個非常好用。

需要注意的是,如果不添加@SOAPBinding(style = Style.RPC)註解,將會出現異常:

com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error	

還有就是如果jdk版本在1.6下,也會出現上面的異常。

解決辦法有:

1> 先用apt命令將主程序進行編譯,然後生成一些java文件

2> 升級JDK到版本jdk1.6u17或以後

2、 發佈HelloWorldService,代碼如下:

package com.hoo.service.deploy;

import javax.xml.ws.Endpoint;
import com.hoo.service.HelloWorldService;

/**
 * <b>function:</b> 發佈CXF WebService
 * @author hoojo
 * @createDate 2011-3-17 上午09:24:33
 * @file DeployHelloWorldService.java
 * @package com.hoo.deploy
 * @project CXFWebService
 * @blog http://blog.csdn.net/IBM_hoojo
 * @email [email protected]
 * @version 1.0
 */
public class DeployHelloWorldService {
	
	/**
	 * <b>function:</b>發佈WebService
	 * @author hoojo
	 */
	public static void deployService() {
		System.out.println("Server start ……");
		HelloWorldService service = new HelloWorldService();
		String address = "http://localhost:9000/helloWorld";
		Endpoint.publish(address, service);
	}
	
	public static void main(String[] args) throws InterruptedException {
		//發佈WebService
		deployService();
		System.out.println("server ready ……");
		Thread.sleep(1000 * 60);
		System.out.println("server exiting");
		//休眠60秒後就退出
		System.exit(0);
	}
}

運行上面的main函數後,如果沒有發現異常。基本信息是這樣的:

Server start ……
2011-3-17 10:17:25 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://service.hoo.com/}HelloWorldServiceService from class com.hoo.service.HelloWorldService
2011-3-17 10:17:25 org.apache.cxf.endpoint.ServerImpl initDestination
信息: Setting the server's publish address to be http://localhost:9000/helloWorld
2011-03-17 10:17:25.375:INFO::jetty-7.2.2.v20101205
2011-03-17 10:17:25.468:INFO::Started SelectChannelConnector@localhost:9000
server ready ……

那麼你在WebBrowser中請求:

http://localhost:9000/helloWorld?wsdl就可以看到xml內容了。

3、 定製客戶端調用WebService的接口,這個接口中的方法簽名和參數信息可以從wsdl中的內容看到,代碼如下:

package com.hoo.service;
 
import javax.jws.WebParam;
import javax.jws.WebService;
 
/**
 * <b>function:</b> 客戶端調用WebService所需要的接口
 * @author hoojo
 * @createDate 2011-3-17 上午09:00:00
 * @file IHelloWorldService.java
 * @package com.hoo.service
 * @project CXFWebService
 * @blog http://blog.csdn.net/IBM_hoojo
 * @email [email protected]
 * @version 1.0
 */
@WebService
public interface IHelloWorldService {
    public String sayHello(@WebParam(name = "name") String name);
}

4、 編寫客戶端調用WebService代碼

package com.hoo.client;
 
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.hoo.service.IHelloWorldService;
 
/**
 * <b>function:</b>CXF WebService客戶端調用代碼
 * @author hoojo
 * @createDate 2011-3-16 上午09:03:49
 * @file HelloWorldServiceClient.java
 * @package com.hoo.client
 * @project CXFWebService
 * @blog http://blog.csdn.net/IBM_hoojo
 * @email [email protected]
 * @version 1.0
 */
public class HelloWorldServiceClient {
    
    public static void main(String[] args) {
        //調用WebService
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(IHelloWorldService.class);
        factory.setAddress("http://localhost:9000/helloWorld");
        
        IHelloWorldService service = (IHelloWorldService) factory.create();
        System.out.println("[result]" + service.sayHello("hoojo"));
    }
}

運行上面的程序後,結果如下:

2011-3-17 10:23:34 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://service.hoo.com/}IHelloWorldServiceService from class com.hoo.service.IHelloWorldService
[result]hoojo say: Hello World 
發佈了37 篇原創文章 · 獲贊 2 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章