[CXF REST标准实战系列] 二、Spring4.0 整合 CXF3.0,实现测试接口
Writer:BYSocket(泥沙砖瓦浆木匠)
Reprint it anywhere u want.
文章Points:
1、介绍RESTful架构风格
2、Spring配置CXF
3、三层初设计,实现WebService接口层
4、撰写HTTPClient 客户端,并实现简单调用
介绍RESTful架构风格
REST是REST之父Roy Thomas创造的,当时提出来了REST的6个特点:客户端-服务器的、无状态的、可缓存的、统一接口、分层系统和按需编码。其具有跨语言和跨平台的优势。
REST是一种架构风格。其描述性的状态包括资源数据的内容和表达格式(XML,JSON等)。请求其中一个资源:方为一个指定性和描述性的URI,经由HTTP将资源的表达从服务器转移到客户端,或者相反方向。
REST不是一种技术,也不是一个标准或者协议,它拥有标准:HTTP+URI+XML(JSON),来实现其要求的架构风格。
泥瓦匠的记忆宫殿:“REST其实就像万能规则一样。如果你遵循它的规则的话,就能得她提供给你的资源数据。”
Spring配置CXF
泥瓦匠用的是Spring4.0.x和CXF3.0.x版本。有兄长说过让我用其他的轻量级的Web Service框架,我最后考虑了下还是用CXF。
1、第一步配置所需的依赖包jars
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <dependency>    <groupId>org.apache.cxf</groupId>    <artifactId>cxf-rt-frontend-jaxws</artifactId>    <version>3.0.3</version></dependency><dependency>    <groupId>org.apache.cxf</groupId>    <artifactId>cxf-rt-transports-http</artifactId>    <version>3.0.3</version></dependency><dependency>    <groupId>org.apache.cxf</groupId>    <artifactId>cxf-rt-frontend-jaxrs</artifactId>    <version>3.0.3</version></dependency> | 
在以前2.x的CXF上,bug和配置上很复杂。3.0以后很方便,用了MAVEN后,就是直接拷贝下上面的代码放到pom.xml即可。
2、配置Spring文件
首先配置CXF所需的XSD地址,表死我们引用了这个结构定义。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 
然后泥瓦匠用配置核心的配置。在<beans></beans>直接加入所需要的cxf配置。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <beanid="regUser"class="com.xidian.wq.imaopay.controller.webservice.UserInfoController"></bean>        <!-- CXF 拦截器 <ref bean="tokenInterceptor" />    <bean id="tokenInterceptor" class="com.xidian.wq.imaopay.interceptor.cxf.TokenInterceptor" />     -->         <!-- address-请求路径 -->    <jaxrs:serverid="imaoPayService"address="/ipservice">        <!-- 输入拦截器设置 -->        <jaxrs:inInterceptors>        </jaxrs:inInterceptors>                <!-- 输出拦截器设置 -->        <jaxrs:outInterceptors>        </jaxrs:outInterceptors>                 <!-- serviceBeans-暴露的WebService服务类 -->        <jaxrs:serviceBeans>             <refbean="regUser"/>        </jaxrs:serviceBeans>                  <!-- 支持的协议 -->        <jaxrs:extensionMappings>             <entrykey="json"value="application/json"/>             <entrykey="xml"value="application/xml"/>         </jaxrs:extensionMappings>                 <!-- 编码格式 -->        <jaxrs:languageMappings>               <entrykey="en"value="en-gb"/>        </jaxrs:languageMappings>            </jaxrs:server> | 
根据代码的备注,泥瓦匠想让大家记住几点重要性的点。
address=”/ipservice” 表示我们以后用此地址访问所提供的地址。
<jaxrs:serviceBeans><jaxrs:serviceBeans/> 之间加入我们要暴露出去的服务类。这里泥瓦匠以一个简单的注册类来提供。
jaxrs:extensionMappings 是表示我们需要支持的协议。
3、UserInfoController是我们需要完成的暴露服务类。下面泥瓦匠说一下初设计(这点请大家指点指点)。
三层初设计,实现WebService接口层
初设计:
按着原来的SpringMVC的三层架构,我这边把原来的Controller层转为暴露在出来的接口服务类。自然View层也就没了。
UserInfoController的代码如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @Path("/user")// 访问路径@Produces("*/*")public class UserInfoController{    @POST    @Path("/doTest")// 访问路径    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})// 响应内容 MIME 类型    public String doTest(String requestXml)//@QueryParam("regRequestXml")    {        System.out.println("服务端获取到客户端的报文如下:\n"+requestXml);                /* 构造响应报文 */        String responseXml = "响应的报文内容";//构造报文 XML 格式的字符串                return responseXml;    }} | 
暴露的接口层,也可以用inteface类加实现类来完成。泥瓦匠觉得多此一举,兴许我大言不惭。
泥瓦匠总结如下:
@POST 表示HTTP的访问模式
@Path 表示访问路径
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 响应内容 MIME 类型
泥瓦匠还在上一篇写过了对报文的处理:JAXB xml与javaBean的转换。具体请查阅。
HTTPClient 客户端,并实现简单调用
“实践出真理。”拿出来遛一遛即可。泥瓦匠简单的用HTTPClient访问
核心代码如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | /**    * 注册报文发送案例    */    private void doRegXml() throws Exception   {        /** 构造测试报文头对象 */       String randNum = RandomStringUtils.randomNumeric(8);//八位       String timeStr = TimeUtil.getTimeSimple();       DataBean dataBean = new DataBean();       dataBean.setBatch_no("N20150204");       dataBean.setData_type("000001");       dataBean.setVersion("v1.0");       dataBean.setUser_name("13957706713");       dataBean.setMsg_sign("未知");       dataBean.setRd_num(randNum);       dataBean.setRd_time(timeStr);       dataBean.setK_sign(TokenCheckUtil.getSignature(null, timeStr, randNum));       /** 构造测试报文体对象 */       RegBean regBean = new RegBean();       regBean.setReg_sn("REG20150204");       regBean.setUser_id(15);       regBean.setReg_no("33");       regBean.setReg_way("pc");       regBean.setSet_time(TimeUtil.getTimeAll());       regBean.setRet_url("未知");       regBean.setRemarks("无备注");              RegBean regBean2 = new RegBean();       regBean2.setReg_sn("REG20150203");       regBean2.setUser_id(13);       regBean2.setReg_no("44");       regBean2.setReg_way("mobile");       regBean2.setSet_time(TimeUtil.getTimeAll());       regBean2.setRet_url("未知");       regBean2.setRemarks("无备注");              List<RegBean> regBeans = new ArrayList<RegBean>();       regBeans.add(regBean);       regBeans.add(regBean2);              MsgRegBean msgRegBean = new MsgRegBean();       msgRegBean.setDataBean(dataBean);       msgRegBean.setRegBeans(regBeans);              String regRequestXml = JaxbObjectAndXmlUtil.object2Xml(msgRegBean);//构造报文 XML 格式的字符串              System.out.println("\n 请求报文XML: \n"+regRequestXml);              /** 获取的Result报文,然后客户端处理业务。 */       String resultString = HttpUtil.doPost("http://localhost:8080/imaopay/pay/ipservice/user/doTest",regRequestXml);              System.out.println("\n 获取的Result报文: \n"+resultString);          } | 
运行后,控制台打印出如下结果:
客户端打印如下:

服务端获取结果如下:

Writer:BYSocket(泥沙砖瓦浆木匠)
Reprint it anywhere u want.
[CXF REST标准实战系列] 二、Spring4.0 整合 CXF3.0,实现测试接口的更多相关文章
- [CXF REST标准实战系列] 二、Spring4.0 整合 CXF3.0,实现测试接口(转)
		转自:[CXF REST标准实战系列] 二.Spring4.0 整合 CXF3.0,实现测试接口 文章Points: 1.介绍RESTful架构风格 2.Spring配置CXF 3.三层初设计,实现W ... 
- [CXF REST标准实战系列] 一、JAXB xml与javaBean的转换(转)
		转自:[CXF REST标准实战系列] 一.JAXB xml与javaBean的转换 文章Points: 1.不认识到犯错,然后得到永久的教训. 2.认识JAXB 3.代码实战 1.不认识到犯错,然后 ... 
- [CXF REST标准实战系列] 一、JAXB xml与javaBean的转换
		Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want. 文章Points: 1.不认识到犯错,然后得到 ... 
- WCF开发实战系列二:使用IIS发布WCF服务
		WCF开发实战系列二:使用IIS发布WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 上一篇中,我们创建了一个简单的WCF服务,在测试的时候,我们使用VS200 ... 
- shiro实战系列(二)之入门实战续
		下面讲解基于实战系列一,所以相关的java文件获取pom.xml及其log4j文件同样适用于本次讲解. 一.Using Shiro Using Shiro 现在我们的 SecurityManager ... 
- SQL Server 性能优化实战系列(二)
		SQL Server datetime数据类型设计.优化误区 一.场景 在SQL Server 2005中,有一个表TestDatetime,其中Dates这个字段的数据类型是datetime,如果你 ... 
- MP实战系列(二)之集成swagger
		其实与spring+springmvc+mybatis集成swagger没什么区别,只是之前写的太不好了,所以这次决定详细写. 提到swagger不得不提rest,rest是一种架构风格,里面有对不同 ... 
- ElasticSearch实战系列二:  ElasticSearch的DSL语句使用教程---图文详解
		前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ... 
- SpringBoot基础实战系列(一)整合视图
		SpringBoot整合freemarker 1.添加依赖:springboot基本上是无缝衔接,基本上只需要添加对应的依赖,不需要或者做很少量的配置即可 注:对于springboot项目的创建此处不 ... 
随机推荐
- ELK的高级篇(测试记录各种日志)
			一.elk架构已经完成情况情况下 访问限制: 加个x-pack插件 1)一个脚本收集多个日志,if 判断写入es的索引 [root@k8s6 conf.d]# cat file.conf inpu ... 
