[CXF REST标准实战系列] 二、Spring4.0 整合 CXF3.0,实现测试接口
来源:互联网 发布:松下fp x编程手册 编辑:程序博客网 时间:2024/05/29 18:34
Writer:BYSocket(泥沙砖瓦浆木匠)
- 微博:BYSocket
- 豆瓣: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
<
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地址,表死我们引用了这个结构定义。
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:context
=
"http://www.springframework.org/schema/context"
xmlns:jaxws
=
"http://cxf.apache.org/jaxws"
xmlns:jaxrs
=
"http://cxf.apache.org/jaxrs"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd">
//...配置cxf
</
beans
>
然后泥瓦匠用配置核心的配置。在<beans></beans>直接加入所需要的cxf配置。
<
bean
id
=
"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:server
id
=
"imaoPayService"
address
=
"/ipservice"
>
<!-- 输入拦截器设置 -->
<
jaxrs:inInterceptors
>
</
jaxrs:inInterceptors
>
<!-- 输出拦截器设置 -->
<
jaxrs:outInterceptors
>
</
jaxrs:outInterceptors
>
<!-- serviceBeans-暴露的WebService服务类 -->
<
jaxrs:serviceBeans
>
<
ref
bean
=
"regUser"
/>
</
jaxrs:serviceBeans
>
<!-- 支持的协议 -->
<
jaxrs:extensionMappings
>
<
entry
key
=
"json"
value
=
"application/json"
/>
<
entry
key
=
"xml"
value
=
"application/xml"
/>
</
jaxrs:extensionMappings
>
<!-- 编码格式 -->
<
jaxrs:languageMappings
>
<
entry
key
=
"en"
value
=
"en-gb"
/>
</
jaxrs:languageMappings
>
</
jaxrs:server
>
根据代码的备注,泥瓦匠想让大家记住几点重要性的点。
address=”/ipservice” 表示我们以后用此地址访问所提供的地址。
<jaxrs:serviceBeans><jaxrs:serviceBeans/> 之间加入我们要暴露出去的服务类。这里泥瓦匠以一个简单的注册类来提供。
jaxrs:extensionMappings 是表示我们需要支持的协议。
3、UserInfoController是我们需要完成的暴露服务类。下面泥瓦匠说一下初设计(这点请大家指点指点)。
三层初设计,实现WebService接口层
初设计:
按着原来的SpringMVC的三层架构,我这边把原来的Controller层转为暴露在出来的接口服务类。自然View层也就没了。
UserInfoController的代码如下:
@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访问
核心代码如下:
/**
* 注册报文发送案例
*/
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(泥沙砖瓦浆木匠)
- 微博:BYSocket
- 豆瓣:BYSocket
Reprint it anywhere u want.
- [CXF REST标准实战系列] 二、Spring4.0 整合 CXF3.0,实现测试接口
- 转载 [CXF REST标准实战系列] 二、Spring4.0 整合 CXF3.0,实现测试接口
- 简单CXF3.0整合Spring4.1
- cxf3.0+spring4.0.5错误
- CXF系列(六):CXF实现REST接口开发
- CXF3.1.6+Spring4.1.9整合
- [CXF REST标准实战系列] 一、JAXB xml与javaBean的转换
- [CXF REST标准实战系列] 一、JAXB xml与javaBean的转换
- spring4.x + cxf3.x整合实例
- WebService Spring4.3+cxf3.1.5整合Demo
- cxf3.1.4整合spring4.1.7 demo-xs
- cxf3.14+spring4.2以rest风格发布webservice
- spring整合cxf方式发布的rest webservice,调用接口
- 使用cxf发布rest服务接口,和spring的整合
- Spring4.0整合Quartz实现定时任务
- 手把手教你 cxf3.1.4整合spring4.2
- Spring 3.0.5 + CXF 2.4 + Hibernate 3.6.0 + MySQL 5.5 整合(CXF/Spring/Hibernate)实现简单的WSS4J认证 + 测试
- Spring整合CXF3.1实现webservice
- c_指针_一维数组名作为函数参数
- AJAX调试技术 IE篇
- UVA12108 Extraordinarily Tired Students(超级大模拟)
- 使用事件总线框架EventBus和Otto
- Linux 命令17-whereis命令
- [CXF REST标准实战系列] 二、Spring4.0 整合 CXF3.0,实现测试接口
- Linux 命令18-locate命令
- 机器学习之AdaBoost
- DirectShow 的简单例子
- sybase启动停止服务
- Linux 命令19-find命令概览
- 大型网站的灵魂——性能
- 函数
- 【BZOJ 1078】 [SCOI2008]斜堆