CXF是apache旗下的开源框架,由Celtix + XFire这两门经典的框架合成,是一套非常流行的web service框架。
它提供了JAX-WS的全面支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用,同时它能与spring进行完美结合。
在apache cxf官网提供了cxf较全面的帮助文档,英语教好的童鞋可以到这个地址学习:http://cxf.apache.org/docs/index.html
下面就以官网教程为例,简单介绍下cxf的使用。
1、依赖的jar包
去官网下载cxf压缩文件:http://cxf.apache.org/download.html
解压后,把apache-cxf-2.4.1\lib目录下的jar包引用到java项目中
2、JAX-WS简单实例
首先编写一个ws接口:
@WebService
public interface HelloService {
public String sayHi(String text);
public String getUser(User user);
public List<User> getListUser();
}
需要在接口头部注明一个"WebService"注解,表示这是一个webservice。
至于User类则是一个序列化的javabean(在对象传输过程建议尽量序列化,熟悉java io的朋友应该清楚这点):
public class User implements Serializable{
private static final long serialVersionUID = 1001881900957402607L;
private Integer id;
private String name;
getter,setter...
}
然后编写接口的实现类:
@WebService(endpointInterface = "com.bless.ws.HelloService", serviceName = "HelloService",portName="HelloServicePort")
public class HelloServiceImpl implements HelloService {
@Override
public String sayHi(String text) {
System.out.println("sayHi called...");
return "Hi :" + text;
}
@Override
public String getUser(User user) {
System.out.println("sayUser called...");
return "User:[id=" + user.getId() + "][name=" + user.getName() + "]";
}
@Override
public List<User> getListUser() {
System.out.println("getListUser called...");
List<User> lst = new ArrayList<User>();
lst.add(new User(2, "u2"));
lst.add(new User(3, "u3"));
lst.add(new User(4, "u4"));
lst.add(new User(5, "u5"));
lst.add(new User(6, "u6"));
return lst;
}
}
此时注解WebService内还有三个属性:
endpointInterface表示webservice接口名,因为一个类可以继承多个接口,你必须指明哪个是webservice接口
serviceName:表示当前webservice的别名
portName:表示当前webservice的端口名
这些属性定义好之后,在wsdl中是能看到的,如果不定义,cxf会配置默认的别名和端口名
最后一步部署webservice:
public class Server {
protected Server() throws Exception {
// START SNIPPET: publish
System.out.println("Starting Server");
HelloServiceImpl implementor = new HelloServiceImpl();
String address = "http://localhost:8111/helloWorld";
Endpoint.publish(address, implementor);
// END SNIPPET: publish
}
public static void main(String[] args) throws Exception {
new Server();
System.out.println("Server ready...");
Thread.sleep(5 * 60 * 1000);
System.out.println("Server exiting");
System.exit(0);
}
}
web service是需要部署到服务器的,通过Endpoint.publish方法部署的话,我估计是部署到jetty上的,具体神马情况,因为个人经验不足在这不胡说了。通过运行main函数就可以启动服务了,检验服务是否启动,可以访问如下地址:http://localhost:8111/helloWorld?wsdl,如果能显示正确的xml信息则表示服务启动成功。
最后写一个客户端程序调用web service:
public final class Client {
private static final QName SERVICE_NAME
= new QName("http://ws.bless.com/", "HelloService");
private static final QName PORT_NAME
= new QName("http://ws.bless.com/", "HelloServicePort");
private Client() {
}
public static void main(String args[]) throws Exception {
Service service = Service.create(SERVICE_NAME);
// Endpoint Address
String endpointAddress = "http://localhost:8111/helloWorld";
// Add a port to the Service
service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
HelloService hw = service.getPort(HelloService.class);
System.out.println(hw.sayHi("World"));
System.out.println(hw.getUser(new User(1, "kaka")));
for(User user : hw.getListUser()){
System.out.println("List User [id:"+user.getId()+"][name:"+user.getName()+"]");
}
}
}
测试:
首先启动server,如果没问题的话,再启动clien,大家可以看控制台的效果。
3、CXF与spring整合:
熟悉spring的朋友应该知道spring的IOC管理对象非常强大,那么cxf与spring整合也是源于此目的:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint id="helloWorld" implementor="com.bless.ws.HelloServiceImpl" address="http://localhost:8080/webservice/helloService" />
<jaxws:client id="helloClient" serviceClass="com.bless.ws.HelloService" address="http://localhost:8080/webservice/helloService" />
</beans>
大家可以通过java代码测试(测试时把上一步配置的beans.xml文件放在src根下面):
public class SpringTest {
public static void main(String[] args) {
// START SNIPPET: client
ClassPathXmlApplicationContext context
= new ClassPathXmlApplicationContext("beans.xml");
HelloService client = (HelloService)context.getBean("helloClient");
String response = client.sayHi("Joe");
System.out.println("Response: " + response);
System.exit(0);
// END SNIPPET: client
}
}
如果是web项目,那么你需要配置web.xml文件:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>CxfDemo</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/beans.xml</param-value>
</context-param>
<!--Spring ApplicationContext 载入 ,必须-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Spring 刷新Introspector防止内存泄露 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
</web-app>
分享到:
相关推荐
**CXF入门实例详解** Apache CXF 是一个开源的Java框架,主要用于构建和开发Web服务。它提供了多种方式来创建和消费SOAP以及RESTful服务,是Java世界中广泛使用的Web服务实现工具。在这个"CXF HelloWorld"入门实例...
这个"CXF入门简单实例(spring整合)"的压缩包文件提供了使用Spring框架与CXF集成的基础教程。让我们深入了解一下CXF和Spring的整合以及如何通过这个实例来创建一个简单的Web服务。 首先,CXF支持多种协议,如SOAP、...
本文将通过一个简单的入门实例介绍如何使用CXF来创建和部署Web Service。 首先,选择CXF作为Web Service框架的原因在于它对Spring的支持。CXF可以无缝地与Spring应用上下文集成,简化服务的配置和管理。在本实例中...
### CXF入门实例详解:构建Web服务 在深入探讨如何使用Apache CXF框架构建Web服务之前,我们首先简要了解一下CXF的基本概念及其在Web服务领域的重要地位。 #### Apache CXF简介 Apache CXF(Community eXtreme ...
这个入门实例是基于CXF 2.2.4版本,一个较旧但仍然具有教育意义的版本,可以帮助初学者理解如何使用CXF来创建Web服务。 在CXF 2.2.4中,主要关注的特性包括: 1. **JAX-WS支持**:CXF支持Java API for XML Web ...
【CXF入门实例】是一个基于Java的开源服务框架,它允许开发人员创建和消费Web服务。CXF(CXF: The Apache CXF project is an open source services framework)旨在简化并加速构建SOAP、RESTful Web服务的过程。这个...
【CXF入门 -- 第一个简单webService】 Apache CXF 是一款强大的开源服务框架,它用于构建和开发服务,包括Web服务。本篇文章将带你入门CXF,通过创建一个简单的Web服务来理解其基本概念和工作流程。 1. **CXF简介*...
【标题】:“CXF入门文档”是一份专为初学者设计的教程,旨在引导读者从零开始掌握Apache CXF框架的使用。Apache CXF是一个开源的Java服务框架,它允许开发者构建和部署SOAP和RESTful Web服务。此文档将帮助新手快速...
Apache CXF 是一个开源的 Java 框架,主要用于构建和开发服务导向架构(SOA)和 RESTful Web 服务。它提供了丰富的功能,包括SOAP、REST、WS-* 标准支持、数据绑定、JAX-RS 和 JAX-WS API 实现等。在“cxf入门例子...
CXF(CXF: Composite X-Framework)是一个开源的Java框架,主要用于构建和服务导向架构(SOA)的应用程序。它提供了多种方式来实现Web服务,包括基于Java API for Web Services (JAX-WS) 和 Java API for RESTful ...
【CXF3.0.2+Spring3.2.14 WebService入门实例四】的知识点解析 在本文中,我们将深入探讨如何使用Apache CXF 3.0.2版本和Spring 3.2.14框架来创建一个基于WebService的文件传输应用。Apache CXF是一个流行的开源...
CXF REST最简实例是一个快速入门的教程,它展示了如何使用Apache CXF框架创建RESTful Web服务并进行测试。Apache CXF是一个流行的开源框架,它允许开发者构建和消费Web服务,包括SOAP和REST风格的服务。REST...
【CXF实例源代码(服务器端)】是一个用于学习和实践Apache CXF框架的入门教程,专注于构建Web服务。Apache CXF是一个开源的Java框架,主要用于创建和消费Web服务,它支持多种协议和标准,如SOAP、RESTful、WS-*等。...
【CXF入门】 CXF(CXF: Composite eXtensible Services Framework)是一个开源的Java框架,主要用于构建和开发Web服务。它提供了强大的服务端和客户端API,支持SOAP、RESTful、WS-*等标准,使得开发者能够轻松地创建...
Apache CXF是一个开源的Java框架,它主要用于构建和开发服务导向架构(SOA)和Web服务。这个"CXF实例源代码(客户端)"压缩包提供了客户端调用Web服务的示例代码,对于初学者来说,是理解如何使用CXF进行Web服务交互...
- Spring框架提供了很好的依赖注入和管理组件的能力,CXF可以很好地与Spring集成,利用Spring管理服务实例和服务配置。 5. **CXF工具**: - **CXF wsdl2java**:从WSDL生成Java类和服务接口。 - **CXF jaxws21**...
标题 "CXF入门例子" 暗示了我们要探讨的是Apache CXF框架的初步使用,这是一个流行的开源服务框架,用于构建和开发Web服务。Apache CXF允许开发者通过Java API来创建SOAP和RESTful Web服务,提供了强大的功能和易用...
总的来说,这个资源是学习Apache CXF入门的好材料,涵盖了基础的Web服务开发流程,并通过实例演示了CXF的使用,有助于开发者快速理解和掌握CXF框架。在实际的学习过程中,建议配合阅读CXF的官方文档,以便更深入地...