二、CXF 入门示例

转载 2015年07月09日 15:00:11


又一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 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 

【WebService框架-CXF】——CXF入门实例

这篇文章主要介绍如何编写WebService的服务端和客户端 准备工作 下载apache-cxf-2.4.0的jar包 将bin目录配置到环境变量中,如:E:\Workspace...
  • u010924834
  • u010924834
  • 2016年06月13日 22:55
  • 1763

简单的iBatisNet示例

简单的iBatisNet示例。自己写的一个示例,也是自己刚刚接触ibatis的第一个示例自己在刚刚接触时,也费了好多劲才弄明白,希望初学者可以少走点弯路,身边没有高手是件很痛苦的事情顺便说下,网上好多...
  • jackfor001
  • jackfor001
  • 2007年12月14日 17:10
  • 1458

CXF 基础教程-------入门示例

CXF 入门示例 又一HelloWorld示例,老套的HelloWorld是入门经典。也是基础和必须掌握的,下面看看HelloWorldWebService,很简单。 需要的jar包如下:...
  • e421083458
  • e421083458
  • 2013年05月28日 23:27
  • 3154

一、CXF 入门示例

又一HelloWorld示例,老套的HelloWorld是入门经典。也是基础和必须掌握的,下面看看HelloWorldWebService,很简单。 需要的jar包如下: 1、 HelloWo...
  • wanmeishijie666
  • wanmeishijie666
  • 2013年07月25日 16:18
  • 397

WebService技术详解(二): CXF

CXFCXF简介CXF是一个开源的WebService框架。Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以...
  • c99463904
  • c99463904
  • 2017年07月27日 14:32
  • 299

WebService CXF学习(入门篇1):CXF由来

WebService介绍     WebService让一个程序可以透明地调用互联网程序,不用管具体的实现细节。只要WebService公开了服务接口,远程客户端就可以调用服务。WebService...
  • z69183787
  • z69183787
  • 2014年06月30日 11:21
  • 873

CXF WebService 2 入门示例

HelloWorld示例,老套的HelloWorld是入门经典。也是基础和必须掌握的,下面看看HelloWorldWebService,很简单。 需要的jar包如下: 1、 HelloW...
  • sqzhao
  • sqzhao
  • 2014年12月09日 16:32
  • 348

CXF入门

最近CXF新手上路,apache网站上面的CXF user guide看得我一头雾水。(估计CXF项目组都是高手,写得资料也是讳莫高深。:))为了入门不停地google也未找到好的入门资料,经过几天的...
  • irvine007
  • irvine007
  • 2008年08月20日 14:42
  • 4348

【webservice】cxf多种调用webservice服务的方式

本文已经同步发布到新博客:http://fengchenluoyu.duapp.com/ 要调用已经发布的webservice服务,cxf有多种调用方式,现例举几种,留作参考!获取版本包和获取w...
  • u012386696
  • u012386696
  • 2014年03月11日 14:42
  • 2114

CXF 入门:创建一个基于SOAPHeader的安全验证(CXF拦截器使用)

CXF 入门:HelloWorld接口发布 CXF 入门: 远程接口调用   下面具体的webservice实现类直接用的是上面的,这里不再说明   Java...
  • joeyon
  • joeyon
  • 2015年04月07日 14:32
  • 538
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二、CXF 入门示例
举报原因:
原因补充:

(最多只允许输入30个字)