Spring DM中整合CXF-DOSGi
最近有需要用到OSGi+REST+JSON的架构组合,做了一些技术验证。这里将总结的一些经验记录下来。
OSGi框架选型:
使用了Spring-DM,主要用它的服务发布功能
一、RESTful框架选型
CXF、RestLet、RestEasy、Jersey。4个REST框架都是JAX-RS(JSR311)的实现,验证期间对它们做了一个比较
|
CXF
|
RestLet
|
RestEasy
|
Jersey
|
License
|
ASL2.0
|
LGPL
|
ASL2.0
|
GPL+CDDL
|
对OSGi支持
|
Good
|
Ok
|
No
|
No
|
对Spring支持
|
Ok
|
Ok
|
Ok
|
Ok
|
优点
|
轻量级框架对业务入侵小
|
部署包灵活
|
|
|
缺点
|
独立bundle有9M多
自带provider对JSON数据封结构复杂
|
REST标识必须写到实现类上
|
|
License限制太多
|
综合考虑CXF-DOSGi满足我们的需求:License友好、支持Spring-OSGi部署服务便利、入侵性小;
二、框架搭建
由于CXF-DOSGi自带的JSON数据绑定接口有着这样那样的问题,所以需要借助其他的数据绑定接口。Jackson是一个不错的选择。(为什么不是支持非OSGi版本CXF的jettison,是因为jettison没有Java对象和JSON数据相互转化的接口,使用起来没有Jackson便利)。
在Spring-DM中集成DOSGi非常简单,只要在Spring-DM的加载plan文件中加上DOSGi和Jackson的3个bundle(core、mapper、jaxrs),整个框架就支持RESTful了。
三、发布RESTful服务
1.定义服务接口。RESTful服务接口的定义和其他服务接口定义没有太大的区别,只是在接口类加上RESTful的声明
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
@Path("greeter")
public interface GreeterService {
@GET
@Path("greeting/{name}")
GreeterInfo greetMe(@PathParam("name") String name) throws GreeterException;
}
|
2.实现此接口
3.发布服务。同发布其他spring-osgi服务方式一样,DOSGi支持spring-osgi的方式发布RESTful服务,只需要在服务注册时设置DOSGi的相关属性就将此服务同时注册到CXF中
<beans xmlns:osgi="...">
<osgi:service interface="org.apache.cxf.dosgi.samples.springdm.DinnerService">
<osgi:service-properties>
<entry key="service.exported.interfaces" value="*" />
</osgi:service-properties>
<bean class="org.apache.cxf.dosgi.samples.springdm.impl.DinnerServiceImpl" />
</osgi:service>
</beans>
|
注:相关属性设置参考http://cxf.apache.org/distributed-osgi-reference.html,但要注意的是在DOSGi1.1时属性项“org.apache.cxf.rs.provider”说明是错误的,不应该是boolean值而是自定义的provider的类名。
4.使用自定义的JSON数据绑定接口。之前说到的“org.apache.cxf.rs.provider”设置是为了使用Jackson的接口。如果使用自定义的provider还需要在服务发布bundle中导入org.codehaus.jackson.jaxrs的包(MANIFEST.MF中Import-package)
<beans xmlns:osgi="...">
<osgi:service interface="org.apache.cxf.dosgi.samples.springdm.DinnerService">
<osgi:service-properties>
<entry key="service.exported.interfaces" value="*" />
<entry key=" org.apache.cxf.rs.provider" value=" org.codehaus.jackson.jaxrs. JacksonJsonProvider" />
</osgi:service-properties>
<bean class="org.apache.cxf.dosgi.samples.springdm.impl.DinnerServiceImpl" />
</osgi:service>
</beans>
|
分享到:
相关推荐
cxf-dosgi-ri-singlebundle-distribution-1.4.0.jar
标题 "cxf-dosgi-ri-multibundle-distribution-1.5.0-dir" 暗示我们正在讨论的是Apache CXF项目的一个版本,更具体地说,是其分布式对象服务网关接口(DOSGi)运行时实现的多捆绑库分发版,版本号为1.5.0。...
赠送jar包:cxf-core-3.0.1.jar; 赠送原API文档:cxf-core-3.0.1-javadoc.jar; 赠送源代码:cxf-core-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-core-3.0.1.pom; 包含翻译后的API文档:cxf-core-3.0.1-...
总之,Spring MVC和CXF的整合涉及到多个层次的技术,从Web服务的创建、配置到集成到Spring的MVC框架中,每个环节都需要细心处理。正确的jar包配置是成功整合的关键,只有确保所有必要的依赖都已引入,才能使得Web...
赠送jar包:cxf-rt-rs-client-3.0.1.jar; 赠送原API文档:cxf-rt-rs-client-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-rs-client-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-rs-client-3.0.1.pom; 包含...
CXF DOSGi 为提供基于CXF的分发提供程序。 CXF DOSGi允许轻松发布和使用SOAP和REST服务,而无需使用CXF蓝图扩展或使用Java代码发布服务。 因此,这是在OSGi中将CXF与声明式服务一起使用的推荐方法。 查看示例以...
赠送jar包:cxf-rt-frontend-jaxrs-3.0.1.jar; 赠送原API文档:cxf-rt-frontend-jaxrs-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-frontend-jaxrs-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-frontend-jaxrs...
赠送jar包:cxf-rt-transports-http-3.0.1.jar; 赠送原API文档:cxf-rt-transports-http-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-transports-http-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-transports-...
赠送jar包:cxf-rt-frontend-simple-3.0.1.jar; 赠送原API文档:cxf-rt-frontend-simple-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-frontend-simple-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-frontend-...
赠送jar包:cxf-rt-frontend-jaxws-3.0.1.jar; 赠送原API文档:cxf-rt-frontend-jaxws-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-frontend-jaxws-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-frontend-jaxws...
赠送jar包:cxf-rt-bindings-soap-3.0.1.jar; 赠送原API文档:cxf-rt-bindings-soap-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-bindings-soap-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-bindings-soap-...
- **cxf-dosgi**:这是Apache CXF项目的一个子项目,专门用于支持OSGi环境下Web服务的开发和部署。它提供了将Web服务封装为OSGi包的能力,并支持这些服务的分发。 #### 三、开发流程 1. **环境搭建**:安装Eclipse...
Spring4.3整合CXF3.0.4需要使用的Jar包,Spring4.0以上需要使用CXF3.0以上的jar包才可以,之前使用CXF2.7会报各种错误,cxf-core-3.0.4.jar,cxf-rt-bindings-soap-3.0.4.jar
4. **模块化设计**:CXF由多个模块组成,开发者可以根据项目需求选择使用,如 CXF-DOSGi(用于OSGi环境)、CXF-RTC(实时通信)和CXF-WS-Addressing(Web服务寻址)等。 5. **测试工具**:CXF提供了一些工具,如CXF...
在"apache-cxf-3.1.1跟3.1.6所有jar包"中,每个版本通常会包含一组核心库和扩展库,这些库分别负责不同的功能模块。例如,`cxf-3.1.6`和`cxf-3.1.1`目录下的jar文件可能包括了以下组件: - **cxf-api.jar**:包含...
这个"apache-cxf-2.5.2"版本是该框架的一个特定发行版,发布于2011年,包含了CXF框架的所有组件和依赖项,供开发者在他们的项目中使用。 Apache CXF的主要特性包括: 1. **Web服务实现**:CXF允许开发者使用JAX-WS...
在“apache-cxf-3.1.6所有jar包”中,lib目录下的jar文件涵盖了这些组件的实现。这些文件通常包括以下几类: - **CXF的核心库**:如cxf-api.jar、cxf-rt-core.jar等,提供了CXF的基础框架和核心功能。 - **JAX-WS和...
在"apache-cxf-2.2.4"中,包含了以下核心组件和特性: 1. **SOAP支持**:CXF 支持SOAP 1.1和1.2协议,可以处理各种复杂的SOAP消息结构,包括WSDL(Web服务描述语言)的第一和第二版本。 2. **RESTful服务**:CXF也...
cxf-core-3.1.16版本jar包,用于java开发使用
在“apache-cxf-3.1.11”这个压缩包中,通常会包含以下组件: 1. `cxf-api.jar`:CXF的核心API库。 2. `cxf-rt-frontend-jaxws.jar`:用于创建和消费SOAP服务的实现。 3. `cxf-rt-frontend-jaxrs.jar`:支持JAX-RS...