webservice实现cxf入门实例

第一步:CXF环境搭建

安装配置apache-cxf和apache-ant,软件下载地址:http://download.csdn.net/download/qciwyy/9976625和http://download.csdn.net/download/qciwyy/9976633

软件下载后配置环境变量


第二步:创建CXF项目

A)①新建服务端项目cxfServer

    ②引入依赖jar包,将apache-cxf-2.4.2\lib下面的所有jar拷贝到项目中

    ③创建服务类,

新建类HelloService

package com.ws.server;

import javax.jws.WebService;
import javax.xml.ws.BindingType;

@WebService
/*@BindingType(value=javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)*/
@BindingType(value=javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING)
public class HelloService {

	public String sayHello(String name){
		return name + " hello!";
	}
	
}
新建发布类MyCXFServer

package com.ws.server;

import org.apache.cxf.frontend.ServerFactoryBean;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

public class MyCXFserver {
	public static void main(String[] args) {
		/*
		 * ServerFactoryBean(不需要使用@webservice)   生成的文档不规范,不建议使用
			JaxWsServerFactoryBean(建议使用此类,需要使用@webservice) 生成的文档不规范,
			可以发布SOAP1.1,SOAP1.2的协议,当cxf的服务类中没有方法时也可以发布成功,不报错。
			如果使用SOAP1.2需要用@bindType注解指定
			当使用SOAP1.2时wsimport命令失效,需要使用cxf的wsdl2java
		 */
		//创建服务工厂对象,不建议使用ServerFactoryBean,生成文档不规范
		//ServerFactoryBean sfb = new ServerFactoryBean();
		JaxWsServerFactoryBean sfb = new JaxWsServerFactoryBean();
		//加入输入输出拦截器
		sfb.getInInterceptors().add(new LoggingInInterceptor());
		sfb.getOutInterceptors().add(new LoggingOutInterceptor());
		//指定服务地址
		sfb.setAddress("http://127.0.0.1:8883/hello");
		//设置服务类
		sfb.setServiceClass(HelloService.class);
		//设置服务类对象
		sfb.setServiceBean(new HelloService());
		//发布服务
		sfb.create();
		System.out.println("server readly-------------");
	}

}
运行后,浏览器输入地址:http://127.0.0.1:8883/hello?wsdl




B)客户端调用

①说明:在cxf中,也提供了一个用于生成客户端调用代码的工具。它的功能就如同wsimport一样。

先让我们了解一下cxf的wsdl2java工具,可以生成一堆客户端调用的代码。既可以生成SOAP1.1也可以生成SOAP1.2

此工具位于cxf_home/bin目录下。参数与wsimport有所不同。

它包含以下参数:

a)        d参数,指定代码生成的目录。

b)        p参数,指定生成的新的包结构。

需要说明的是,由于wsdl2java是根据jdk1.7生成的本地代码,所以,需要对生成的代码做一点点修改。

在命令行执行:wsdl2java -d . -p com.ws.soap11 http://127.0.0.1:8883/hello?wsdl

②新建客户端项目cxfClient

将生成的java代码拷贝到项目中


新建测试类Soap11Client

package com.ws.client;

import com.ws.soap11.HelloService;
import com.ws.soap11.HelloServiceService;


public class Soap11Client {

	public static void main(String[] args) {
		HelloServiceService hss = new HelloServiceService();
		HelloService hs = hss.getHelloServicePort();
		String result = hs.sayHello("lisi");
		System.out.println(result);
	}
}
注意:BingingType的引用





猜你喜欢

转载自blog.csdn.net/qciwyy/article/details/77965922
今日推荐