`
jnn
  • 浏览: 287616 次
  • 性别: 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  
虽然我水平不差,但是不知道你在讲什么,估计很多人都和我一样,你是做笔记自己看,还是给别人看?能不能上下有源点,拜托!

相关推荐

    Cxf例子Cxf例子我自己写的

    【标题】:“Cxf例子Cxf例子我自己写的” 在IT领域,Apache CXF是一个非常流行的开源框架,用于构建和开发Web服务。CXF允许开发者利用Java编程语言来创建和使用Web服务,支持SOAP、RESTful等多种通信模式。本示例是...

    cxf 3.1.1 jar包

    CXF(CXF: The Apache CXF project is an open source services framework)是一个开源的Java服务框架,它允许开发者创建和消费各种Web服务。CXF的名字来源于"Code first"和"XML first",代表着它支持从Java代码或者...

    cxf的jar包

    CXF(CXF: Composite eXtensible Services Framework)是一个开源的Java框架,它用于构建和开发服务导向架构(SOA)中的Web服务。CXF允许开发者以他们选择的语言(如Java)编写服务端和客户端代码,同时支持多种Web...

    我的cxf与ws-security

    【标题】"我的cxf与ws-security"涉及的是在Java Web服务开发中使用Apache CXF框架集成WS-Security(Web Service Security)的安全机制。Apache CXF是一个开源的、功能丰富的Web服务框架,它允许开发者创建和消费各种...

    Cxf转换器示例

    【Cxf转换器示例】是一个关于Web服务技术的实践项目,主要聚焦于Apache CXF框架中的转换器(Converter)功能。Apache CXF是一个开源的Java框架,它用于构建和开发服务导向架构(SOA)和RESTful应用程序。CXF不仅支持...

    cxf框架包 apache-cxf-3.4.3.tar.gz

    Apache CXF是一个开源的Java框架,它主要用于构建和开发Web服务。这个框架允许开发者通过SOAP、RESTful HTTP、XML以及各种协议来实现服务接口。在本案例中,我们讨论的是"apache-cxf-3.4.3.tar.gz",这是Apache CXF ...

    实战Web Service 之CXF

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

    CXF-3.1.11jar包

    Apache CXF是一个开源的服务框架,它允许开发人员创建和消费各种Web服务。CXF这个名字来源于两个项目的合并:Celtix和XFire,这两个项目都专注于Web服务的实现。CXF3.1.11是该框架的一个特定版本,发布于某个时间点...

    CXF实现SSL安全验证

    ### CXF实现SSL安全验证 在现代网络应用中,安全通信是至关重要的。Apache CXF 是一个开源项目,提供了一套强大的工具和服务框架,用于构建和开发基于标准的服务(如 Web Services)。本文将详细介绍如何使用 CXF ...

    CXF源码:CXF_Spring源码

    【CXF源码分析】 Apache CXF 是一个开源的Java框架,主要用于构建和服务导向架构(SOA)的应用程序。它提供了多种方式来实现Web服务,包括基于Java API for Web Services (JAX-WS) 和 Java API for RESTful Web ...

    cxf源代码,样例,cxfdemo

    【标题】"cxf源代码,样例,cxfdemo" 涉及的主要知识点是Apache CXF框架的使用,特别是其在服务端开发中的应用。Apache CXF是一个开源的Java框架,它允许开发者创建和消费各种Web服务,包括SOAP和RESTful服务。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下载

    apache-cxf-2.5.2

    8. **测试工具**:CXF提供了诸如CXF TestSuite之类的工具,帮助开发者进行服务端和客户端的测试。 9. **MTOM/XOP**:CXF支持Message Transmission Optimization Mechanism (MTOM) 和XML-binary Optimized Packaging...

    springboot2.1.5集成CXF3.2.5,webservice服务端

    在IT行业中,Spring Boot和Apache CXF是两个非常重要的组件,它们在开发高效、轻量级的Web服务中发挥着关键作用。本文将详细介绍如何在Spring Boot 2.1.5版本中集成CXF 3.2.5,以创建一个功能完备的Web Service...

    Apache CXF开发Web Service 理解CXF Frontends之Code-First

    Apache CXF是一个开源的Java框架,它用于构建和开发Web服务。这个框架提供了一种灵活的方式来进行服务的创建、发布和调用。"Code-First"是CXF的一个重要概念,意味着开发者首先编写Java代码,然后CXF会自动生成相应...

    Spring CXF Restful 实例

    在IT行业中,Spring CXF是一个广泛使用的开源框架,它整合了Spring框架的功能和Apache CXF的服务堆栈,为开发人员提供了构建和实现Web服务的强大工具。在这个“Spring CXF Restful实例”中,我们将深入探讨如何利用...

    2.CXF安全访问之Http Basic Auth(一)

    <http:conduit name="{http://cxf.apache.org/transports/http/configuration}*.http-conduit"> ``` 这段配置将所有CXF HTTP服务的请求都设置为需要基本认证,并且指定认证区域为"My Realm"。 在客户端,你需要...

    CXF客户端支持最少jar

    在Java世界中,Apache CXF是一个广泛使用的开源框架,它提供了服务级的API来构建和消费Web服务。CXF客户端是开发人员用来与CXF服务交互的重要组件,它允许我们轻松地调用远程Web服务。然而,为了减小程序的体积和...

    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. ...

Global site tag (gtag.js) - Google Analytics