博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CXF WebService 2 入门示例
阅读量:4132 次
发布时间:2019-05-25

本文共 4067 字,大约阅读时间需要 13 分钟。

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;
 
/**
* function: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;/** * function: 发布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 {		/**	 * function:发布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.HelloWorldService2011-3-17 10:17:25 org.apache.cxf.endpoint.ServerImpl initDestination信息: Setting the server's publish address to be http://localhost:9000/helloWorld2011-03-17 10:17:25.375:INFO::jetty-7.2.2.v201012052011-03-17 10:17:25.468:INFO::Started SelectChannelConnector@localhost:9000server ready ……

那么你在WebBrowser中请求:

就可以看到xml内容了。

3、 定制客户端调用WebService的接口,这个接口中的方法签名和参数信息可以从wsdl中的内容看到,代码如下:

package com.hoo.service;
 
import javax.jws.WebParam;
import javax.jws.WebService;
 
/**
* function: 客户端调用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;
 
/**
* function: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
你可能感兴趣的文章
leetcode刷题191 位1的个数 Number of 1 Bits(简单) Python Java
查看>>
leetcode刷题198 打家劫舍 House Robber(简单) Python Java
查看>>
NG深度学习第一门课作业2 通过一个隐藏层的神经网络来做平面数据的分类
查看>>
leetcode刷题234 回文链表 Palindrome Linked List(简单) Python Java
查看>>
NG深度学习第二门课作业1-1 深度学习的实践
查看>>
Ubuntu下安装Qt
查看>>
Qt札记
查看>>
我的vimrc和gvimrc配置
查看>>
hdu 4280
查看>>
禁止使用类的copy构造函数和赋值操作符
查看>>
C++学习路线
查看>>
私有构造函数
查看>>
组队总结
查看>>
TitledBorder 设置JPanel边框
查看>>
DBCP——开源组件 的使用
查看>>
抓包工具
查看>>
海量数据相似度计算之simhash和海明距离
查看>>
DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)
查看>>
DeepLearning tutorial(6)易用的深度学习框架Keras简介
查看>>
DeepLearning tutorial(7)深度学习框架Keras的使用-进阶
查看>>