资源预览内容
第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
第9页 / 共17页
第10页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
CXF创建webservice服务端2010-05-24 11:28cxf api 帮助网址:http:/cxf.apache.org/apidocs/org/apache/cxf/jaxrs/ext /MessageContext.html首先来介绍下 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 的一个孵化项目。Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。CXF 包含了大量的功能特性,但是主要集中在以下几个方面:1. 支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。 2. Frontends:CXF 支持多种“Frontend”编程模型,CXF 实现了 JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一个“simple frontend”允许客户端和 EndPoint 的创建,而不需要 Annotation 注解。CXF 既支持 WSDL 优先开发,也支持从 Java 的代码优先开发模式。 3. 容易 使用: CXF 设计得更加直观与容易使用。有大量简单的 API 用来快速地构建代码优先的 Services,各种 Maven 的插件也使集成更加容易,支持 JAX-WS API ,支持 Spring 2.0 更加简化的 XML 配置方式,等等。 4. 支持二进制和遗留协议:CXF 的设计是一种可插拨的架构,既可以支持 XML ,也可以支持非 XML 的类型绑定,比如:JSON 和 CORBA。 我们来利用cxf创建一个简单的webservice吧。首先cxf 所需要的包:更具网站说明以下的包都是必须的,但是在我的实际项目中红色部分的包并没有用到。大家可更具自己需求来添加适应的包。 cxf.jar commons-logging.jar geronimo-activation.jar (Or the Sun equivalent)/ geronimo-annotation.jar (Or the Sun equivalent)/ geronimo-javamail.jar (Or the Sun equivalent)/ neethi.jar jaxb-api.jar jaxb-impl.jar stax-api.jar/ XmlSchema.jar wstx-asl.jar xml-resolver.jar 包 有了,那么就开始建立工程1: new web service project (创建一个webservice项目,当然如果你不是建立单独的web service 而是和其他的项目放在一起也可以new web project)2:配置 web.xmlCXFServletorg.apache.cxf.transport.servlet.CXFServlet1CXFServlet/services/*至于spring的配置以及您所用到的其他框架的配置我这边就不做介绍了。这 里只对cxf的配置做介绍。3:建立自己的包以及java文件。在这里可能据自己的业务逻辑去填充自己的dao, entity,等文件及业务。这边主要说明service层的写法。4:创建一个接口:import javax.jws.WebService;import javax.ws.rs.core.Response;import org.apache.cxf.jaxrs.impl.MetadataMap;import com.sns.bestv.entity.VisCustomer;WebService/ 此注解说明该接口是提供与webservice的。public interface CustomerService / Transactional/可根据自己的需求添加事物Response addCustomer(MetadataMap map);/cxf可以以map的形式接收参数。/ TransactionalResponse deleteCustomer(String app_key,String pidarr);/也可以通过参数接收/ TransactionalResponse bindCustomer(VisCustomer cust);/对象接收。/ TransactionalVisCustomer getCustomer(String app_key,int uid,String type);该接口的实现类:import java.util.ArrayList;import java.util.List;import javax.jws.WebMethod;import javax.jws.WebService;import javax.ws.rs.GET;import javax.ws.rs.POST;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.ws.rs.Produces;import javax.ws.rs.QueryParam;import javax.ws.rs.core.Context;import javax.ws.rs.core.Response;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;import org.apache.cxf.jaxrs.impl.MetadataMap;import org.springframework.transaction.annotation.Transactional;import com.sns.bestv.dao.VisApiLogDao;import com.sns.bestv.dao.VisApiUsersDao;import com.sns.bestv.dao.VisCustomerDao;import com.sns.bestv.dao.VisCustomerUsersDao;import com.sns.bestv.dao.VisUsersDao;import com.sns.bestv.entity.VisApiLog;import com.sns.bestv.entity.VisApiUsers;import com.sns.bestv.entity.VisCustomer;import com.sns.bestv.entity.VisCustomerUsers;import com.sns.bestv.entity.VisUsers;import com.sns.bestv.service.Authentication;import com.sns.bestv.service.CustomerService;Path(/custermerservice/)/在类的上方定义path 指定该类的访问路径。Produces(application/xml)/此处可有可无。一般情况是要写上的。在客户端调用的时候httpclient.setHeaders需要和此处匹配。WebService(endpointInterface = com.sns.bestv.service.CustomerService)/此处不太明 白为什么。如果有明白的还请指教。我认为是和spring配置文件中做匹配的,在spring中可以这么配置。 访问的时候就用/test。目前还没懂2者之间的联系与意义。public class CustomerServiceImpl implements CustomerService/messageContext是接收httpclent传输过来的信息,如headers中传递http的验证信 息。可通过 messageContext.getHttpHeaders().getRequestHeaders().getFirst(user);来获取 user的值。private org.apache.cxf.jaxrs.ext.MessageContext messageContext;Contextpublic void setMessageContext(org.apache.cxf.jaxrs.ext.MessageContext messageContext) this.messageContext = messageContext;SuppressWarnings(unchecked)POST/指定方法是 由post还是get传参。Path(/addcustermer)/ 指定方法的访问路劲。Transactional(readOnly=false,rollbackFor = Throwable.class)/事务处理,此处事务配置还未成熟。希望和大家一起探讨。public Response addCustomer(MetadataMap map)VisCustomer cut=new VisCustomer();System
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号