一、背景介绍
由于工作需要,研究了下CXF框架,并使用CXF框架做了个小demo,一方面是为了记录下来供自己复习用,另一方面方便大家学习使用。
二、什么是cxf
Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构,支持JAX-WS。
三、基于CXF的webservice开发
(1)创建maven项目
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
这里使用的是官方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,回车之后结果:
它生成了我们所需要的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可以直接访问。
到这里之后,说明我们已经部署成功。
(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的使用做的,不涉及原理部分。