WebService入门(五)使用CXF操作WebService

前言

     本章讲解使用CXF操作WebService具体步骤

方法

1.概念

我们知道,在前面的学习中,我们通过原生的JDK使用命令将远程的webService转化为我们使用的Java代码。

那么我们想象一下,如果对方把实现的方法改了怎么办,我们还要重新去下载?

使用原始的方法固然会遇到这个问题。所以我们需要用到CXF。

Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache顶级项目。

2.准备工作

使用CXF需要导入相关的jar包,如果你在使用maven,那么可以导入如下的依赖:

如果你不是使用的maven,那么可能有点难受,需要导入下面这一大堆jar包:

3.编写测试 

1)本次测试的网址为:http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl

该网址到作用在于根据输入的QQ号码可以检测QQ是否在线!

2)编写测试类如下

package cn.edu.ccut.test;

import javax.xml.namespace.QName;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.junit.Test;

public class WebServiceTest {

	@Test
	public void testWebService(){
		JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
		Client client = clientFactory.createClient("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl");
		Object[] result = null;
		try {
            //如果有命名空间的话
			QName operationName = new QName("http://WebXml.com.cn/","qqCheckOnline"); //如果有命名空间需要加上这个,第一个参数为命名空间名称,第二个参数为WebService方法名称
			result = client.invoke(operationName,"1462171547");//后面为WebService请求参数数组
			System.out.println(result[0]);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

测试效果如下:

可见,当前的QQ处于在线的状态。