CXF + Spring + Maven 开发WebService

一、背景介绍

  由于工作需要,研究了下CXF框架,并使用CXF框架做了个小demo,一方面是为了记录下来供自己复习用,另一方面方便大家学习使用。

二、什么是cxf

  Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构,支持JAX-WS。

三、基于CXF的webservice开发

  (1)创建maven项目

CXF + Spring + Maven 开发WebService_第1张图片

  pom文件代码如下:


	4.0.0
	com.chinaunicom.cxf
	CXF_Demo
	0.0.1-SNAPSHOT

	
		UTF-8
	

	
		
			junit
			junit
			3.8.1
			test
		

        
		
			org.apache.cxf
			apache-cxf
			3.2.6
			pom
			
				
					cxf-services-wsn-api
					org.apache.cxf.services.wsn
				
				
					cxf-services-wsn-core
					org.apache.cxf.services.wsn
				
				
					cxf-services-ws-discovery-api
					org.apache.cxf.services.ws-discovery
				
				
					cxf-services-ws-discovery-service
					org.apache.cxf.services.ws-discovery
				
			
		
	

	
		
			
				org.apache.maven.plugins
				maven-compiler-plugin
				
					UTF-8
					1.8
					1.8
				
			
		
	

这里使用的是官方3.2.6版本的cxf

(2)创建服务接口类和实现类 - - 实体类person省略

  

@WebService
public interface PersonQueryService {

	Person getPerson(@WebParam(name = "name") String name, @WebParam(name = "pass") String pass);

	List getPersons();
}
@WebService(endpointInterface = "com.cxf.demo.service.PersonQueryService", serviceName = "personQueryService")
public class PersonQueryServiceImpl implements PersonQueryService {

	@Override
	public Person getPerson(String name, String pass) {
		Person person = new Person();
		person.setName(name);
		person.setPassword(pass);
		return person;
	}

	@Override
	public List getPersons() {
		List persons = new ArrayList<>();
		persons.add(new Person("小徐1", "123456"));
		persons.add(new Person("小徐2", "654321"));
		return persons;
	}

(3)CXF自带了一个轻量的容器服务,相当于spring自己提供了IOC容器一样。我们可以先用它来测试一下我们部署成功没。

public class PublishService {

	public static void main(String[] args) {
		System.out.println("service is starting .......");
		String address = "http://localhost:9000/service";
		Endpoint.publish(address, new PersonQueryServiceImpl());
		System.out.println("service is started ......");
	}

}

启动之后,直接在浏览器输入http://localhost:9000/service?wsdl,回车之后结果:

CXF + Spring + Maven 开发WebService_第2张图片

它生成了我们所需要的wsdl文件,说明我们部署成功了。

(4)但很多情况下,我们并不希望我们的webservice和我们的应用分开两个服务器,而希望他们在同一个容器,tomcat或JBOSS或其他的,这样我们就必须通过WEB来部署我们前面完成的webservice。

注意,我们这里需要用到spring定义文件。

首先看看web.xml:




	
		Apache CXF Endpoint
		cxf
		cxf
		org.apache.cxf.transport.servlet.CXFServlet
		1
	
	
		cxf
		/services/*
	

接下来看看cxf-servlet.xml:




	
	

	

通过jaxws:endpoint定义了一个webservice,implementor是webservice的处理类,而address是它的访问路径

接下来配置client-beans.xml:




	

	
		
		
	

这里配置名为clientFactory的类,添加serviceClass和address的参数

(5)这时我们可以把它部署到tomcat中,通过http://localhost:8080/CXF_Spring_Demo/services/pqservice?wsdl可以直接访问。

CXF + Spring + Maven 开发WebService_第3张图片

到这里之后,说明我们已经部署成功。

(6)服务运行成功之后,开始写客户端来进行调用测试

public class client_spring {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
				new String[] { "client-beans.xml" });
		PersonQueryService service = (PersonQueryService) context.getBean("client");

		System.out.println(service.getPerson("小王", "000000"));

	}
}

总结:本博主要是针对cxf的使用做的,不涉及原理部分。

你可能感兴趣的:(cxf,java)