- 在java中,事务是什么?
			一.什么是Java事务通常的观念认为,事务仅与数据库相关.事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isolat ... 
- 现网环境业务不影响,但是tomcat启动一直有error日志,ERROR org.apache.catalina.startup.ContextConfig- Unable to process Jar entry [module-info.class] from Jar [jar:file:/home/iufs/apache-tomcat/webapps/iufs/WEB-INF/lib/asm
			完整的错误日志信息: 2019-03-19 15:30:42,021 [main] INFO org.apache.catalina.core.StandardEngine- Starting Ser ... 
- 如何在Ubuntu上安装LAMP服务器系统?
			在Ubuntu上安装LAMP Ubuntu的开发人员让人们很容易安装和配置LAMP软件包,只要借助一个终端命令.所以,打开终端窗口,让我们开始入手吧. sudo apt-get install lam ... 
- python0301
			1 .pycharm的使用 2.格式化输出 # name = input('请输入姓名')# age = input('请输入年龄')# hobby = input('请输入爱好')# msg = ' ... 
- tab选项卡--jq
			<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ... 
- CSS3背景相关新增属性
			background-clip border-box:充满边框和内边距,内容. padding-box:充满内边距,内容 content-box:只充满内容 background-origin bor ... 
- 用不到 50 行的 Python 代码构建最小的区块链
			引用 译者注:随着比特币的不断发展,它的底层技术区块链也逐步走进公众视野,引起大众注意.本文用不到50行的Python代码构建最小的数据区块链,简单介绍了区块链去中心化的结构与其实现原理. 尽管一些人 ... 
- ubuntu16 gitlab的简单安装
			1.安装好ubuntu的ssh服务,使用xshell登录虚拟机 2.下载安装包: wget -c https://downloads-packages.s3.amazonaws.com/ubuntu ... 
- win10  win7 环境下 oracle 11g和Plsql的安装、卸载遇到的问题。
			* win7一体机在安装好oracle和PlSQL后,无法连接到orcl数据库,同时也忘记了sys设置的密码.(在这里应注意在安装过程中,应选择统一口令,这里我均设置成了orcl,同时也应该注意在最后 ... 
