webservice快速入门-整合apache-cxf(四)

关于apache-cxf就不多说了。百度看下吧。

由于我是用maven管理的,需要的几个核jar包是:

<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-api</artifactId>
			<version>${apache.cxf}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
			<version>${apache.cxf}</version>
		</dependency>
		<!--启动Server时遇到Could not find destination factory for transport http://schemas.xmlsoap.org/soap/http错误 -->
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http-jetty</artifactId>
			<version>${apache.cxf}</version>
		</dependency>

 

写个简单的helloword吧。

整体目录结构如下:

和之前一样,先编写服务端代码:

package com.whaty.test.ws.cxf.service;

import javax.jws.WebParam;
import javax.jws.WebService;

/** 
 * @name:HelloWorldService.java 
 * @desc: 
 * @author:lizhuang
 * @createTime:2012-12-28 下午04:37:28
 */
@WebService
public class HelloWorldService {
	//@WebParam(name = "name")意思是指定参数的名称为name,否则默认为arg0,arg1.....
	public String sayHello(@WebParam(name = "name") String name) {
		System.out.println("~~~~~~~~~~~~~~~~");
        return name + " say: Hello World ";
    }
}


服务端接写好之后,我们先发布看一下有没有问题:

package com.whaty.test.ws.cxf.service.deploy;

import javax.xml.ws.Endpoint;

import com.whaty.test.ws.cxf.service.HelloWorldService;

/**
 * @name:DeployHelloWorldService.java
 * @desc:
 * @author:lizhuang
 * @createTime:2012-12-28 下午04:39:45
 */
public class DeployHelloWorldService {
	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 * 300);
		//System.out.println("server exiting");
		// 休眠300秒后就退出
		//System.exit(0);
	}
}

右键运行发布,如果出现server ready应该就没有什么问题了。

注意:和之前的不同,这里的cxf服务端不是写的接口,也没有所谓的实现类和endpoint了。当然你可以写,也没有问题。我们就用默认最简便的方法实现它。

 

下面编写客户端:

首先写接口,这个接口的方法和服务端里面的方法是一样的,包括目录包的层次结构都是一样的,都放在com.whaty.test.ws.cxf.service包下,不一样会出错,与之前不同的是,客户端这次要写接口:

package com.whaty.test.ws.cxf.service;

import javax.jws.WebParam;
import javax.jws.WebService;

/** 
 * @name:IHelloWorldService.java 
 * @desc: 
 * @author:lizhuang
 * @createTime:2012-12-28 下午05:29:53
 */
@WebService
public interface IHelloWorldService {
	public String sayHello(@WebParam(name = "name") String name);
}


访问服务端:

package com.whaty.test.ws.cxf.service.client;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import com.whaty.test.ws.cxf.service.IHelloWorldService;



/**
 * @name:HelloWorldServiceClient.java
 * @desc:
 * @author:lizhuang
 * @createTime:2012-12-28 下午04:45:49
 */
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("tudou"));
	}
}


控制台:

[result]tudou say: Hello World

 

 

成功。

 本来打算将源码传上来的,结果csdn太垃圾,2次传到97%2次传到99%就是不给我传上去。实在气得没话说。就这样吧。

放在华为网盘吧。

http://dl.vmall.com/c0cvkpkx7o

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值