Java Web Service-CXF -基于Restful的Web服务

CXF入门教程(一) CXF 简介 Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXFCXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Tra... 阅读详情

Java Web Service-CXF

-基于Restful的Web服务

sf2gis@163.com

2015年11月13日

 

1 目标:简单的Web服务访问协议。

2 原理:将Http请求转化为Web服务。

3 流程:

3.1 创建DynamicWeb Project。

3.2 安装CXF库(自带Spring库):下载CXF,解压后将lib下所有内容copy到web-inf/lib下。将库加入ClassPath。

3.3 配置web.xml:指定Spring为Web监听类,设置CXF的Servlet。

//web.xml

<?xmlversion="1.0" encoding="UTF-8"?>

<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"id="WebApp_ID" version="3.1">

 <display-name>CXFDemo</display-name>

    <listener>

        <listener-class>

            org.springframework.web.context.ContextLoaderListener

        </listener-class>

    </listener>

     <servlet>

        <servlet-name>CXFServlet</servlet-name>

         <servlet-class>

             org.apache.cxf.transport.servlet.CXFServlet

         </servlet-class>

     </servlet>

     <servlet-mapping>

        <servlet-name>CXFServlet</servlet-name>

        <url-pattern>/services/*</url-pattern>

     </servlet-mapping>

</web-app>

3.4 配置Spring:添加jaxrs命名空间,设置服务Server。

//applicationContext.xml

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xmlns:jaxrs="http://cxf.apache.org/jaxrs"

      xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd

http://cxf.apache.org/jaxrshttp://cxf.apache.org/schemas/jaxrs.xsd">

      <import resource="classpath:META-INF/cxf/cxf.xml"/>

      <importresource="classpath:META-INF/cxf/cxf-extension-soap.xml" />

      <importresource="classpath:META-INF/cxf/cxf-servlet.xml" />

      <jaxrs:serverid="rs1" address="/rs">

           <jaxrs:serviceBeans>

                 <beanclass="lee.HelloWorldImpl" />

           </jaxrs:serviceBeans>

      </jaxrs:server>

</beans>

3.5 创建WebService的服务Bean类:使用@Path标记路径,@GET标记请求类型,@PathParam标记参数。

//IHelloWorld.java

package lee;

 

public interface IHelloWorldextends java.rmi.Remote {

    public java.lang.String sayHello();

    public java.lang.String say(String arg0);

}

 

//HelloWorldImpl.java

package lee;

 

import javax.ws.rs.GET;

import javax.ws.rs.Path;

import javax.ws.rs.PathParam;

 

@Path("/")

public class HelloWorldImplimplements IHelloWorld {

 

      @Override

      @GET

      @Path("/say/{msg}")

      public String say(@PathParam("msg")String msg) {

           // TODO Auto-generated method stub

           return "Hello"+msg;

      }

 

      @Override

      @GET

      @Path("/sayhi")

      public String sayHello() {

           // TODO Auto-generated method stub

           return "Hello";

      }

 

}

3.6 调用WebService的服务:CXFServlet路径+server路径+服务路径+方法路径+参数路径

http://192.168.41.131:8080/CXFDemo/services/rs/sayhi

http://192.168.41.131:8080/CXFDemo/services/rs/say/xx

4 方法:Restful+JAX-RS。

4.1 REST:REprestation Status Transfor,表现对象状态转换。是一种网络设计理念。

将所有不同表现形式的资源、服务抽象为资源并分配URI。

简化Web服务协议(SOAP协议太过复杂,且只支持POST,无法使用GET获取)。

4.2 Http协议与Java的映射:JAX-RS:Restful的实现。

使用注释标记各种服务属性。

HTTP请求方式:@PUT,@GET,@POST,@DELETE。

HTTP请求的MIME类型:@Consumers

HTTP返回的MIME类型:@Produces

HTTP请求参数来源:@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam。

HTTP请求参数默认值:@DefaultValue。

参考:http://developer.51cto.com/art/200908/141825.htm

http://baike.baidu.com/link?url=Z5A9ifUJH9GLwJR_JwjbhOUW2LUpOImOvB9hIosMwojDmKWQ7-eQmio6kOIVXAB59We2xJFdvhPSKxZP9hRHWq

4.3 JAX-RS实现:CXF

CXF实现JAX-RS。

5 方法:基于Restful的Web服务客户端

5.1 目标:调用基于Restful的Web服务。

5.2 原理:将Http响应转化为Java对象。

5.3 流程:配置Web.xml,配置Spring,调用Web服务。

5.3.1配置Web.xml

//web.xml

<?xmlversion="1.0" encoding="UTF-8"?>

<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"id="WebApp_ID" version="3.1">

      <display-name>CXFClientDemo</display-name>

      <listener>

        <listener-class>

            org.springframework.web.context.ContextLoaderListener

        </listener-class>

      </listener>

      <servlet>

        <servlet-name>h</servlet-name>

         <servlet-class>

              lee.Client

         </servlet-class>

     </servlet>

     <servlet-mapping>

         <servlet-name>h</servlet-name>

        <url-pattern>/client/h</url-pattern>

     </servlet-mapping>

</web-app>

5.3.2配置Spring:如果无Bean配置,也需要applicationContext.xml文件。

//applicationContext.xml

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

5.3.3调用Web服务:使用WebClient转化为Java对象。

//Clent.java

package lee;

 

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

 

importorg.apache.cxf.jaxrs.client.WebClient;

import org.springframework.web.context.WebApplicationContext;

importorg.springframework.web.context.support.WebApplicationContextUtils;

 

public class Client extendsHttpServlet {

      public void service(HttpServletRequest reqest,HttpServletResponse response) {

           WebApplicationContext ctx =WebApplicationContextUtils.getWebApplicationContext(getServletContext());

           WebClientclient=WebClient.create("http://192.168.41.131:8080/CXFDemo/services/rs/whosay/xx?msg=yy"); 

           String strResp=(String)client.accept("text/plain").get(String.class);    

        System.out.println(strResp);  

      }

}

5.4 方法:Client的使用

Client是Web服务的代理,指定服务的地址,然后使用get()得到服务的结果,转化为指定的结果类型。

5.4.1配置Client的SpringBean:目标是通过Spring管理Client。

5.4.1.1  增加JAX-RS命名空间:可以使用jaxrs:client标签。

<beansxmlns="http://www.springframework.org/schema/beans"

      xmlns:jaxrs="http://cxf.apache.org/jaxrs"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd

http://cxf.apache.org/jaxrshttp://cxf.apache.org/schemas/jaxrs.xsd">

5.4.1.2  创建客户端Bean:指定客户端的地址,web服务类为org.apache.cxf.jaxrs.client.WebClient生成代理。

      <jaxrs:clientid="webClient"address="http://192.168.41.131:8080/CXFDemo/services/rs/whosay/xx?msg=yy"

           serviceClass="org.apache.cxf.jaxrs.client.WebClient">

           <jaxrs:headers>

                 <entrykey="Accept" value="text/plain" />

           </jaxrs:headers>

      </jaxrs:client>

5.4.1.3  调用客户端Bean:直接调用客户端Bean,使用get()得到结果并转换为指定类型。

      WebClientclient=ctx.getBean("webClient",WebClient.class);

            String strResp=client.get(String.class);

5.4.2创建客户端并调用:不使用Spring管理,手动创建客户端

           WebClientclient=WebClient.create("http://192.168.41.131:8080/CXFDemo/services/rs/whosay/xx?msg=yy"); 

           StringstrResp=(String)client.accept("text/plain").get(String.class);    

 

5.5 示例:使用SpringBean配置客户端

参考:http://cxf.apache.org/docs/jax-rs-client-api.html

//web.xml

<?xmlversion="1.0" encoding="UTF-8"?>

<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/javaee"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"id="WebApp_ID" version="3.1">

      <display-name>CXFClientDemo</display-name>

      <listener>

        <listener-class>

            org.springframework.web.context.ContextLoaderListener

        </listener-class>

      </listener>

      <servlet>

        <servlet-name>h</servlet-name>

         <servlet-class>

              lee.Client

         </servlet-class>

     </servlet>

     <servlet-mapping>

         <servlet-name>h</servlet-name>

        <url-pattern>/client/h</url-pattern>

     </servlet-mapping>

</web-app>

//applicationContext.xml

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

      xmlns:jaxrs="http://cxf.apache.org/jaxrs"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd

http://cxf.apache.org/jaxrshttp://cxf.apache.org/schemas/jaxrs.xsd">

      <jaxrs:clientid="webClient"address="http://192.168.41.131:8080/CXFDemo/services/rs/whosay/xx?msg=yy"

           serviceClass="org.apache.cxf.jaxrs.client.WebClient">

           <jaxrs:headers>

                 <entrykey="Accept" value="text/plain" />

           </jaxrs:headers>

      </jaxrs:client>

</beans>

//Clent.java

package lee;

 

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

 

import org.apache.cxf.jaxrs.client.WebClient;

importorg.springframework.web.context.WebApplicationContext;

importorg.springframework.web.context.support.WebApplicationContextUtils;

 

public class Client extendsHttpServlet {

      public void service(HttpServletRequest reqest,HttpServletResponse response) {

           WebApplicationContext ctx =WebApplicationContextUtils.getWebApplicationContext(getServletContext());

 

           WebClientclient=ctx.getBean("webClient",WebClient.class);

            StringstrResp=client.get(String.class);

   System.out.println(strResp);  

      }

}

6 示例:

 

Web Service 学习笔记 Web Serviceweb 服务,它是一种跨编程语言和跨操作系统平台的远程调用技术。 Java 中共有三种 Web Service 规范: - JAX-WS(JAX-RPC): 基于 xml 数据 - JAXM&SAAJ - JAX-RS:基于 xml 或 json 数据 阅读详情

相关推荐

cxf 开发restful服务

主要包括cxf开发webservice的配置,使用maven 构建项目。

JAVA发布基于cxf框架的webservice

介绍如何发布cxfwebservice,包括服务端的开发以及客户端的开发,介绍了如何在tomcat上进行发布

m0_62430037的博客 2232

c++11 无锁队列

/************************************************************************* &gt; File Name: lockfreequeue.cpp &gt; Author: &gt; Mail: &gt; Created Time: Wed 08 Aug 2018 11:38:08 AM CST ********...

qq_35728402的博客 5004

Java工作笔记-使用CXF接入及创建WebService

这里我采用Spring Boot进行项目启动。 关于CXF要添加的Maven: <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.1.1</version>

IT1995的博客 1430

java cxf restful_基于cxf开发restful风格的Web Service

一、写在前面webservice一些简单的其他用法和概念,就不在这里赘述了,相信大家都可以在网上查到,我也是一个新手,写这篇文章的目的一方面是想记录自己成长的历程,另一方面是因为学习这个的时候花了点时间,希望本文章能为大家节约点时间。当然描述的可能不到位,望谅解。二、创建项目2.1、创建公用接口project为了方便服务端和客户端调用接口可以先创建一个接口java project,单独建一个接口p...

weixin_33603405的博客 409

使用CXF开发RESTFul服务

使用CXF开发RESTFul服务 在各个系统交互领域,Web services逐渐成为主流。有两种主要方式来开发Web Services:Simple Object Access Protocol (SOAP)和Representational State Transfer (REST)   开发基于SOAP的Web Services需要很多的约束, 以便客户端和服务端交互信息,例如,使用W

rockiecxh的专栏 1万+

Java CXF RestFul风格的web service发布与调用

优点: Ø如此restful风格的web service定制完毕。 ØRestful风格的web service是直接通过http协议通信。       所以,可以直接通过浏览器访问服务方法       相对于soap格式的web service 更快,不愈要声称客户端代码。 一、发布: Ø导入依赖jar Ø定制RetFul风格的web service Ø将w

zhangyunfeixyz的博客 2689

在Eclipse中基于Spring+CXF搭建RESTful Web Service的Maven项目

在Eclipse中基于Spring+CXF搭建RESTful Web Service的Maven项目

给自己一个前行的动力 1450

CXF整合spring

1.创建HelloWorld 接口类 1 package com.googlecode.garbagecan.cxfstudy.helloworld; 2 import javax.jws.WebParam; 3 import javax.jws.WebResult;

legend_x的专栏 780

webservice 基于restful

maven依赖 <dependencies> <!-- 提供JacksonJsonProvider,非必需,学过jersey,所以在这块直接使用了,可以使用其他json转化替换,使用cxf的有很多问题,没法填 --> <dependency> <groupId>org.springframework.boot</groupId...

zhaoyunfei1的博客 601

基于CXF的JAX-WS、JAX-RS(RESTful)的webService

1、准备 这是一个最基本的基于CXFJava项目 如果仅发布JAX-WS应用则需要以下jar文件 : cxf-2.4.2.jar                                 这是CXF的核心包 xmlschema-core-2.0.jar              这是解析XMLSchema的apache包 neethi-3.0.1.jar

zdnlp的专栏 1999

Spring+CXF+IBatis详细介绍及下载

今天开始使用JAVA WEB工程集成Spring+IBatis+CXFrestful web service),我尽量把一些细节讲清楚,让自己和你们一起成长~ 1.首先准备一个动态WEB工程,我把他取名为tnserver,我准备首先完成Spring与IBatis的集成,最后集成CXF,并完成一个资源的CURD操作。 2.准备Spring所需要的jar包,jar为: [list] ...

爱,促进自我完善! 218

cxf+rest+spring的完整实现

github代码:https://github.com/benjiaxiaoxu/jscxfweb 最近一直在业余的时间想搞一个类似糗事百科的服务端做为客户端的信息来源,查阅资料绝对使用apache的cxf来作为webservice服务 翻阅了大量资料发现一些代码,但没有完善的代码体系,我提供一个吧,这个是我写的服务端,里面还有一部分需要完善,大家看到问题后可以给我留言! 不多说了,上部分代...

weixin_30794491的博客 130

java rest版简单的webservice

目前的webservice风格,rest应该是其中一种 还有种就是soap,rest是轻量级的,越来越流行。下面举一个简单例子说明下rest的用法。 1. 准备ws的jar和spring的jar,如何要连接数据的话就自行准备这边就不提供了 下载jar地址:http://download.csdn.net/detail/taopeng_100/7827035 或者:http://pa...

weixin_38169359的博客 235

jws jax-ws jax-rs jaxb cxf axis2 关系

JWS:是指与webservice相关的J2EE(其实现在应该叫做Java EE吧)技术叫做JWS(全称就是Java webservice)。     简要说一下 JAX-WS 和JAX-RS         JAX-WS 全称是JavaTM API for XML-Based Web Services          JAX-RS  全称是JavaTM API for RESTf

Erica_1230的专栏 719

cxf开发Restful Web Services

一、restful web services   rest全称是Representation State Transfer(表述性状态转移)。它是一种软件架构风格,只是提供了一组设计原则和约束条件。在restful web services的设计原则中,所有的事物都应该拥有唯一的URI,通过对URI的请求访问,完成相应的操作。访问的方法与http协议中的若干方法相对应。如下: 创建资源,使...

weixin_33670786的博客 92

Java使用Apache CXF开发Web Service

以前工作中也用CXF,但都是用别人现成搭好的环境,这次自己重头搭建一遍环境。过程中也有遇到的问题,也做了简单的整理。 对于CXF是干什么用的,我不想多说,大家都知道这是我们在java编程中webService技术的一种实现工具。我们说说为什么用CXF来实现webService: 1.      JavawebService实现本身就是一个很耗性能的实现方案(xml与java对象之间在

渴望,就奋力追寻... 3775

Rest架构与RESTful Web Service

Rest 架构 101 在微服务大行其道的今天、Rest 架构在其中扮演的角色不可忽视。本文将从下面4个问题出发,逐步建立起对 Rest 架构以及 RESTful Web Service 的整体概念。 什么是 Rest ? 什么是 RESTful Web Service ? 什么是 JAX-RS ? JAX-RS 与 Spring MVC 的区别与联系? 总结 Rest--REpresenta...

weixin_34198797的博客 263

1 使用 CXF 和 Spring 创建 Web 服务

简介: 使用开放源代码 Web 服务框架 Apache CXF 可以很容易地创建传统 Java™ 对象(plain old Java object ,POJO)样式的 Web 服务。本文是本系列的第 1 部分,将向您介绍如何使用 Spring 和 CXF 将 POJO 作为 Web 服务公开。本文还将演示 CXF 与 Spring 框架的集成。 引言 在本文中,您将使用 CXF 和 Sprin...

weixin_33868027的博客 99
上一篇: Java Web Service-CXF
下一篇: Java框架组件-XML、JSON解析,日志,测试,文档,注释
弗里曼的小伙伴
博客等级 码龄19年 233粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弗里曼的小伙伴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值