CXF webservice之手动启动服务方法(restful )

来源:互联网 发布:python怎么学 编辑:程序博客网 时间:2024/05/16 11:00

首先介绍一下CXF加深一下对于CXF webservice的认识:

  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 进行无缝集成。

好吧我承认这么官方的说法我是说不出来;网上找到比较准确的解释;

手动启动的方式不需要挂在tomcat服务器,使用cxf提供的jetty服务器。

废话少说,直接进入主题:

第一步:环境配置:

eclipse jee mars.2

tomcat 7 

jdk1.7

maven 

CXF 3.#

环境变量配置问度娘(都是些基本的)

第二步:CXF官网下载CXF3.# (-src的源码包暂时没有用到,但是那一个全部的一定要下载)

傻瓜式操作--->解压之后直接将lib下的所有的jar包都放到eclipse工程下;

使用maven的话;

<dependency><groupId>javax.ws.rs</groupId><artifactId>jsr311-api</artifactId><version>1.1.1</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.1.4</version></dependency><!-- Jetty is needed if you're using the CXFServlet --><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http-jetty</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxrs</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.codehaus.jettison</groupId><artifactId>jettison</artifactId><version>1.3</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-jaxrs</artifactId><version>1.9.8</version></dependency>

第三步:服务器端实现:Service.class

@Path("/baoxian")@Produces({ MediaType.APPLICATION_JSON })public class BaoXianService {private final static Log logger = LogFactory.getLog(BaoXianService.class);@GET@Path("/before/{vincode}")public String getinfo(@PathParam("vincode") String vincode,@QueryParam("name") String name) {System.out.println(vincode);String ret = "my name is :" + name;return ret;}@POST@Path("/post/query")@Consumes({ "application/json", "application/xml" })public String Before_query(String bx) throws Exception {System.err.println(bx);return bx;}}

下面提供了两种最基本的GET和POSt方法,目的是为了测试数据的传递;需要扩展的自行添加;

第四步:手动启动服务类:

public class Server {public static void main(String[] args) {//String address = PropertyUtil.getProperties("ADDRESS");//BaoXianService bxservice = new BaoXianService();// Service instance
<span style="white-space:pre"></span>String address = "http://localhost:8080/rest";//端口号和端口号后面的是可以自定义的;但是要与客户端请求的地址对应;否则不会识别,无法访问JAXRSServerFactoryBean restServer = new JAXRSServerFactoryBean();restServer.setResourceClasses(Detail.class);restServer.getInInterceptors().add(new IpAddressInInterceptor());//自定义的拦截器restServer.setServiceBean(bxservice); restServer.setAddress(address);restServer.create();}
服务启动成功:

第五步:客户端测试:

static String baseAddress = "localhost:8080/rest";//与启动类的地址相同
public static void main(String[] args) {String data = "{\"name\":\"zhangsan\"}";WebClient webclient = WebClient.create(baseAddress);webclient.path("post/query").accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON);String bx = webclient.post(data, String.class);}


ok

心得:由于是第一次接触webservice;对于里面的逻辑、方法还不是很熟悉,但是万事开头难,迈出去第一步以后的路就会好走很多;现在稍微熟悉一点了,就会发现之前遇到的问题其实都不是问题,坚持坚持再坚持,不断的总结分析,就会有收获。

代码比较简单,列了写主要的思路,其实我觉得只要能进行数据的传递,剩下的就是按部就班了




















0 0