又一HelloWorld示例,老套的HelloWorld是入門經典。也是基礎和必須掌握的,下面看看HelloWorldWebService,很簡單。
需要的jar包如下:
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 hoojo_@126.com
* @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 hoojo_@126.com
* @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 hoojo_@126.com
* @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 hoojo_@126.com
* @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
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

