Webservice 之CXF

klark_pang 贡献于2013-04-27

作者 YangChao  创建于2012-04-12 03:33:00   修改者YangChao  修改于2012-04-12 04:45:00字数6044

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

Webservice 之CXF 一、关于CXF Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache顶级项目。 Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。 二、CXF/AXIS/AXIS2比较 请参考互联网中使用者文章,在此用cxf主要是能与spring无缝隙整合。 三、CXF+spring整合 1.工程目录结构: 2.所需要包: 这些是添加最少的包了。如果运行中报错,在添加相应的包就可以。 3.Demo中的类 实体: package com.fly.bean; import java.io.Serializable; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "user") public class User implements Serializable { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public User(){ } public User(String name){ this.name = name; } } 接口: package com.fly.service; import java.util.List; import javax.jws.WebParam; import javax.jws.WebService; import com.fly.bean.User; @WebService public interface IHelloWorld { public String sayHi(@WebParam(name="params")String params); public String sayHiToUser(User user); public String[] sayHiToList(List list); } 接口实现类: package com.fly.service.impl; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.jws.WebService; import com.fly.bean.User; import com.fly.service.IHelloWorld; @WebService(endpointInterface="com.fly.service.IHelloWorld",serviceName="HelloWorld",targetNamespace="http://fly.com") public class HelloWorldImpl implements IHelloWorld { @Override public String sayHi(String params) { return "hello , "+params; } @Override public String sayHiToUser(User user) { // TODO Auto-generated method stub return "hello , name="+user.getName(); } @Override public String[] sayHiToList(List list) { String[] result = new String[list.size()]; int i=0; for(User u:list){ result[i] = "Hello " + u.getName(); System.out.println(u.getName()); i++; } return result; } } applicationContext.xml: Webx.xml配置 contextConfigLocation classpath:/applicationContext.xml org.springframework.web.context.ContextLoaderListener encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encodingFilter /* org.springframework.web.util.IntrospectorCleanupListener CXFServlet org.apache.cxf.transport.servlet.CXFServlet 1 CXFServlet /webservice/* index.jsp 四、客户端调用 package com.fly.client; import java.awt.List; import java.util.ArrayList; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.fly.bean.User; import com.fly.service.IHelloWorld; public class Client { /** * @param args */ public static void main(String[] args) { //spring bean 方式调用 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); IHelloWorld helloClient = (IHelloWorld) ctx.getBean("helloClient"); System.out.println(helloClient.sayHi(" 涛哥")); System.out.println(helloClient.sayHiToUser(new User(" 童安格"))); ArrayList list = new ArrayList(); list.add(new User(" 普弟")); System.out.println(helloClient.sayHiToList(list)); //纯cxf调用方式 /** JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.getInInterceptors().add(new LoggingInInterceptor()); factory.getOutInterceptors().add(new LoggingOutInterceptor()); factory.setServiceClass(IHelloWorld.class); factory.setAddress("http://localhost:8080/cxftest/webservice/helloWorld"); IHelloWorld client = (IHelloWorld) factory.create(); String reply = client.sayHi(" 涛哥"); System.out.println("Server said: " + reply); System.exit(0); */ } } 此demo为服务与客户端同工程,如果为不同工程的,请参看注释自行调整。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档