`
jnn
  • 浏览: 283479 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

我眼中的CXF之Configuration

    博客分类:
  • ESB
阅读更多
对于一个成熟的软件产品来说,都会涉及到配置这块的内容。对于CXF来说也不例外,如果没有Configuration模块的话是很难实现灵活的配置功能。
CXF的内部构架是支持灵活的扩展功能的, 在我前面的Blog中介绍过采用Bus来实现各模块间的解耦。而各个模块之间涉及到了很多配置的功能,例如HTTP Client端连接超时的设置,HTTP Server端是否要维护Session信息等,或者我们要发布一个服务,想采用UnWrapped编码方式,采用Aegis DataBinding,这些都是通过CXF的配置模块来实现的。简单来说CXF的配置根据配置项目的来源分为配置文件,WSDL文件,API配置。配置文件是通过XML定义的对CXF各模块配置项目定义文件, WSDL主要是通过WSDL Extension来定义了的有关Endpoint的扩展信息,而API是通过调用Java对象所提供的方法来实现对特定参数的设置功能。

在这里重点介绍CXF如何从配置文件获取配置信息以及如何实现对内部模块配置功能的。

在很多介绍CXF的文章中都说Spring是CXF中的第一公民,很多构架都是建立在Spring基础之上的。我们可以通过Spring实现灵活丰富的配置功能。概括的说CXF的Configuration配置文件部分的实现是建立在Spring Bean的基础之上的,前后发展大概经历了两个阶段,一个是Celtix建立的XML通过JAXB解析成为Spring Bean对象,一个与Xfire合并之后发展建立在Spring2.0基础上的ServerFactoryBean, ClientProxyFactoryBean系列。

CXF的配置模块是建立在Bus基础上,通过Configuration各种配置信息的管理配置功能,其核心就是我们现在看到的为个模块定义的文件。通过 JAXB 的XJC 工具,我们可以很容易的获取到schema对应的java class,通过JAXB完成schema文件到Java Object的映射。这里我们简单看一下几个核心模块的源代码。
Configurer
 
定义了根据Bean的实例名从Spring ApplicationContext中的配置信息的接口。

ConfigurerImpl 
ConfigurerImpl继承了BeanConfigurerSupport提供了一个根据Bean name获取Spring Application Context中WiringInfo的方法,并将这些WiringInfo配置到被配置的对象中去。这里大家可以重点关注一下configureBean的方法具体实现。

正是CXF ConfigureImpl提供这一通用的配置接口,使得CXF的主要模块中的构造函数,或者是对象初始化入口中都包含这样的代码就是initconfig方法。
下面是JMSDestination中的一个initConfig的具体代码

java 代码
 
  1. private void initConfig() {  
  2.         this.runtimePolicy = endpointInfo.getTraversedExtensor(new ServerBehaviorPolicyType(),ServerBehaviorPolicyType.class);  
  3.         this.serverConfig = endpointInfo.getTraversedExtensor(new ServerConfig(), ServerConfig.class);  
  4.         this.address = endpointInfo.getTraversedExtensor(new AddressType(), AddressType.class);  
  5.         this.sessionPool = endpointInfo.getTraversedExtensor(new SessionPoolType(), SessionPoolType.class);  
  6.           
  7.         Configurer configurer = base.bus.getExtension(Configurer.class);  
  8.         if (null != configurer) {  
  9.             configurer.configureBean(this);  
  10.         }  
  11.     }  
  12.    

 

   这里包含了两部分的内容,一个是从WSDL扩展信息中获取有个JMSDestination 服务端的运行试配置,服务器端配置和地址以及会话池部分的配置信息, 另一部分就是通过CXF Configurer模块处理相关的配置信息。 这里值得一提的是从这个函数可以看到CXF内部定义的配置顺序就是先WSDL,后配置文件,再API。越到后面配置的级别越高,可以很轻松的实现不同级别的配置重载。


CXF在后续的发展中将Xfire中的服务创建模型引入并发展开来 通过自定BeanDefinitionParaser,跳过了原有的JAXB解析模块,直接配置ServerFactoryBean或者是ClientProxyFactoryBean,这样极大简化了配置文件的定义工作量,并且提供很大扩展空间。有关CXF Spring Client,Server, Endpoint 配置文件的介绍大家可以参考我以前写的一篇blog

在这里简单介绍一下我在实现JettyServerEngine的Spring配置过程的一点心得。JettyHttpServerEngineFactoryJettyHttpServerEngine两者之间存在父子关系,你需要在对应的JettyHttpServerEngineFactoryBeanDefinitionPaser中解析有关JettyHttpServerEngineFactory的信息,但是需要注意的是BeanDefinitionPaser中解析的获得的对象只是一个BeanDefinitionHolder,而不是具体的JettyServerEngine实例,因此你需要在BeanFactory将BeanDefinition初始化完全后,进入Wiring阶段才能将设置好的JettyServerEngine放置到JettyServerEngineFactory中。

分享到:
评论
3 楼 jnn 2008-03-27  
这部分的内容是和CXF配置实现相关的内容,需要你研究过CXF的实现代码(当时修改了一些Configuration的code,就写下来了,那两个类对你理解CXF Spring的配置实现相当重要),如果你只想知道与CXF有关Spring配置使用相关的内容,可以看看这篇文章http://jnn.iteye.com/blog/120186 。
2 楼 quaff 2008-03-27  
hujin1979 写道
虽然我水平不差,但是不知道你在讲什么,估计很多人都和我一样,你是做笔记自己看,还是给别人看?能不能上下有源点,拜托!

人家是cxf的Committer,你不懂就闪一边去.
1 楼 hujin1979 2008-03-27  
虽然我水平不差,但是不知道你在讲什么,估计很多人都和我一样,你是做笔记自己看,还是给别人看?能不能上下有源点,拜托!

相关推荐

    apache-cxf-3.0.4

    Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、...

    实战Web Service 之CXF

    实战Web Service 之 CXF 实战Web Service 之 CXF

    apache-cxf-2.7.7

    CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载 CXF下载

    cxf-3.1.5 和 cxf-3.3.13 JAVA7和JAVA8对应CXF资源

    JAVA7和JAVA8对应CXF资源 WebService CXF 用了一天时间找,官网打不开,国内要积分,下下来又永不了。最后终于搞到手,上传上来分享给大家。 jdk版本 CXF版本 java 9及以上 3.3.x java 8 3.x java 7 2.2x --- ...

    apache-cxf-3.3.5

    There are simple APIs to quickly build code-first services, Maven plug-ins to make tooling integration easy, JAX-WS API support, Spring 2.x XML support to make configuration a snap, and much more. ...

    CXF源码:CXF_Spring源码

    CXF源码:CXF_Spring源码 CXF源码:CXF_Spring源码

    webservice框架之CXF-详细技术参考

    Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且...

    WebService之CXF开发指南

    WebService之CXF开发指南WebService之CXF开发指南WebService之CXF开发指南

    Spring CXF Restful 实例

    Spring CXF Restful 实例

    cxf源代码,样例,cxfdemo

    cxf服务端开发

    cxf.xml,cxf-servlet.xml,cxf-extension-soap.xml

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

    CXF(Webservice)开发手册

    CXF Webservice 开发手册

    cxf的jar包.rar

    利用Apache CXF开发webservice接口需要用到的jar集合 cxf-core-3.0.15.jar cxf-rt-bindings-soap-3.0.15.jar cxf-rt-bindings-xml-3.0.15.jar cxf-rt-databinding-jaxb-3.0.15.jar cxf-rt-frontend-jaxws-3.0.15.jar...

    用cxf开发webservice

    Apache CXF是一个开源的Service框架,它实现了JCP与Web Service中一些重要标准。CXF简化了构造,集成,面向服务架构(SOA)业务组件与技术的灵活复用。在CXF中,Service使用WSDL标准定义并能够使用各种不同的消息格式...

    CXF 2.3.4 入门简单例子

    说明: 1.本身是一个eclipse 的java project 2.需要JDK5,cxf 2.3.4 log4...关于cxf的深入研究,我发现国人翻译的东西很少,我想尽自己的微薄之力能给大家带些有用的东西,如果有什么关于cxf不明白之处,可以给我留言。

    cxf3.1.18.rar

    spring 4.2.0 集成的cxf3.1.18的jar包,cxf-core-3.1.18.jar、cxf-rt-bindings-soap-3.1.18.jar、cxf-rt-databinding-jaxb-3.1.18.jar、cxf-rt-frontend-jaxws-3.1.18.jar、cxf-rt-frontend-simple-3.1.18.jar、cxf-...

    Cxf转换器示例

    Web Service Cxf转换器的示例,包含源码和jar包。

    Cxf例子Cxf例子我自己写的

    CXF例子和JAR包 100%能用我自己在公司起不来郁闷死了肯定是环境的问题,家里什么都没弄,jar包导进去就OK了,什么都没弄,起来就OK

    CXF客户端支持最少jar

    CXF 客户端最少jar包支持,CXF 客户端最少jar包支持,CXF 客户端最少jar包支持,

    apache-cxf-2.5.2

    apache-cxf-2.5.2

Global site tag (gtag.js) - Google Analytics