<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Willem's Blog</title>
    <description>目前参与 Apache Camel 以及 Apache CXF 开发。
关注 Apache ServiceMix。

[url=http://www.ohloh.net/accounts/4473?ref=Detailed]  [img]http://www.ohloh.net/accounts/4473/widgets/account_detailed.gif[/img][/url]</description>
    <link>http://jnn.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>Spring Integration component of Camel</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/185928" style="color:red;">http://jnn.javaeye.com/blog/185928</a>&nbsp;
          发表时间: 2008年04月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近我在Camel中做了一个针对Spring Integration 的component，这样大家可以在Camel中很轻松地与Spring Integration中的模块进行交互。</p>
<p>&nbsp;有关Spring Integration Component 的使用大家可以参考Camel中的<a href="http://cwiki.apache.org/confluence/display/CAMEL/SpringIntegration">wiki</a>
。 </p>
<p>也许大家会问，<a href="http://www.springframework.org/spring-integration">Spring Integration</a>
 和<a href="http://cwiki.apache.org/CAMEL/">Camel</a>
都实现了<a href="http://www.eaipatterns.com/">Enteripse Integration Pattern</a>
 那两者有什么区别吗？</p>
<p>&nbsp;</p>
<p>下面是 Spring Integration 的官方介绍&nbsp;</p>
<p> It provides an extension of the Spring programming model to support the well-known <a href="http://www.eaipatterns.com/" target="_blank">Enterprise Integration Patterns</a>
 while building on the Spring Framework's existing support for enterprise integration. It enables simple messaging <em>within</em>
Spring-based applications and integrates with external systems via
simple adapters. Those adapters provide a higher-level of abstraction
over Spring's support for remoting, messaging, and scheduling. Spring
Integration's primary goal is to provide a simple model for building
enterprise integration solutions while maintaining the separation of
concerns that is essential for producing maintainable, testable code.</p>
<p>从上面我们可以看出Spring Integration所提供的EIP实现时构建在Spring的编程模型上的；Camel也提供了Spring的支持，你可以通过Spring配置文件来描述复杂的EIP模型，从这个方面来说两者打成平手。</p>
<p>Spring&nbsp;
Integration 是通过adapter来接入外部消息系统的，这和Camel的Component很类似。由于Spring
Integration是最近才推出了1.0.0M3, 其所支持的接入的外部系统还很少。从这个角度来说的话，在Camel中实现Spring
Integration Component就有很大的必要了，一个是在Spring Integration
模块中可以复用Camel的component，另一个方面来说Camel可以借助Spring
Integration中对SpringBean的支持实现对Spring 编成模式的无缝支持。</p>
<p>有兴趣的朋友可以使用svn 从下面的地址下载Camel最新的代码，体验一下。</p>
<p>&nbsp;http://svn.apache.org/repos/asf/activemq/camel/trunk/</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/185928#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Apr 2008 16:04:41 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/185928</link>
        <guid>http://jnn.javaeye.com/blog/185928</guid>
      </item>
      <item>
        <title>Camel 1.3.0 发布了</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/180641" style="color:red;">http://jnn.javaeye.com/blog/180641</a>&nbsp;
          发表时间: 2008年04月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>经过5个月的开发与等待, Camel 1.3.0 终于发布了.</p><div style="padding-right: 20px; float: left; margin-left: -20px"> <p><img src="http://activemq.apache.org/camel/download.data/camel-box-v1.0-150x200.png" border="0" align="absmiddle" alt="" /></p></div>   <h2><a name="Camel1.3.0Release-NewandNoteworthy" title="Camel1.3.0Release-NewandNoteworthy"></a>New and Noteworthy</h2>  <p>Welcome to the 1.3.0 release which includes 208 new features, improvements and bug fixes such as...</p>  <ul><li>improved <a href="http://cwiki.apache.org/confluence/display/CAMEL/Bean+Integration" title="Bean Integration">Bean Integration</a></li><li>improved testing via <a href="http://cwiki.apache.org/confluence/display/CAMEL/Spring+Testing" title="Spring Testing">Spring Testing</a> along with the <a href="http://cwiki.apache.org/confluence/display/CAMEL/Mock" title="Mock">Mock</a>, <a href="http://cwiki.apache.org/confluence/display/CAMEL/Test" title="Test">Test</a>, <a href="http://cwiki.apache.org/confluence/display/CAMEL/DataSet" title="DataSet">DataSet</a> components</li><li>browsing of endpoints via the <a href="http://cwiki.apache.org/confluence/display/CAMEL/BrowsableEndpoint" title="BrowsableEndpoint">BrowsableEndpoint</a> with support in the <a href="http://cwiki.apache.org/confluence/display/CAMEL/JMS" title="JMS">JMS</a>, <a href="http://cwiki.apache.org/confluence/display/CAMEL/List" title="List">List</a>, <a href="http://cwiki.apache.org/confluence/display/CAMEL/Mock" title="Mock">Mock</a>, <a href="http://cwiki.apache.org/confluence/display/CAMEL/SEDA" title="SEDA">SEDA</a> and <a href="http://cwiki.apache.org/confluence/display/CAMEL/VM" title="VM">VM</a> components</li><li>improved support for message exchange patterns such as InOut for JMS</li><li>various improvements in <a href="http://cwiki.apache.org/confluence/display/CAMEL/CXF" title="CXF">CXF</a>, <a href="http://cwiki.apache.org/confluence/display/CAMEL/iBATIS" title="iBATIS">iBatis</a>, <a href="http://cwiki.apache.org/confluence/display/CAMEL/Jetty" title="Jetty">Jetty</a>, <a href="http://cwiki.apache.org/confluence/display/CAMEL/MINA" title="MINA">MINA</a> components</li><li>improved <a href="http://cwiki.apache.org/confluence/display/CAMEL/XPath" title="XPath">XPath</a> and <a href="http://cwiki.apache.org/confluence/display/CAMEL/XQuery" title="XQuery">XQuery</a> support in Spring XML and with easier namespace configuration</li><li>default to more efficient JMS usage when working with <span class="nobr"><a href="https://issues.apache.org/activemq/browse/CAMEL-294" title="Visit page outside Confluence">Spring 2.5.x to avoid a previous Spring bug</a></span></li><li>various improvements in the DSL and with error handling</li><li>improved automatic <a href="http://cwiki.apache.org/confluence/display/CAMEL/Type+Converter" title="Type Converter">Type Converter</a> implementations</li><li>method invocations now supported in <a href="http://cwiki.apache.org/confluence/display/CAMEL/EL" title="EL">EL</a> expressions</li><li><span class="nobr"><a href="http://cwiki.apache.org/CAMEL/camel-transport-for-cxf.html" title="Visit page outside Confluence">CXF transport API</a></span> now supported in <a href="http://cwiki.apache.org/confluence/display/CAMEL/CXF" title="CXF">CXF</a> component, you could leverage the power of Camel mediation in Apache CXF</li></ul><p>大家可以通过下面的链接<a href="http://cwiki.apache.org/CAMEL/camel-130-release.html">下载</a></p>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/180641#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Apr 2008 22:39:51 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/180641</link>
        <guid>http://jnn.javaeye.com/blog/180641</guid>
      </item>
      <item>
        <title>CXF 2.0.5 发布了</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/178589" style="color:red;">http://jnn.javaeye.com/blog/178589</a>&nbsp;
          发表时间: 2008年04月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这个版本应该是CXF 在Apache incubator下面的最后一次发布。 据可靠线报，CXF即将在这个月中正式宣布毕业并成为Apache顶级项目。<br /><br />CXF2.0.5修正了CXF2.0.4 中近30多个bug，大家可以通过下面的链接获知详细的<a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12312931&styleName=Html&projectId=12310511&Create=Create" target="_blank">修改记录</a>。<br /><br /><br />你可以<a href="http://cwiki.apache.org/confluence/display/CXF/Download" target="_blank">在此下载</a>到CXF 2.0.5，并<a href="http://cwiki.apache.org/confluence/display/CXF/Apache+CXF+2.0.5+Incubating+Release+Notes" target="_blank">在此获得详细的发布信息</a>。
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/178589#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Apr 2008 22:34:47 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/178589</link>
        <guid>http://jnn.javaeye.com/blog/178589</guid>
      </item>
      <item>
        <title>WebService LoadBalancing with Apache server</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/174324" style="color:red;">http://jnn.javaeye.com/blog/174324</a>&nbsp;
          发表时间: 2008年03月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Apache httpd 2.0.x 中的proxy_balancer 提供一个很好的实现负载均衡的功能，不管是对内还是对外，你可以很轻松的将用户对httpd的请求转交到另外一个节点上。我们就是通过这个原理在一个普通的httpd 服务上实现一个对后台Web services 的负载均衡。<br /><br />你可以通过下面的配置，可以将用户对httpd 的请求分发到对多个web services endpoints 上。<br /><br /> <br />需要配置apache 中的httpd.conf<br /><br />apache 需要的是2.2.x 版本。<br /><br />加载下面的module<br /><br /><pre name="code" class="xml">
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so


ProxyPass /YourOutSideServiceAddress balancer://mycluster nofailover=On
&lt;Proxy balancer://mycluster>
BalancerMember http://endpointA:9001/serviceA smax=50 max=50 loadfactor=50 timeout=2
BalancerMember http://endpointB:9001/serviceA smax=50 max=50 loadfactor=50 timeout=2
&lt;/Proxy></pre>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/174324#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 20 Mar 2008 22:28:08 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/174324</link>
        <guid>http://jnn.javaeye.com/blog/174324</guid>
      </item>
      <item>
        <title>Python is just the language for you</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/172827" style="color:red;">http://jnn.javaeye.com/blog/172827</a>&nbsp;
          发表时间: 2008年03月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这是我最近写的一个将Camel发布在maven2的shapshot schema 拷贝到指定目录下的<a href="https://svn.apache.org/repos/asf/activemq/scripts/copy_snapshot_xsd.py" target="_blank">python小脚本</a>。<br /><br />发现自己开始迷恋上了python，体验着一种新的写程序的方式。<br />以前不管是用bash 还是写windows bat,就是简单的设置一下环境变量然后调用一下写好的程序，很少做一些逻辑的判断（小声说，复杂的我也不会）。而用python在写脚本的同时不刻意拘泥与C++或者Java的强类型处理，简单几行代码就完成了处理文件的操作，突然感觉写程序会如此的轻松。<br /><br />下面是从python tutorise 上面拷贝下来的，你在什么的情况下使用python.<br /><br /><br />If you do much work on computers, eventually you find that there's some task you'd like to automate. For example, you may wish to perform a search-and-replace over a large number of text files, or rename and rearrange a bunch of photo files in a complicated way. Perhaps you'd like to write a small custom database, or a specialized GUI application, or a simple game.<br /><br />If you're a professional software developer, you may have to work with several C/C++/Java libraries but find the usual write/compile/test/re-compile cycle is too slow. Perhaps you're writing a test suite for such a library and find writing the testing code a tedious task. Or maybe you've written a program that could use an extension language, and you don't want to design and implement a whole new language for your application.<br /> <br />作为对传统语言的扩展，你可以把 python看成是一个超级胶水，通过这个超级胶水可以让在已有的库函数上快速构建自己需要的应用，如果当前的库不好用，或者没有适合你的使用的库，你可以用C或者Java写一个简单的扩展然后交给python来调用。<br /><br />如果你想让你做的系统操作更简单，或者把你从沉重而重复的命令行指令中解脱出来，和我一样学习python吧。
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/172827#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 17 Mar 2008 09:02:39 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/172827</link>
        <guid>http://jnn.javaeye.com/blog/172827</guid>
      </item>
      <item>
        <title>How to use camel transport for CXF</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/169403" style="color:red;">http://jnn.javaeye.com/blog/169403</a>&nbsp;
          发表时间: 2008年03月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>这几天忙着写有关Camel和CXF集成<a href="http://activemq.apache.org/camel/camel-cxf-component.html">实现的文档</a>，其中一个就是利用用Camel 来实现CXF 的Transport API，这样你就可以十分轻松的将Camel 强大的路由功能集成到CXF中。</p><p>你可以在Camel transport factory 中配置一个Camel context或者通过Spring配置文件将Context 设置到对应的Conduit或者Destination中，Camel transport会根据你指定的address URI将对应的Conduit或者Desitination绑定到你指定的Camel context 中的endpoint上。</p><p>说了这么多，有兴趣的朋友还是看看这篇我写的<a href="http://activemq.apache.org/camel/camel-transport-for-cxf.html">wiki</a>吧。 </p><p>欢迎提出宝贵意见哦！ </p>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/169403#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 06 Mar 2008 09:59:21 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/169403</link>
        <guid>http://jnn.javaeye.com/blog/169403</guid>
      </item>
      <item>
        <title>开源两事记</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/163191" style="color:red;">http://jnn.javaeye.com/blog/163191</a>&nbsp;
          发表时间: 2008年02月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近发生了很多事情，让我不得不思考一下我现在和接下来需要做的事情。<br /><br />在过去的2007年中，开源软件开发方面上的两件事情使我受益非浅。<br /><br />    * 一个是 CXF 2.0 的发布，用户社区的壮大。<br /><br />那是在2007年7月初的时候，在此之前我没有想到CXF的用户邮件组会一下子活跃很多，记得当时我做过一个小小的统计，基本上是平均一个小时就有一封用户的来信，询问有关CXF使用问题。一下子回复用户的来信就成为了我每天日常工作的一部分。在回答用户的问题的过程中，我渐渐感觉开源项目社区（Community）的重要性。<br /><br />一直以来我都认为好的软件不是工程师设计出来的，而是用户们使用出来的。作为Coder你会根据需求设计代码，但是如果你写的软件没有人用，那你将因为无法得到及时的反馈，而不可能进一部分改进你的代码，或者是修正你设计中的缺陷。<br /><br />有人说开源软件和商业软件比，因为缺乏测试和支持，其软件质量让我们不能将开源软件应用到生产系统中。对此，我还是要用上面我说的那句话来回答，软件是使用出来的，而不是设计出来的。<br /><br />大量用户们的使用，给你写出的软件注入了无限的活力。一些用户会不断测试你的刚写出的代码；一些用户会帮助你完善文档；一些用户会跟踪你的代码并为他所遇到的问题打上补丁。同时这一切将会在你刚提交的代码后的几天之内发生。<br /><br />试想一下，如果你现在在开发一个商业软件，你也许会在提交代码后的两个礼拜中，无法得到你所写代码的直接反馈。或许当你在即将忘记你所写代码的某个时候，突然接到了用户或者是测试人员报过来的一个Bug，这个时候你对你所写的软件质量是一个什么样的感受。<br /><br />这也是我为什么愿意投入很多精力来回复开源社区用户们提问以及参与社区建设的重要原因之一。<br /><br />    * 一个是成为Camel的Committer<br /><br /><br />如果说成为CXF Committer是占了Initial Committer的便宜（不需要走Apache的Committer惯用流程），那我成为Camel的mmitter可谓是经历了进半年的考察期。 起初接触Camel是因为James想将CXF集成进Camel中，而我当时对CXF有一定了解同时也想多参与一些Apache的项目开发，我认为成为Committer只需要提交3个以上patch就可以了。<br /><br />按照DanKlup 在CXF中写的Getting involed 中的提示，要想成为 Apache 项目的Committer，你熟悉ASF的工作方式，同时一个重要内容是你需要通过不断用提交patch的方式骚扰项目中的其他Committer，让他们厌烦帮你打patch，谓你挣取足够的获取Committer权力的信用。<br /><br /><br />由于当时我还投入了部分精力在CXF项目中，在半年中打的patch不到10个，估计没有突破James对Committer的要求，所有迟迟没有获得Camel的Committer权限 :(。好在两个礼拜前我终于拿到Camel的 committer权限，也让我再次体验了一下成为 Apache committer的快乐。
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/163191#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 18 Feb 2008 21:58:15 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/163191</link>
        <guid>http://jnn.javaeye.com/blog/163191</guid>
      </item>
      <item>
        <title>CXF 2.0.4 Released</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/160268" style="color:red;">http://jnn.javaeye.com/blog/160268</a>&nbsp;
          发表时间: 2008年01月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          CXF 2.0.4 已经正式发布了,大家可以通过下面的地址下载.<br /><br />http://cwiki.apache.org/confluence/display/CXF/Download<br /><br /><br />在2.0.4 中修正了大量与Aegis相关的bug ,以及新近发现的CXF policy 内存泄漏以及与Jetty 关闭相关的bug, 因此强烈建议大家把CXF版本升级到 2.0.4.<br /><br />大家可以通过下面的链接获取有关CXF 2.0.4 的修改记录.<br /><br />http://issues.apache.org/jira/browse/CXF?report=com.atlassian.jira.plugin.system.project:changelog-panel
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/160268#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Jan 2008 10:29:56 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/160268</link>
        <guid>http://jnn.javaeye.com/blog/160268</guid>
      </item>
      <item>
        <title>How to work on the offline subversion repository</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/160365" style="color:red;">http://jnn.javaeye.com/blog/160365</a>&nbsp;
          发表时间: 2008年01月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Subversion作为开源社区的使用广泛的版本管理工具获得越来越多人的认可。由于其设计理念的关系，简化branch的很多功能，同时对于Merge的功能支持有限，为了能够支持分布式的开发就需要大家采用频繁少改动量的方式向代码库中提交代码，这样尽量减少代码中的冲突。一旦你的网络环境改变了，例如出差或者是休假，那你就很难在你的代码中进行复杂的操作。</p><p>&nbsp;</p><p>这里可以和举一个简单的例子，就是你现在想对你的代码进行refactoring的操作，需要修改一些类名（svn mv classA.java classB.java)，但是这时你对classA.java 已经进行了一些修改，这样如果你不能及时将你的修改操作进行提交的话，那你就无法很方便的执行上面的重命名操作。</p><p>&nbsp;</p><p>那有没有有一个好的方法能帮我完成一个离线的Subversion代码修改呢？&lt;p&gt;我上个礼拜在出差的过程中就遇到这样的问题，由于当时的环境不允许我连入公司内部网络提交代码，我需要构建一个离线的本地开发环境来记录我对代码的修改，同时在回到公司之后将这些代码修改提交到公司内部的Subversion repository。</p><p>&nbsp;</p><p>通过Google 我找到了一个叫做<a href="http://git.or.cz/">Git</a>的版本管理工具，这个软件提供了一个git-svn 子命令，这样你就可以轻松实现一个基于你的Subversion代码库基础上新独立的Git代码库，当然这样你自己在本地的修改可以被Git管理起来，通过 git-svn 完成Subversion代码库 到 本地代码库的同步，以及本地代码库到Subversion代码库的同步工作。</p><p>具体步骤如下</p><p>1. 使用 git-svn clone &lt;your svn url&gt; projectname</p><p> 2. 这时你可以放心出差或者是度假了，如果有必要你可以在 projectname 目录下进行你的工作</p><p>3. 使用git commit -a -m &quot;I am commiting the code offline &quot; 提交你的代码</p><p>4. 当你的出差或者是度假回来</p><p>5. 你可以使用 git-svn rebase 来获取自从你离线之后SVN的所有改变信息，当然如果发生冲突了，那还是需要你手工解决这些冲突。</p><p>6. 然后你可以使用 git-svn dcommit将你的工作内容提交Subversion的代码库中，当然没有人知道你在用Git来管理你本地的代码；）</p><p>&nbsp;</p><p>是不是有点动心了，我们现在开始准备安装Git。</p><p>如果你是Linux用户，大家可以用apt 或者 yum 来获取Git 的安装包。</p><p>对于Windows用户，目前我知道的方法就是通过<a href="http://www.cygwin.com/">CygWin</a>安装git包。</p><p>如果你是Vista用户，你会遇到一些额外的问题，好在这些问题都有相关的解决方法，你可以参考Capi's Coroner 的 <a href="http://www.dont-panic.cc/capi/?s=git">Blog</a></p><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/160365#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 06 Jan 2008 17:19:34 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/160365</link>
        <guid>http://jnn.javaeye.com/blog/160365</guid>
      </item>
      <item>
        <title>How to configure CXF HTTP Client</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/145677" style="color:red;">http://jnn.javaeye.com/blog/145677</a>&nbsp;
          发表时间: 2007年12月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>前段时间看到邮件列表中提到很多有关设置CXF HTTP Client 问题，今天在这里整理一下CXF HTTP Client的相关配置，本来想在我的<a href="http://willem.bokeland.com/">blog</a>中单独发表的，后来看了一下<a href="http://cwiki.apache.org/confluence/display/CXF20DOC/Client+HTTP+Transport">CXF Wiki</a>中也没有相关的内容，想了一下还是在Wiki中进行更新了，毕竟看<a href="http://cwiki.apache.org/CXF20DOC/index.html">CXF User Guide</a>的人比较多一点。</p>
<p> 在这里我只是做了一个小结，这样如果大家再有类似的问题，可以直接到 <a href="http://cwiki.apache.org/CXF20DOC/client-http-transport.html">Client Http Configure</a>上寻找答案了  今天我更新内容有</p>
<p> 1. 如何通过程序方式配置HTTP Conduit    其中包含了通过配置文件以及WSDL的方式来进行设置HTTP Conduit属性，也包含了新添加的通过程序代码的方式来进行配置。  </p>
<p>2. 如何重载WSDL中定义的地址信息    如果你已经通过WSDL2Java生成了Client Proxy代码，这时你想在程序中修改服务地址，可以参考 <a href="http://cwiki.apache.org/CXF20DOC/client-http-transport.html">CXF Wiki</a>中给出的三个选择方案。</p>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/145677#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 03 Dec 2007 18:41:15 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/145677</link>
        <guid>http://jnn.javaeye.com/blog/145677</guid>
      </item>
      <item>
        <title>Apache Camel 1.2 Release 了</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/134509" style="color:red;">http://jnn.javaeye.com/blog/134509</a>&nbsp;
          发表时间: 2007年10月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Apache Camel 1.2 终于Release了。这也意味着我写的CXF component正式进入Camel Project中了。</p>
<p>下面是有关Apache Camel的介绍: </p>
<p>Apache Camel is a powerful rule based routing and mediation engine which provides a POJO based implementation of the Enterprise Integration Patterns using an extremely powerful fluent API (or declarative Java Domain Specific Language) to configure routing and mediation rules. The Domain Specific Language means that Apache Camel can support type-safe smart completion of routing rules in your IDE using regular Java code without huge amounts of XML configuration files; though Xml Configuration inside Spring is also supported.</p>
<p>Apache Camel 是一个非常强大的基于规则的路由以及媒介引擎，该引擎提供了一个基于POJO的 企业应用模式(Enterprise Integration Patterns)的实现，你可以采用其异常强大且十分易用的API (可以说是一种Java的领域定义语言 Domain Specific Language)来配置其路由或者中介的规则。 通过这种领域定义语言，你可以在你的IDE中用简单的Java Code就可以写出一个类型安全并具有一定智能的规则描述文件。这与那种复杂的XML配置相比极大简化了规则定义开发。 当然Apache Camel也提供了一个对Spring 配置文件的支持。</p>
<p>Apache Camel uses URIs so that it can easily work directly with any kind of Transport or messaging model such as HTTP, ActiveMQ, JMS, JBI, SCA, MINA or CXF Bus API together with working with pluggable Data Format options. Apache Camel is also a small library which has minimal dependencies for easy embedding in any Java application.</p>
<p>Apache Camel 采用URI来描述各种组件，这样你可以很方便地与各种传输或者消息模块进行交互，其中包含的模块有  HTTP, ActiveMQ, JMS, JBI, SCA, MINA or CXF Bus API。 这些模块是采用可插拔的方式进行工作的。Apache Camel的核心十分小巧你可以很容易地将其集成在各种Java应用中。</p>
<p>Apache Camel can be used as a routing and mediation engine for the following projects:</p>
<p>目前Apache Camel作为一个路由以及媒介引擎可以与如下项目集成。</p>
<p>      </p>
<li> <a href="http://activemq.apache.org/">Apache ActiveMQ</a> which is the most popular and powerful open source message broker</li>
<li> <a href="http://incubator.apache.org/cxf/">Apache CXF</a> which is a smart web services suite (JAX-WS)</li>
<li> <a href="http://mina.apache.org/">Apache MINA</a> a networking framework</li>
<li> <a href="http://incubator.apache.org/servicemix/">Apache ServiceMix</a> which is the most popular and powerful distributed open source ESB and JBI container</li>
<p>So don't get the hump, try Camel today! </p>
<p>现在Camel 1.2 发布了，大家可以从如下地址<a href="http://cwiki.apache.org/CAMEL/camel-120-release.html">下载</a>。</p>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/134509#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 22 Oct 2007 09:25:48 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/134509</link>
        <guid>http://jnn.javaeye.com/blog/134509</guid>
      </item>
      <item>
        <title>我眼中的CXF之Configuration</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/129662" style="color:red;">http://jnn.javaeye.com/blog/129662</a>&nbsp;
          发表时间: 2007年10月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          对于一个成熟的软件产品来说，都会涉及到配置这块的内容。对于CXF来说也不例外，如果没有<a href="http://cwiki.apache.org/CXF20DOC/configuration.html">Configuration</a>模块的话是很难实现灵活的配置功能。 <br />
CXF的内部构架是支持灵活的扩展功能的, 在我前面的Blog中介绍过采用<a href="http://willem.bokeland.com/blog/794/6089/2007/06/24/207642">Bus</a>来实现各模块间的解耦。而各个模块之间涉及到了很多配置的功能，例如HTTP Client端连接超时的设置，HTTP Server端是否要维护Session信息等，或者我们要发布一个服务，想采用UnWrapped编码方式，采用Aegis DataBinding，这些都是通过CXF的配置模块来实现的。简单来说CXF的配置根据配置项目的来源分为配置文件，WSDL文件，API配置。配置文件是通过XML定义的对CXF各模块配置项目定义文件， WSDL主要是通过WSDL Extension来定义了的有关Endpoint的扩展信息，而API是通过调用Java对象所提供的方法来实现对特定参数的设置功能。<br />
<br />
在这里重点介绍CXF如何从配置文件获取配置信息以及如何实现对内部模块配置功能的。<br />
<br />
在很多介绍CXF的文章中都说Spring是CXF中的第一公民，很多构架都是建立在Spring基础之上的。我们可以通过Spring实现灵活丰富的配置功能。概括的说CXF的Configuration配置文件部分的实现是建立在Spring Bean的基础之上的，前后发展大概经历了两个阶段，一个是Celtix建立的XML通过JAXB解析成为Spring Bean对象，一个与Xfire合并之后发展建立在Spring2.0基础上的ServerFactoryBean, ClientProxyFactoryBean系列。<br />
<br />
CXF的配置模块是建立在Bus基础上，通过Configuration各种配置信息的管理配置功能，其核心就是我们现在看到的为个模块定义的文件。通过 JAXB 的XJC 工具，我们可以很容易的获取到schema对应的java class，通过JAXB完成schema文件到Java Object的映射。这里我们简单看一下几个核心模块的源代码。  <a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/configuration/Configurer.java"><br />
Configurer</a>&nbsp; <br />
定义了根据Bean的实例名从Spring ApplicationContext中的配置信息的接口。<br />
<br />
<a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/configuration/spring/ConfigurerImpl.java">ConfigurerImpl&nbsp;</a> <br />
ConfigurerImpl继承了BeanConfigurerSupport提供了一个根据Bean name获取Spring Application Context中WiringInfo的方法，并将这些WiringInfo配置到被配置的对象中去。这里大家可以重点关注一下configureBean的方法具体实现。<br />
<br />
正是CXF ConfigureImpl提供这一通用的配置接口，使得CXF的主要模块中的构造函数，或者是对象初始化入口中都包含这样的代码就是initconfig方法。<br />
下面是<a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java">JMSDestination</a>中的一个initConfig的具体代码<br />
<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;initConfig()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.runtimePolicy&nbsp;=&nbsp;endpointInfo.getTraversedExtensor(</span><span class="keyword">new</span><span>&nbsp;ServerBehaviorPolicyType(),ServerBehaviorPolicyType.</span><span class="keyword">class</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.serverConfig&nbsp;=&nbsp;endpointInfo.getTraversedExtensor(</span><span class="keyword">new</span><span>&nbsp;ServerConfig(),&nbsp;ServerConfig.</span><span class="keyword">class</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.address&nbsp;=&nbsp;endpointInfo.getTraversedExtensor(</span><span class="keyword">new</span><span>&nbsp;AddressType(),&nbsp;AddressType.</span><span class="keyword">class</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.sessionPool&nbsp;=&nbsp;endpointInfo.getTraversedExtensor(</span><span class="keyword">new</span><span>&nbsp;SessionPoolType(),&nbsp;SessionPoolType.</span><span class="keyword">class</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configurer&nbsp;configurer&nbsp;=&nbsp;base.bus.getExtension(Configurer.<span class="keyword">class</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(</span><span class="keyword">null</span><span>&nbsp;!=&nbsp;configurer)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configurer.configureBean(<span class="keyword">this</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
&nbsp;&nbsp; 这里包含了两部分的内容，一个是从WSDL扩展信息中获取有个JMSDestination 服务端的运行试配置，服务器端配置和地址以及会话池部分的配置信息， 另一部分就是通过CXF Configurer模块处理相关的配置信息。 这里值得一提的是从这个函数可以看到CXF内部定义的配置顺序就是先WSDL，后配置文件，再API。越到后面配置的级别越高，可以很轻松的实现不同级别的配置重载。<br />
<p><br />
CXF在后续的发展中将Xfire中的服务创建模型引入并发展开来 通过自定BeanDefinitionParaser，跳过了原有的JAXB解析模块，直接配置ServerFactoryBean或者是ClientProxyFactoryBean，这样极大简化了配置文件的定义工作量，并且提供很大扩展空间。有关CXF Spring Client，Server， Endpoint 配置文件的介绍大家可以参考我以前写的一篇<a href="http://jnn.javaeye.com/blog/120186">blog</a>。<br />
<br />
在这里简单介绍一下我在实现JettyServerEngine的Spring配置过程的一点心得。<a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactory.java">JettyHttpServerEngineFactory</a>和<a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java">JettyHttpServerEngine</a>两者之间存在父子关系，你需要在对应的<a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/spring/JettyHTTPServerEngineFactoryBeanDefinitionParser.java">JettyHttpServerEngineFactoryBeanDefinitionPaser</a>中解析有关JettyHttpServerEngineFactory的信息，但是需要注意的是BeanDefinitionPaser中解析的获得的对象只是一个BeanDefinitionHolder，而不是具体的JettyServerEngine实例，因此你需要在BeanFactory将BeanDefinition初始化完全后，进入Wiring阶段才能将设置好的JettyServerEngine放置到JettyServerEngineFactory中。<br />
<br />
</p>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/129662#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 05 Oct 2007 10:11:51 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/129662</link>
        <guid>http://jnn.javaeye.com/blog/129662</guid>
      </item>
      <item>
        <title>CXF 2.0.2 发布了</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/127195" style="color:red;">http://jnn.javaeye.com/blog/127195</a>&nbsp;
          发表时间: 2007年09月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          经过快一个月的投票，CXF2.0.2 终于发布了。<br />
下面是从CXF 邮件列表上转来的消息。<br />
<br />
<font size="2">The Apache Incubator CXF team is proud to announce the availability of<br />
the 2.0.2 release!<br />
<br />
Apache CXF is an open source services framework. CXF helps you build<br />
and develop services using frontend programming APIs, like JAX-WS. These<br />
services can speak a variety of protocols such as SOAP, XML/HTTP,<br />
RESTful HTTP, or CORBA and work over a variety of transports such as<br />
HTTP, JMS or JBI.<br />
<br />
<br />
CXF includes a broad feature set, but it is primarily focused on the<br />
following areas:<br />
<br />
* Web Services Standards Support: CXF supports a variety of web service<br />
standards including SOAP, the Basic Profile, WSDL, WS-Addressing,<br />
WS-Policy, WS-ReliableMessaging, and WS-Security.<br />
<br />
* Frontends: CXF supports a variety of &quot;frontend&quot; programming models. CXF&nbsp;&nbsp;&nbsp;<br />
provides a JAX-WS Compliant frontend. It also includes a &quot;simple<br />
frontend&quot; which allows creation of clients and endpoints without&nbsp;&nbsp;&nbsp;<br />
annotations. CXF supports both contract first development with WSDL and&nbsp;&nbsp;&nbsp;<br />
code first development starting from Java.<br />
<br />
* Ease of use: CXF is designed to be intuitive and easy to use. There&nbsp;&nbsp;&nbsp;<br />
are simple APIs to quickly build code-first services, Maven plug-ins to&nbsp;&nbsp;&nbsp;<br />
make tooling integration easy, JAX-WS API support, Spring 2.0 XML<br />
support to make configuration a snap, and much more.<br />
<br />
<br />
This release contains the following improvements:<br />
&nbsp; * Configuration support for the WS-Policy engine<br />
&nbsp; * WS-Addressing Feature (easier to configure WS-A)<br />
&nbsp; * WS-Reliable Messaging Feature (easier to configure WS-RM)<br />
&nbsp; * Lots of sample improvements<br />
&nbsp; * Several Spring configuration improvements<br />
&nbsp; * Over 70 other bug fixes and enhancements<br />
<br />
For more information see:<br />
&nbsp;* Download: <a href="https://bosgate.iona.com/https/0/owa-amer.iona.com/exchweb/bin/redir.asp?URL=http://incubator.apache.org/cxf/download.html" target="_blank">http://incubator.apache.org/cxf/download.html</a><br />
&nbsp;* Website: <a href="https://bosgate.iona.com/https/0/owa-amer.iona.com/exchweb/bin/redir.asp?URL=http://incubator.apache.org/cxf/" target="_blank">http://incubator.apache.org/cxf/</a><br />
&nbsp;* Release Notes:<br />
<a href="https://bosgate.iona.com/https/0/owa-amer.iona.com/exchweb/bin/redir.asp?URL=http://incubator.apache.org/cxf/apache-cxf-202-incubating-release-notes.html" target="_blank">http://incubator.apache.org/cxf/apache-cxf-202-incubating-release-notes.html</a><br />
&nbsp;* Mailing lists: <a href="https://bosgate.iona.com/https/0/owa-amer.iona.com/exchweb/bin/redir.asp?URL=http://incubator.apache.org/cxf/mailing-lists.html" target="_blank">http://incubator.apache.org/cxf/mailing-lists.html</a><br />
<br />
<br />
If you have feedback, questions or would like to get involved in the CXF<br />
project please join the mailing lists and let us know your thoughts.<br />
<br />
The Apache Incubator CXF Team<br />
<a href="https://bosgate.iona.com/https/0/owa-amer.iona.com/exchweb/bin/redir.asp?URL=http://incubator.apache.org/cxf/" target="_blank">http://incubator.apache.org/cxf/</a><br />
</font>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/127195#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Sep 2007 09:40:14 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/127195</link>
        <guid>http://jnn.javaeye.com/blog/127195</guid>
      </item>
      <item>
        <title>CXF jaxws spring configuration</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/120186" style="color:red;">http://jnn.javaeye.com/blog/120186</a>&nbsp;
          发表时间: 2007年09月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近在<a href="http://groups.google.com/group/cxf-zh?hl=zh-CN ">cxf-zh</a>中有人问及了有关Spring配置CXF Client以及Server的问题，由于我前段时间也做一部分相关的工作，在这里我简单给大家介绍一下CXF在与Spring集成方面所做的一些工作。</p>
<p>如果大家只是想了解如何写jaxws:endpoint 配置文件，可以直接跳到 3 jaxws:endpoing进行阅读.</p>
<p> 0. 预备知识 </p>
<p>如果你想了解CXF是如何与Spring进行集成的，首先你需要下载CXF代码，编译，然后生成相关的Eclipse工程文件。</p>
<p>具体的步骤在CXF wiki 上有说明</p>
<ul>
    <li><a href="http://cwiki.apache.org/CXF/source-repository.html">download source code</a></li>
    <li><a href="http://cwiki.apache.org/CXF/building.html">build source code</a> </li>
    <li><a href="http://cwiki.apache.org/CXF/setting-up-eclipse.html">eclipse setup</a></li>
</ul>
<p>1. 基本原理</p>
<p>CXF采用的是Spring2.0提供的一个新接口就是扩展的NamespaceHandler。通过注册相关的NamespaceHandler以及xsd，在Spring处理到对应Namespace下的XML元素时将会调用NamespaceHandler中注册的Parser来进行处理。</p>
<p>瞧是不是挺简单的。</p>
<p>具体代码位置 Project: cxf-rt-frontend-jaxws </p>
<p>源代码 src/main/java Package  org.apache.cxf.jaxws.spring </p>
<p>测试 src/test/java Package org.apache.cxf.jaxws.spring</p>
<p>schema: jaxws.xsd  src/main/resources schemas</p>
<p>2. jaxws namespace</p>
<p> 在jaxws.xsd中，你将看到有关 jaxws:endpoint， jaxws:server, jaxws:client的定义。</p>
这里需要说明的内容有三点:
<ol>
    <li> jaxws的target namespace是 http://cxf.apache.org/jaxws，由于目前CXF还处于incubating 的状态，没有cxf.apache.org这个域名。为了能让Spring来进行xml文档校验的时候能够获得jaxws.xsd，Spring提供了一种通过ClassPath中获得jaxws.xsd方法。具体步骤如下就是在META-INF中添加spring.schema的方式将jaxws.xsd与对应的URI进行绑定，同时也需要将NamespaceHandler注册进Spring中。</li>
    <li>jaxws:endpoint 与 jaxws:server是对等的，他们都是对Web Services 服务端的描述。只是在JAXWS RI在最初的实现过程中，对于Server端的配置是通过Endpoint来进行描述的，而且JAXWS API也定义了Endpoint，因此为了保持与JAXWS API的一致性，在这里设置了jaxws:endpoint。</li>
    <li>jaxws front end 与 simple front end之间的关系。 CXF除了提供JAXWS 的实现，也延续Xfire的风格提供了简单POJO Web Services的实现前端 simple front end。Jaxws front end 继承了simple front end的绝大部分方法，它与simple front end 的最大不同就是提供了Web Services Meta data (JSR 181)的支持，提供从Annotation中获取Web Services的能力。对于 jaxws:server 以及 jaxws:client 你可以在 simple front end中找到对应的 simple:server , simple:client。 </li>
</ol>
<p>3. jaxws:endpoint示例</p>
我们知道Spring为我们提供了一个很好的Dependence Injection的容器，我们可以通过XML在不修改任何Java Code的情况下，通过配置改变Spring beans 之间的属性。下面是endpoint的  schema，我们将结合schema向大家介绍有关spring的配置和使用。 <br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"> </div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">xsd:schema</span><span> </span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;http://cxf.apache.org/jaxws&quot;</span><span>  </span></span></li>
    <li class=""><span>  <span class="attribute">xmlns:xsd</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/2001/XMLSchema&quot;</span><span>  </span></span></li>
    <li class="alt"><span>  <span class="attribute">xmlns:beans</span><span>=</span><span class="attribute-value">&quot;http://www.springframework.org/schema/beans&quot;</span><span>  </span></span></li>
    <li class=""><span>  <span class="attribute">xmlns:cxf-beans</span><span>=</span><span class="attribute-value">&quot;http://cxf.apache.org/configuration/beans&quot;</span><span>  </span></span></li>
    <li class="alt"><span>  <span class="attribute">xmlns:xsi</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><span>  </span></span></li>
    <li class=""><span>  <span class="attribute">targetNamespace</span><span>=</span><span class="attribute-value">&quot;http://cxf.apache.org/jaxws&quot;</span><span>   </span></span></li>
    <li class="alt"><span>  <span class="attribute">elementFormDefault</span><span>=</span><span class="attribute-value">&quot;qualified&quot;</span><span>  </span></span></li>
    <li class=""><span>  <span class="attribute">attributeFormDefault</span><span>=</span><span class="attribute-value">&quot;unqualified&quot;</span><span>  </span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class="alt"><span>  </span></li>
    <li class=""><span>  <span class="tag">&lt;</span><span class="tag-name">xsd:import</span><span> </span><span class="attribute">namespace</span><span>=</span><span class="attribute-value">&quot;http://www.springframework.org/schema/beans&quot;</span><span> </span><span class="attribute">schemaLocation</span><span>=</span><span class="attribute-value">&quot;http://www.springframework.org/schema/beans/spring-beans.xsd&quot;</span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class="alt"><span>  <span class="tag">&lt;</span><span class="tag-name">xsd:import</span><span> </span><span class="attribute">namespace</span><span>=</span><span class="attribute-value">&quot;http://cxf.apache.org/configuration/beans&quot;</span><span> </span><span class="attribute">schemaLocation</span><span>=</span><span class="attribute-value">&quot;http://cxf.apache.org/schemas/configuration/cxf-beans.xsd&quot;</span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class=""><span>  </span></li>
    <li class="alt"><span>  <span class="tag">&lt;</span><span class="tag-name">xsd:element</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;endpoint&quot;</span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class=""><span>    <span class="tag">&lt;</span><span class="tag-name">xsd:complexType</span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class="alt"><span>      <span class="tag">&lt;</span><span class="tag-name">xsd:complexContent</span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class=""><span>        <span class="tag">&lt;</span><span class="tag-name">xsd:extension</span><span> </span><span class="attribute">base</span><span>=</span><span class="attribute-value">&quot;beans:identifiedType&quot;</span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class="alt"><span>          <span class="tag">&lt;</span><span class="tag-name">xsd:all</span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class=""><span>            <span class="tag">&lt;</span><span class="tag-name">xsd:element</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;binding&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:anyType&quot;</span><span> </span><span class="attribute">minOccurs</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class="alt"><span>            <span class="tag">&lt;</span><span class="tag-name">xsd:element</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;dataBinding&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:anyType&quot;</span><span> </span><span class="attribute">minOccurs</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class=""><span>            <span class="tag">&lt;</span><span class="tag-name">xsd:element</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;executor&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:anyType&quot;</span><span> </span><span class="attribute">minOccurs</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class="alt"><span>            <span class="tag">&lt;</span><span class="tag-name">xsd:element</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;features&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:anyType&quot;</span><span> </span><span class="attribute">minOccurs</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class=""><span>            <span class="tag">&lt;</span><span class="tag-name">xsd:element</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;implementor&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:anyType&quot;</span><span> </span><span class="attribute">minOccurs</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class="alt"><span>            <span class="tag">&lt;</span><span class="tag-name">xsd:element</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;inInterceptors&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:anyType&quot;</span><span> </span><span class="attribute">minOccurs</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class=""><span>            <span class="tag">&lt;</span><span class="tag-name">xsd:element</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;inFaultInterceptors&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:anyType&quot;</span><span> </span><span class="attribute">minOccurs</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class="alt"><span>            <span class="tag">&lt;</span><span class="tag-name">xsd:element</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;invoker&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:anyType&quot;</span><span> </span><span class="attribute">minOccurs</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class=""><span>            <span class="tag">&lt;</span><span class="tag-name">xsd:element</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;outInterceptors&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:anyType&quot;</span><span> </span><span class="attribute">minOccurs</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class="alt"><span>            <span class="tag">&lt;</span><span class="tag-name">xsd:element</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;outFaultInterceptors&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:anyType&quot;</span><span> </span><span class="attribute">minOccurs</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class=""><span>            <span class="tag">&lt;</span><span class="tag-name">xsd:element</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;properties&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;beans:mapType&quot;</span><span> </span><span class="attribute">minOccurs</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class="alt"><span>            <span class="tag">&lt;</span><span class="tag-name">xsd:element</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;schemaLocations&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;schemasType&quot;</span><span> </span><span class="attribute">minOccurs</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class=""><span>            <span class="tag">&lt;</span><span class="tag-name">xsd:element</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;serviceFactory&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:anyType&quot;</span><span> </span><span class="attribute">minOccurs</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class="alt"><span>          <span class="tag"><!--</span--><span class="tag-name">xsd:all</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class=""><span>          <span class="tag">&lt;</span><span class="tag-name">xsd:attributeGroup</span><span> </span><span class="attribute">ref</span><span>=</span><span class="attribute-value">&quot;cxf-beans:beanAttributes&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class="alt"><span>          <span class="tag">&lt;</span><span class="tag-name">xsd:attribute</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;address&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:string&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class=""><span>          <span class="tag">&lt;</span><span class="tag-name">xsd:attribute</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;bindingUri&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:string&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class="alt"><span>          <span class="tag">&lt;</span><span class="tag-name">xsd:attribute</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;bus&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:string&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class=""><span>          <span class="tag">&lt;</span><span class="tag-name">xsd:attribute</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;implementor&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:string&quot;</span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class="alt"><span>          <span class="tag">&lt;</span><span class="tag-name">xsd:attribute</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;implementorClass&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:string&quot;</span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class=""><span>          <span class="tag">&lt;</span><span class="tag-name">xsd:attribute</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;publish&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:boolean&quot;</span><span> </span><span class="attribute">default</span><span>=</span><span class="attribute-value">&quot;true&quot;</span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class="alt"><span>          <span class="tag">&lt;</span><span class="tag-name">xsd:attribute</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;endpointName&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:QName&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class=""><span>          <span class="tag">&lt;</span><span class="tag-name">xsd:attribute</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;serviceName&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:QName&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class="alt"><span>          <span class="tag">&lt;</span><span class="tag-name">xsd:attribute</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;wsdlLocation&quot;</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;xsd:string&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class=""><span>        <span class="tag"><!--</span--><span class="tag-name">xsd:extension</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class="alt"><span>      <span class="tag"><!--</span--><span class="tag-name">xsd:complexContent</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class=""><span>    <span class="tag"><!--</span--><span class="tag-name">xsd:complexType</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class="alt"><span>  <span class="tag"><!--</span--><span class="tag-name">xsd:element</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class=""><span>    </span></li>
    <li class="alt"><span>  <span class="tag"><!--</span--><span class="tag-name">xsd:schema</span><span class="tag">&gt;</span><span>  </span></span></span></li>
</ol>
</div>
<br />
<p> </p>
<p>这里设置的endpoint中的很多子元素都定义成为了 xsd:anyType， 这是为了能通过原有Spring bean的方式来初始化具体的实例。例如： implementor 这个子元素。</p>
<pre class="code"><span class="sc3"><div class="code_title">xml 代码</div><div class="dp-highlighter"><div class="bar"> </div><ol class="dp-xml" start="1"><li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">jaxws:endpoint</span><span> </span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;inlineImplementor&quot;</span><span> </span><span class="attribute">address</span><span>=</span><span class="attribute-value">&quot;http://localhost:8080/simpleWithAddress&quot;</span><span class="tag">&gt;</span><span>  </span></span></li><li class=""><span>    <span class="tag">&lt;</span><span class="tag-name">jaxws:implementor</span><span class="tag">&gt;</span><span>  </span></span></li><li class="alt"><span>      <span class="tag">&lt;</span><span class="tag-name">bean</span><span> </span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.apache.hello_world_soap_http.GreeterImpl&quot;</span><span class="tag">&gt;</span><span>  </span></span></li><li class=""><span>         <span class="tag">&lt;</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;prefix&quot;</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;hello&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li><li class="alt"><span>      <span class="tag"><!--</span--><span class="tag-name">bean</span><span class="tag">&gt;</span><span>     </span></span></span></li><li class=""><span>    <span class="tag"><!--</span--><span class="tag-name">jaxws:implementor</span><span class="tag">&gt;</span><span>  </span></span></span></li><li class="alt"><span><span class="tag"><!--</span--><span class="tag-name">jaxws:endpoint</span><span class="tag">&gt;</span><span>  </span></span></span></li></ol></div><br /></span></pre>
<p> </p>
<p>当然对于properties来说，就是采用了spring中内建的Map类型的支持，具体的使用实例如下：</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"> </div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">jaxws:endpoint</span><span> </span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;withProerties&quot;</span><span> </span><span class="attribute">implementor</span><span>=</span><span class="attribute-value">&quot;org.apache.hello_world_soap_http.GreeterImpl&quot;</span><span> </span><span class="attribute">address</span><span>=</span><span class="attribute-value">&quot;http://localhost:8080/simpleWithAddress&quot;</span><span class="tag">&gt;</span><span>   </span></span></li>
    <li class=""><span>  <span class="tag">&lt;</span><span class="tag-name">jaxws:properties</span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class="alt"><span>     <span class="tag">&lt;</span><span class="tag-name">entry</span><span> </span><span class="attribute">key</span><span>=</span><span class="attribute-value">&quot;Content-Type&quot;</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;text/plain&quot;</span><span> </span><span class="tag">/&gt;</span><span>  </span></span></li>
    <li class=""><span>       <span class="tag">&lt;</span><span class="tag-name">entry</span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class="alt"><span>         <span class="tag">&lt;</span><span class="tag-name">key</span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class=""><span>           <span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>javax.xml.stream.XMLInputFactory</span><span class="tag"><!--</span--><span class="tag-name">value</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class="alt"><span>         <span class="tag"><!--</span--><span class="tag-name">key</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class=""><span>         <span class="tag">&lt;</span><span class="tag-name">ref</span><span> </span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;mappedXMLInputFactory&quot;</span><span>/&quot;</span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class="alt"><span>        <span class="tag"><!--</span--><span class="tag-name">entry</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class=""><span>        <span class="tag">&lt;</span><span class="tag-name">entry</span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class="alt"><span>         <span class="tag">&lt;</span><span class="tag-name">key</span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class=""><span>           <span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>javax.xml.stream.XMLOutputFactory</span><span class="tag"><!--</span--><span class="tag-name">value</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class="alt"><span>         <span class="tag"><!--</span--><span class="tag-name">key</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class=""><span>         <span class="tag">&lt;</span><span class="tag-name">ref</span><span> </span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;mappedXMLOutputFactory&quot;</span><span>/&quot;</span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class="alt"><span>        <span class="tag"><!--</span--><span class="tag-name">entry</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class=""><span>  <span class="tag"><!--</span--><span class="tag-name">jaxws:properties</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class="alt"><span><span class="tag"><!--</span--><span class="tag-name">jaxws:endpoint</span><span class="tag">&gt;</span><span>  </span></span></span></li>
</ol>
</div>
<br />
<p> </p>
<p>好现在看一下如何配置属性（attribute） jaxws:endpoint 也提供了对 implementor描述的属性， 当我们将 implementor定义成为一个java class时我们可以这样写</p>
<p>  </p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"> </div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name"></span></span><span><span class="tag-name">jaxws:endpoint</span></span><span><span class="tag-name"></span><span>  </span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;implementor&quot;</span><span> </span><span class="attribute">implementor</span><span>=</span><span class="attribute-value">&quot;org.apache.hello_world_soap_http.GreeterImpl&quot;</span><span> </span><span class="attribute">address</span><span>=</span><span class="attribute-value">&quot;http://localhost:8080/simpleWithAddress&quot;</span><span class="tag">/&gt;</span><span>    </span></span></li>
</ol>
</div>
<p> </p>
<pre class="code"><span class="sc3"><span class="re1"><jaxws></jaxws></span> </span></pre>
<p> </p>
<p>当我们考虑将implementor定义成为一个bean的引用，就应该写成</p>
<p> </p>
<pre class="code"><span class="sc3"><span class="re1"><jaxws></jaxws></span><div class="code_title">xml 代码</div><div class="dp-highlighter"><div class="bar"> </div><ol class="dp-xml" start="1"><li class="alt"><span><span class="tag">&lt;</span><span class="tag-name"></span></span><span><span class="tag-name">jaxws:endpoint</span></span><span><span class="tag-name"></span><span> </span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;implementor&quot;</span><span> </span><span class="attribute">implementor</span><span>=</span><span class="attribute-value">&quot;#GreeterImpl&quot;</span><span> </span><span class="attribute">address</span><span>=</span><span class="attribute-value">&quot;http://localhost:8080/simpleWithAddress&quot;</span><span>/</span><span class="tag">&gt;</span><span>  </span></span></li></ol></div> </span></pre>
<p> </p>
<p>这里再讲一下endpointName和serviceName的写法，大家可以看到这两个属性的类型都是Qname</p>
<p>  </p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"> </div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name"></span></span><span><span class="tag-name">jaxws:endpoint</span></span><span><span class="tag-name"></span><span> </span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;withEndpiontName&quot;</span><span> </span><span class="attribute">implementor</span><span>=</span><span class="attribute-value">&quot;org.apache.cxf.jaxws.service.Hello&quot;</span><span> </span><span class="attribute">endpointname</span><span>=</span><span class="attribute-value">&quot;e:HelloEndpointCustomized&quot;</span><span> </span><span class="attribute">servicename</span><span>=</span><span class="attribute-value">&quot;s:HelloServiceCustomized&quot;</span><span> </span><span class="attribute">address</span><span>=</span><span class="attribute-value">&quot;http://localhost:8080/test&quot;</span><span class="tag"> /&gt;</span><span>  </span></span></li>
</ol>
</div>
<p> </p>
<pre class="code"><span class="sc3"><span class="re1"><jaxws></jaxws></span> </span></pre>
<p> </p>
<p>4. EndpointDefinitionParser</p>
<p>看了上面的jaxws:endpoint 示例，大家可能会向CXF是如何将这些XML文件映射成为具体的 Jaxws Endpoint 呢？ 有心的朋友只要看一下 EndpointDefinitionParser 就能略知一二了。</p>
<p>请注意 EndpointDefinitionParser的构造函数，里面调用了setBeanClass(EndpointImpl.class);当当我们的要设置的主角终于登场了。 再则就是 protected void doParse(Element element, ParserContext ctx, BeanDefinitionBuilder bean),如果你要配置自己的Bean对象，就需要花点功夫在这个函数上面了。</p>
<p>今天的介绍先到这，有兴趣的朋友可以用同样的方法来研究有关 jaxws:server以及jaxws:client的具体实现，还有我会在后面的文章中介绍在CXF中有关doParser的更为复杂的实现。</p>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/120186#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 02 Sep 2007 14:12:56 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/120186</link>
        <guid>http://jnn.javaeye.com/blog/120186</guid>
      </item>
      <item>
        <title>Study Resources of Web Services with Java</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/120187" style="color:red;">http://jnn.javaeye.com/blog/120187</a>&nbsp;
          发表时间: 2007年09月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><br />
最近收到几个朋友得来信都聊到了学习Web Services的资料问题，在这里简单小结一下，也算是偷一下懒，下回遇到同样的问题我就改发这个链接了:)。</p>
<p>&nbsp;</p>
<p>对于初学者，可以通过下面两本书来熟悉规范了解Java的WebService构架的结构以及使用方法<br />
<br />
1.<a href="http://java.sun.com/webservices/docs/2.0/tutorial/doc/">The Java Web Services Tutorial</a><br />
<br />
SUN的官方教材，教程先从使用JAXWS API入手，教你如何使用JAXWS API发布Web Services以及如何调用远程的Web Services。<br />
然后介绍了JAXB的使用方法，能够帮助读者轻松搞定WebServices中XML与Java Object的转换问题。<br />
Stax作为新一代的Java XML处理API，采用了基于流的处理方式，极大得提高了Java Web Services的处理效率。教程对此API也有比较相信的介绍。<br />
同时教材还提供了有关SAAJ(SOAP with Attachments API for Java)，以及Web Services Security的内容的介绍。<br />
<br />
2. SOA: Using Java Web Services<br />
<a href="http://soabook.com/" target="_blank">http://soabook.com/</a><br />
这本书介绍了很多Java Web Services框架实现细节的东西（很务实）,特别是对JAXWS系列的规范有比较详细的介绍，同时书中还给出eBay以及Amazon的WebService的调用实例。<br />
<br />
下面是从<a href="http://www.jroller.com/gmazza/entry/soa_using_java_web_services">Glen blog</a> 摘抄的书评 <br />
<br />
&quot;Strengths of this book:<br />
<br />
&nbsp;&nbsp; 1. Good introductions and working code to Yahoo! Shopping RESTful Web services as well as eBay and Amazon SOAP-based web services are provided in Chapter 9. This provides a solid starting point for readers to move beyond book knowledge and start practicing with these publicly available API's.</p>
<p><br />
&nbsp;&nbsp; 2. Fairly detailed code samples to work with, covering a broad range of topics, which provide another good starting point for developers.</p>
<p><br />
&nbsp;&nbsp; 3. I have often gone back to the book to find details or review certain topics, so have found that it continues to serve as a good reference after you are done reading it.&quot;<br />
<br />
</p>
<p>&nbsp;</p>
<p>当然网上也有很多免费的培训教程，例如<br />
<br />
<a href="http://blogs.sun.com/arungupta/entry/free_web_services_training_3rd">FREE Web Services Training - 3rd session</a><br />
<br />
如果你对SOA以及WS*感兴趣，或者你的关注点并不局限API代码，哪你还可以翻阅一下IONA CTO NewComer 写的Understanding SOA with Web Services<br />
<br />
<br />
还有就是加入<a href="http://groups.google.com/group/cxf-zh">cxf-zh中文论坛</a>，作为第一CXF的中文论坛，CXF在北京的开发者都会在该论坛上回复大家的有个WebServices 以及使用CXF遇到的问题。<br />
<br />
最后如果想了解业界的最新进展，可以订阅相关的Blog<br />
<br />
有关Blog的信息请参考cxf-zh <a href="http://groups.google.com/group/cxf-zh/browse_thread/thread/b0f79cabfca401a8/80c8e4e9c05a2048#80c8e4e9c05a2048">最近的讨论</a></p>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/120187#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 02 Sep 2007 07:14:17 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/120187</link>
        <guid>http://jnn.javaeye.com/blog/120187</guid>
      </item>
      <item>
        <title>Web Services Client &amp; Server message invocation steps</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/120188" style="color:red;">http://jnn.javaeye.com/blog/120188</a>&nbsp;
          发表时间: 2007年09月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>自从JavaEye将CXF2.0发布的消息置顶之后，我一下收到好几个朋友的来信，他们除了对CXF使用表现了极大兴趣以外，也对CXF以及JAXWS的具体实现表现出了很大的热忱。</p>
<p>下面是他在信中提的几个问题:<br />
<br />
&ldquo;如何才能够学好web services呢？<br />
<br />
不仅仅是熟悉cxf这样的框架，而是真正了解和掌握，包括协议细节，传输过程，以及设计合理的web services甚至开发自己的简单webservices框架。</p>
<p><br />
不知您对以上过程有什么建议呢？有没有什么推荐的学习蓝图？&rdquo; </p>
<p>对于第一个问题，真的很难回答，我想很多人都有自己的答案。</p>
<p>我们先从第二个问题开始，下面是我摘抄自 <a href="http://soabook.com/">SOA: Using Java Web Services </a>第一章中的有关服务器和客户端消息通讯流程中的相关重要步骤，希望能对大家学习 Web Services 有所帮助。</p>
<p>有关学习Web Services 的学习蓝图请参见我的另一篇Blog <a href="http://willem.bokeland.com/blog/794/6089/2007/09/02/229814">Web Services学习资源</a> </p>
<p>&nbsp;</p>
<p>服务端调用<br />
<br />
1. Receiving a SOAP message from a transport<br />
<br />
2. Invoking handlers that preprocess the message<br />
<br />
3. Determining the message&rsquo;s target service<br />
<br />
4. Determining the Java target is referred to as dispatching &nbsp;<br />
<br />
5. Deserialize the message into Java objects ( paramenters)<br />
<br />
6. Invoking the Java target using the paramenters and getting the Java object retruned by the target method<br />
<br />
7. Serialize the retrun object into an XML element<br />
<br />
8. Wrapping the retruned XML element as a SOAP message response<br />
<br />
9. Handing the SOAP response back to the transport for delivery<br />
<br />
<br />
客户端的调用<br />
<br />
1. Creating an instance of the Web service endpoint which is implementing the SEI (Service Endpoint Interface). <br />
[SEI instances are implemented using Java proxies and invocation handlers]<br />
<br />
2. Handling an invocation of the SEI instance<br />
<br />
3. Taking the paramenters passed to the SEI and serialized them into XML elements<br />
<br />
4. Wrapping the paramenter elements in a SOAP message<br />
<br />
5. Invoking handlers that post-process the message<br />
<br />
6. Handing off the message to the transport for delivery<br />
<br />
7. Receiving the SOAP message response from the transport<br />
<br />
8. deserialized the message into a Java object that is an instance of the class specified by the SEI's return type.<br />
<br />
9. Completing the invocation of the SEI by retruning the deserialized SOAP response<br />
&nbsp;&nbsp; </p>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/120188#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 02 Sep 2007 07:00:02 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/120188</link>
        <guid>http://jnn.javaeye.com/blog/120188</guid>
      </item>
      <item>
        <title>Code Wins</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/117276" style="color:red;">http://jnn.javaeye.com/blog/117276</a>&nbsp;
          发表时间: 2007年08月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>程序员，高级程序员，系统构架师 似乎已经成为一个IT从业人员的技术发展线路图了。  </p>
<p>这里我要问一下 我们的架构师有多少时间在写代码，有多少时间在读代码。当然你的技术职位越高你所需要关心的细节问题就越少，但是如果你没有基本的代码阅读能力或者说压根都不关心细节，哪你所设计出来的构架又有多少说服力呢？如何能于程序员进行交流？如何能将这些设计落实到具体的代码上呢？</p>
<p>我心目中的构架师是既能统观全局，又能细致入微的领军人物。对于系统构架，他已烂熟于胸，简单几句话就能引领你直达问题关键。有时候我们读大师写的文章，就会有这样的感觉，他会把事件的来龙去脉向你细细道来，如同一盏明灯照亮问题的每个角落。  </p>
<p>软件构架师是如何修炼出来的呢？哪些设计模式，设计思路是如何成为他思考的元素的呢？其实写代码就和写文章一样，如果想写得顺畅，一个是多读别人的文章吸取营养，一个就是多写文章，训练自己的文字表达。</p>
<p>  我很喜欢我现在的职业程序员（Coder），我就是喜欢写代码。也许你会说写代码很枯燥，没有拿着PPT给客户做介绍或者做设计潇洒。我可以给你说一个例子来说明技术人员的交流，代码是最有效的手段。哦，在这里有个前提就是交流的双方都有很强的代码阅读能力。如果你在要写程序，你了解的细节越多，你处理问题的能力越强，如果只是把细节都封装在黑盒中，哪你只能把问题转发到厂商哪里的。而这是玩Open Source Hacker的大忌。他们想得既然我能看到代码，我就能弄清楚细节，我就能修改它。</p>
<p>  <a href="http://netzooid.com/blog/">Dan Diephouse</a> 去年到北京和我们交流有关CXF设计的时候，他没有PPT，他的讲解工具就是Eclipse和一堆CXF的代码。当时他给我的感觉就是对代码超熟悉（因为RunTime的大部分代码是他写的），基本上我们要问的问题，他都能给我们指出对应的代码出处。 这不由使我想到了以前流传在英语考研班的一句神话，朱泰祺教授把整个牛津词典都背下来了。</p>
<p> 在Dan Diephouse在北京的哪几天，我老是在想一个问题，他20几岁，化学工程专业毕业，为什么就能具备开发Xfire 或者说是具备 Service Framework的构架能力，是什么帮助他走到这一步呢？通过几天时间的接触，我似乎发现了一些线索。 </p>
<p>一个是勤奋，他说他一个礼拜大概要工作60个小时（基本上是在家工作，省去很多路上奔波的时间）。</p>
<p>  一个就是广泛涉猎OpenSource项目，阅读他们的code。在他向我们演示代码的时候，我看到他经常要开好几个项目，有axis，有Xfire，也有CXF。</p>
<p>再一个就是参加了很多技术会议 ，近年来的Java&nbsp; One,&nbsp; Apache&nbsp; Conn ,&nbsp; Eclipse Conn ...... 都有他的身影。<br />
</p>
<p> 现在Dan Diephouse 除了经营自己的<a href="http://envoisolutions.com/">咨询公司</a>以外，他已经是<a href="http://netzooid.com/blog/2007/08/14/mulesource/">Mule的架构师</a>，我相信他会走的更好。</p>
<p>另一个例子就是我最近的一项工作就是将CXF和<a href="http://activemq.apache.org/camel/">Camel</a>进行集成，虽然我对CXF有所了解，但是在开始的几天时间里，我对Camel几乎是从零开始，当时我无法给出具体的系统需求分析，更不要提给出相关的设计方案。于是我只能硬着头皮看文档，看代码，问问题，写测试。当我把一个个Demo测试调通了，当我仔细阅读并跟踪过Process的各项测。一个个系统需求开始明晰了，设计思路也有了，没多久code也出来了。</p>
<p>这时我突然明白了一个道理，我的设计不是从文档里跳出来的，是从不断的code reading，code tracing，code writing and refactoring中出来的，虽然开始的几天很痛苦，一旦你把思路理清，你就会有一种醍醐灌顶的感觉。  Coder是一个实践性很强的职业，你需要把具体的客户需求转换成为具体的代码，你需要不断测试优化你的代码。你整天和代码打交道，只有你多读多写，才能驾轻就熟，才能烂熟于胸。</p>
<p>  我很喜欢<a href="http://www.iona.com">IONA</a>的一条口号 Code Wins. 于大家共勉。</p>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/117276#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 27 Aug 2007 13:25:26 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/117276</link>
        <guid>http://jnn.javaeye.com/blog/117276</guid>
      </item>
      <item>
        <title>CXF 2.0.1 发布</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/114726" style="color:red;">http://jnn.javaeye.com/blog/114726</a>&nbsp;
          发表时间: 2007年08月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre wrap="">The Apache Incubator CXF team is proud to announce the availability of<br />the 2.0.1 release!<br /><br />Apache CXF is an open source services framework. CXF helps you build<br />and develop services using frontend programming APIs, like JAX-WS.<br />These services can speak a variety of protocols such as SOAP,<br />XML/HTTP, RESTful HTTP, or CORBA and work over a variety of transports<br />such as HTTP, JMS or JBI.<br /><br />CXF includes a broad feature set, but it is primarily focused on the<br />following areas:<br /><br /> * Web Services Standards Support: CXF supports a variety of web service<br />   standards including SOAP, the Basic Profile, WSDL, WS-Addressing,<br />   WS-Policy, WS-ReliableMessaging, and WS-Security.<br /><br /> * Frontends: CXF supports a variety of &quot;frontend&quot; programming models. CXF<br />   provides a JAX-WS Compliant frontend. It also includes a &quot;simple<br />   frontend&quot; which allows creation of clients and endpoints without<br />   annotations. CXF supports both contract first development with WSDL and<br />   code first development starting from Java.<br /><br /> * Ease of use: CXF is designed to be intuitive and easy to use. There<br />   are simple APIs to quickly build code-first services, Maven plug-ins to<br />   make tooling integration easy, JAX-WS API support, Spring 2.0 XML support<br />   to make configuration a snap, and much more.<br /><br /> * Binary and Legacy Protocol Support: CXF has been designed to provide a<br />   pluggable architecture that supports not only XML but also non-XML type<br />   bindings, such as JSON and CORBA, in combination with any type of transport.<br /><br />This release contains the following improvements:<br /><br /> * Many Aegis related bug fixes<br /> * Many XFire migration related bug fixes<br /> * Fixes to handle Arrays &amp; Lists much better with JAXB in code first scenarios<br /> * Enable HTTPSession &amp; Session use<br /> * Add support for &lt;databinding&gt; in endpoint &amp; client configuration<br /> * Allow access to Jetty Server or at least Context object<br /> * Support for configuring interceptors using annotations<br /> * Feature Support for the Bus<br /> * Fix MTOM interop issue inside Tomcat<br /> * Over 60 other bug fixes and enhancements<br /><br />For more information see:<br /> * Website: <a href="http://incubator.apache.org/cxf/" class="moz-txt-link-freetext">http://incubator.apache.org/cxf/</a><br /> * Release Notes:<br /><a href="http://incubator.apache.org/cxf/apache-cxf-201-incubating-release-notes.html" class="moz-txt-link-freetext">http://incubator.apache.org/cxf/apache-cxf-201-incubating-release-notes.html</a><br /> * Mailing lists: <a href="http://incubator.apache.org/cxf/mailing-lists.html" class="moz-txt-link-freetext">http://incubator.apache.org/cxf/mailing-lists.html</a><br /><br />If you have feedback, questions or would like to get involved in the<br />CXF project please join the mailing lists and let us know your<br />thoughts.<br /><br />The Apache Incubator CXF Team<br /><a href="http://incubator.apache.org/cxf/" class="moz-txt-link-freetext">http://incubator.apache.org/cxf/</a></pre>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/114726#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 21 Aug 2007 11:17:45 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/114726</link>
        <guid>http://jnn.javaeye.com/blog/114726</guid>
      </item>
      <item>
        <title>CXF 2.0  发布了</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/99828" style="color:red;">http://jnn.javaeye.com/blog/99828</a>&nbsp;
          发表时间: 2007年07月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          虽然这篇帖子写得有的晚了，但是还是想把CXF 2.0 发布的消息告诉大家。<br /><br />下面是转至 CXF dev maillist的发布信息。 <br /><br />The Apache Incubator CXF team is proud to announce the availability of<br />the 2.0 release!<br /> <br /> <br />Apache CXF is an open source services framework. CXF helps you build and<br />develop services using frontend programming APIs, like JAX-WS. These<br />services can speak a variety of protocols such as SOAP, XML/HTTP, RESTful<br />HTTP, or CORBA and work over a variety of transports such as HTTP, JMS <br />or JBI.<br /> <br />CXF includes a broad feature set, but it is primarily focused on the following<br />areas:<br /> <br /> * Web Services Standards Support: CXF supports a variety of web service<br />   standards including SOAP, the Basic Profile, WSDL, WS-Addressing,<br />   WS-Policy, WS-ReliableMessaging, and WS-Security.<br /><br /> * Frontends: CXF supports a variety of "frontend" programming models. CXF<br />   provides a JAX-WS Compliant frontend. It also includes a "simple <br />   frontend" which allows creation of clients and endpoints without <br />   annotations. CXF supports both contract first development with WSDL and<br />   code first development starting from Java.<br /><br /> * Ease of use: CXF is designed to be intuitive and easy to use. There<br />   are simple APIs to quickly build code-first services, Maven plug-ins to<br />   make tooling integration easy, JAX-WS API support, Spring 2.0 XML support<br />   to make configuration a snap, and much more.<br /><br /> * Binary and Legacy Protocol Support: CXF has been designed to provide a<br />   pluggable architecture that supports not only XML but also non-XML type<br />   bindings, such as JSON and CORBA, in combination with any type of transport.<br /> <br /> <br />This release contains the following features:<br /> <br /> * JAX-WS Compliant frontend - Apache CXF has now passed the standalone <br />   JAX-WS TCK.<br /> * Java2WSDL and WSDL2Java tools and Maven plugin<br /> * SOAP 1.1 & 1.2, XML and RESTful HTTP bindings<br /> * JAXB 2.0 Databinding support<br /> * WSDL 1.1 support<br /> * WS-Addressing, WS-ReliableMessaging, WS-Security, and WS-Policy support<br /> * MTOM attachment support<br /> * HTTP, Servlet, JMS and Local Transports<br /> * Simple POJO service frontend<br /> * Javascript frontend<br /> * JBI Service Engine. CXF services can be deployed into any JBI<br />   compliant container (ServiceMix or OpenESB)<br /> * JCA 1.0 support, J2EE application can integrate with legacy<br />   application through JCA 1.0 support in CXF<br /> * Spring Support<br /> * JSON support with Jettison<br /> * Many other bug fixes and feature enhancements<br /> <br /> <br />For more information see:<br /> * Website: <a href="http://incubator.apache.org/cxf/" target="_blank">http://incubator.apache.org/cxf/</a><br /> * Release Notes: <a href="http://incubator.apache.org/cxf/apache-cxf-20-incubating-release-notes.html" target="_blank">http://incubator.apache.org/cxf/apache-cxf-20-incubating-release-notes.html</a><br /> * Mailing lists: <a href="http://incubator.apache.org/cxf/mailing-lists.html" target="_blank">http://incubator.apache.org/cxf/mailing-lists.html</a><br /> <br /> <br />If you have feedback, questions or would like to get involved in the<br />CXF project please join the mailing lists and let us know your<br />thoughts.<br /><br /> <br />The Apache Incubator CXF Team<br /><a href="http://incubator.apache.org/cxf" target="_blank">http://incubator.apache.org/cxf</a>
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/99828#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 10 Jul 2007 16:55:00 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/99828</link>
        <guid>http://jnn.javaeye.com/blog/99828</guid>
      </item>
      <item>
        <title>我眼中的CXF之 Interceptor (下)</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/99716" style="color:red;">http://jnn.javaeye.com/blog/99716</a>&nbsp;
          发表时间: 2007年06月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          下面给大家介绍一下Interceptor的一个使用实例，如果通过Interceptor来获取CXF的性能数据。<br />
我们知道CXF通过Interceptor处理着各种不同不样的消息信息，如果我们能在这些消息中设置时间戳信息，那我们就可以很容易地获取到这些消息在 不同地阶段处理所耗费的时间信息，通过对这些时间戳信息的处理，我们可以很容易就获取到CXF运行时的性能数据了。<br />
<br />
接下来我们看看CXF中管理模块是如何来实现设置时间戳信息的。<br />
<br />
首先我们简单回顾一下CXF的消息处理流机制：<br />
<br />
对于CXF来说消息就像是水流一样流过一个一个的过滤器（Interceptor）。消息可以按照流入流出的方向分为InMessage和OutMessage；在消息处理过程中可能会出现这样那样的错误，而这些错误信息根据其流入流出方向分为InFaultMessage和OutFaultMessage。这些进出的消息通过Exchange相互关联起来。 这样的设计给我带来一个很大的好处就是我们客户端还是在服务器端可以复用相同的Interceptor，这给设计和使用以及配置Interceptor带来了很大得方便。<br />
<br />
<br />
如何从Interceptor中获取性能数据?<br />
<br />
所有的Interceptor需要实现 public void handleMessage(Message message) throws Fault; 这一方法，而Message就是我们前面提到的大杂货铺。我们只需要找到消息处理的合适时机设置好对应的时间戳信息MessageHandlingTimeRecorder，并把时间戳信息寄存在Message中就完成了一大半的基础工作了。同时为了对把这些时间信息进行统计分析，这里我们设计了一个CounterRepository，Interceptor可以通过CounterRepository提供的记时方法increaseCounter(ObjectName on, MessageHandlingTimeRecorder mhtr)实现计数功能。<br />
<br />
接下来的就是我们如何设计我们的Perfromance Interceptors了。这里需要大家能对消息的流入流出情况有一个比较清楚的认识,这里包括了消息一般都需要经过哪些阶段 Phase的处理。客户端和服务器端对于流入流出消息的都是如何进行处理的，还有就是对于Request/Response的消息与Oneway的消息其处理流程也不太相同。在这里我就不一一罗列了。有兴趣的朋友可以看看<a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor">代码</a>。
          <br/>
          <span style="color:red;">
            <a href="http://jnn.javaeye.com/blog/99716#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 30 Jun 2007 11:39:41 +0800</pubDate>
        <link>http://jnn.javaeye.com/blog/99716</link>
        <guid>http://jnn.javaeye.com/blog/99716</guid>
      </item>
      <item>
        <title>我眼中的CXF之 Interceptor (上)</title>
        <author>jnn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jnn.javaeye.com">jnn</a>&nbsp;
          链接：<a href="http://jnn.javaeye.com/blog/99717" style="color:red;">http://jnn.javaeye.com/blog/99717</a>&nbsp;
          发表时间: 2007年06月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Interceptor是CXF架构中一个很有特色的模式。你可以在不对核心模块进行修改的情况下，动态添加很多功能。这对于CXF这个以处理消息为中心的服务框架来说是非常有用的，CXF通过在Interceptor中对消息进行特殊处理，实现了很多重要功能模块，例如：日志记录，Soap消息处理，消息的压缩处理。<br />
<br />
如果你想对CXF进行扩展，建议你先从interceptor开始。
<p>首先我们可以研究一下 cxf-api中定义的接口<br />
<br />
<br />
<a href="http://willem.bokeland.com/svn.apache.org/repos/asf/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/Interceptor.java">Interceptor</a><br />
定义两个方法，一个处理消息 handleMessage， 一个是处理错误 handleFault。别看Interceptor这么简单，这里需要提醒注意的是，在实行具体的Interceptor的这两个方法中，千万别调用Interceptor内部的成员变量。这是由于Interceptor是面向消息来进行处理的，每个Interceptor都有可能运行在不同的线程中，如果调用了Interceptor中的内部成员变量，就有在Interceptor中造成临界资源的访问的情况，而这时的Interceptor也就不是线程安全的Interc eptor了。<br />
<br />
在CXF中最常使用的Interceptor都放在cxf-rt-core中的org.apache.cxf.interceptor中，有兴趣的朋友可以研究一下。<br />
<br />
<br />
<a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InterceptorChain.java">InterceptorChain</a><br />
单个的Interceptor功能有限，CXF要实现一个SOAP消息处理，需要将许许多多的Interceptor组合在一起使用。因此设计了 InterceptorChain，在我看了InterceptorChain就像是一个Interceptor的小队长。 小队长有调配安置Interceptor的权力（add，remove），也有控制消息处理的权力（doInterceptor，pause，resume，reset，abort），同时也有交付错误处理的权力（ {get|set}FaultObserver）。更有意思的是为灵活控制Interceptor的处理消息顺序（doInterceptStartingAt，doInterceptorStartingAfter），这也是InterceptorChain比较难理解的地方。<br />
<br />
有兴趣的朋友可以跟踪一下，CXF的Client与Server之间通讯是走过哪些Interceptor，这些Interceptor是如何被调用的。<br />
<br />
<br />
<a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/Fault.java">Fault</a><br />
定义了CXF中的错误消息。<br />
<br />
<br />
<a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InterceptorProvider.java">InterceptorProvider</a><br />
这里定义了Interceptor的后备保障部队。我们可以在InterceptorProvider中设置In，Out，InFault，OutFault 后备小分队，添加我们所希望添加的Interceptor。而InterceptorChain会根据这些后备小分队，组建自己的小分队实例，完成具体的作战功能任务。<br />
<br />
<br />
<a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/AbstractBasicInterceptorProvider.java">AbstractAttributedInterceptorProvider</a><br />
InterceptorProvider实现的抽象类，由于这个类来继承了HashMap，我们可以像这个类中存储一些属性信息。<br />
<a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/AbstractAttributedInterceptorProvider.java"><br />
AbstractBasicInterceptorProvider</a><br />
与AbstractAttributedInterceptorProvider不同，这个Interceptor只是简单实现了InterceptorProvider的功能，并不提供对其属性存储的扩展。<br />
<br />
<br />
<a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/Message.java">Message</a><br />
由于Interceptor是针对Message来进行处理的，当你打开Message这个类文件时，你会发现在Message中定义了很多常量，同时你还可以从Message中获取到很多与Message操作相关的信息。可以获取设置的对象有InterceptorChain Exchange Destination，还有获取设置Content的泛型接口，是不是感觉Message和Bus差不多，都成了大杂货铺，一切与消息处理相关的信息都可以放在Message中。我想这也是咱CXF以Message处理为中心的设计思想的具体表现吧。<br />
<br />
<a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/Exchange.java">Exchange</a><br />
和Message打交道就离不开Exchange。Exchange建立In/Out，InFault/OutFault Message 之间的联系。你可以从Exchange中获取到与消息传输相关的Conduit，Destination的信息，同时也可以设置和Session相关的其他信息，以及知道是否是OneWay的消息。<br />
<br />
<a href="https://svn.apache.org/repos/asf/incubator/cxf/trunk/api/src/main/java/org/a