﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-zhb8015-文章分类-soa</title><link>http://www.blogjava.net/zhb8015/category/51178.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 05 Jun 2012 07:24:35 GMT</lastBuildDate><pubDate>Tue, 05 Jun 2012 07:24:35 GMT</pubDate><ttl>60</ttl><item><title>REST架构下的接口规范和使用准则（ 转）</title><link>http://www.blogjava.net/zhb8015/articles/379943.html</link><dc:creator>zhb8015</dc:creator><author>zhb8015</author><pubDate>Mon, 04 Jun 2012 08:38:00 GMT</pubDate><guid>http://www.blogjava.net/zhb8015/articles/379943.html</guid><wfw:comment>http://www.blogjava.net/zhb8015/comments/379943.html</wfw:comment><comments>http://www.blogjava.net/zhb8015/articles/379943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhb8015/comments/commentRss/379943.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhb8015/services/trackbacks/379943.html</trackback:ping><description><![CDATA[<div>来自: http://hi.baidu.com/yaobodi/blog/item/f655da333ff3974fac4b5f01.html  </div><div><div>REST架构下的接口规范和使用准则</div><div>2010-04-08 15:14</div><div id="blog_text"><p><strong>REST</strong>架构风格是全新的针对Web应用的开发风格，是当今世界最成功的互联网超媒体分布式系统架构，它使得人们真正理解了Http协议本来面貌。随着 REST架构成为主流技术，一种全新的互联网网络应用开发的思维方式开始流行。</p> <p>目前，51，校内，海内，阿里软件等都通过REST架构来实现平台数据的开放，与第三方的数据交换。REST已然成为<a href="http://www.nickyhu.com/sns%e7%a4%be%e8%ae%ba/sns-open.html">sns开放平台</a>的首要开放标准。下面简单介绍一下REST的原理和使用准则。</p> <p>wiki介绍见此：<a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">http://en.wikipedia.org/wiki/Representational_State_Transfer</a></p> <p align="left"><strong>REST是什么</strong></p> <p align="left">REST是英文Representational State  Transfer的缩写，中文翻译为&#8220;表述性状态转移&#8221;，他是由Roy Thomas Fielding博士在他的论文 《Architectural  Styles and the Design of Network-based Software  Architectures》中提出的一个术语。REST本身只是为分布式超媒体系统设计的一种架构风格，而不是标准。</p> <p align="left">基于Web的架构，实际上就是各种规范的集合，这些规范共同组成了Web架构。比如Http协议，比如客户端服务器模 式，这些都是规范。每当我们在原有规  范的基础上增加新的规范，就会形成新的架构。而REST正是这样一种架构，他结合了一系列的规范，而形成了一种新的基于Web的架构风格。</p> <p align="left">传统的Web应用大都是B/S架构，它包括了如下一些规范 。</p> <p align="left">客户－服务器</p> <ul><li>     <div>这种规范的提出，改善了用户接口跨多个平台的可移植性，并且通过简化服务器组件，改善了系统的可伸缩性。最为关键的是通过分离用户接口和数据存储这两个关注点，使得不同用户终端享受相同数据成为了可能。</div>     </li></ul> <p align="left">无状态性</p> <ul><li>     <div>无  状态性是在客户－服务器约束的基础上添加的又一层规范。他要求通信必须在本质上是无状态的，即从客户到服务器的每个request都必须包含理解该  request所必须的所有信息。这个规范改善了系统的可见性（无状态性使得客户端和服务器端不必保存对方的详细信息，服务器只需要处理当前  request，而不必了解所有的request历史），可靠性（无状态性减少了服务器从局部错误中恢复的任务量），可伸缩性（无状态性使得服务器端可以   很容易的释放资源，因为服务器端不必在多个request中保存状态）。同时，这种规范的缺点也是显而易见得，由于不能将状态数据保存在服务器上的共享上  下文中，因此增加了在一系列request中发送重复数据的开销,严重的降低了效率。</div>     </li></ul> <p align="left">缓存</p> <ul><li>     <div>为  了改善无状态性带来的网络的低效性，我们填加了缓存约束。缓存约束允许隐式或显式地标记一个response中的数据，这样就赋予了客户端缓存  response数据的功能，这样就可以为以后的request共用缓存的数据，部分或全部的消除一部分交互，增加了网络的效率。但是用于客户端缓存了信  息，也就同时增加了客户端与服务器数据不一致的可能，从而降低了可靠性。</div>     </li></ul> <p align="left">B/S架构的优点是其部署非常方便，但在用户体验方面却不是很理想。为了改善这种情况，我们引入了REST。</p> <p align="left">REST在原有的架构上增加了三个新规范：统一接口，分层系统和按需代码。</p> <p align="left">统一接口</p> <ul><li>     <div>REST  架构风格的核心特征就是强调组件之间有一个统一的接口，这表现在REST世界里，网络上所有的事物都被抽象为资源，而REST就是通过通用的链接器接口对   资源进行操作。这样设计的好处是保证系统提供的服务都是解耦的，极大的简化了系统，从而改善了系统的交互性和可重用性。并且REST针对Web的常见情况  做了优化，使得REST接口被设计为可以高效的转移大粒度的超媒体数据，这也就导致了REST接口对其它的架构并不是最优的。</div>     </li></ul> <p align="left">分层系统</p> <ul><li>     <div>分层系统规则的加入提高了各种层次之间的独立性，为整个系统的复杂性设置了边界，通过封装遗留的服务，使新的服务器免受遗留客户端的影响，这也就提高了系统的可伸缩性。</div>     </li></ul> <p align="left">按需代码</p> <ul><li>     <div>REST允许对客户端功能进行扩展。比如，通过下载并执行applet或脚本形式的代码，来扩展客户端功能。但这在改善系统可扩展性的同时，也降低了可见性。所以它只是REST的一个可选的约束。</div>     </li></ul> <p align="left"><strong>REST的设计准则</strong></p> <p align="left">REST架构是针对Web应用而设计的，其目的是为了降低开发的复杂性，提高系统的可伸缩性。REST提出了如下设计准则：</p> <ol><li>     <ol><li>         <div>网络上的所有事物都被抽象为资源（resource）；</div>         </li><li>         <div>每个资源对应一个唯一的资源标识符（resource identifier）；</div>         </li><li>         <div>通过通用的连接器接口（generic connector interface）对资源进行操作；</div>         </li><li>         <div>对资源的各种操作不会改变资源标识符；</div>         </li><li>         <div>所有的操作都是无状态的（stateless）。</div>         </li></ol>     </li></ol> <p align="left">REST中的资源所指的不是数据，而是数据和表现形式的组合，比如&#8220;最新访问的10位会员&#8221;和&#8220;最活跃的10为会员&#8221;在 数据上可能有重叠或者完全相同，而 由于他们的表现形式不同，所以被归为不同的资源，这也就是为什么REST的全名是Representational  State Transfer的原因。资源标识符就是URI(Uniform Resource  Identifier)，不管是图片，Word还是视频文件，甚至只是一种虚拟的服务，也不管你是xml格式,txt文件格式还是其它文件格式，全部通过  URI对资源进行唯一的标识。</p> <p align="left">REST是基于Http协议的，任何对资源的操作行为都是通过Http协议来实现。以往的Web开发大多数用的都是 Http协议中的GET和POST方  法，对其他方法很少使用，这实际上是因为对Http协议认识片面的理解造成的。Http不仅仅是一个简单的运载数据的协议，而是一个具有丰富内涵的网络软  件的协议。他不仅仅能对互联网资源进行唯一定位，而且还能告诉我们如何对该资源进行操作。Http把对一个资源的操作限制在4个方法以内：GET,  POST,PUT和DELETE，这正是对资源CRUD操作的实现。由于资源和URI是一一对应的，执行这些操作的时候URI是没有变化的，这和以往的  Web开发有很大的区别。正由于这一点，极大的简化了Web开发，也使得URI可以被设计成更为直观的反映资源的结构，这种URI的设计被称作  RESTful的URI。这位开发人员引入了一种新的思维方式：通过URL来设计系统结构。当然了，这种设计方式对一些特定情况也是不适用的，也就是说不  是所有的URI都可以RESTful的。</p> <p align="left">REST  之所以可以提高系统的可伸缩性，就是因为它要求所有的操作都是无状态的。由于没有了上下文(Context)的约束，做分布式和集群的时候就更为简单，也  可以让系统更为有效的利用缓冲池(Pool）。并且由于服务器端不需要记录客户端的一系列访问，也减少了服务器端的性能。</p> <p align="left"> </p> <p align="left"><strong>使用REST架构</strong></p> <p align="left">对于开发人员来  说，关心的是如何使用REST架构，这里我们来简单谈谈这个问题。REST不仅仅是一种崭新的架构，它带来的更是一种全新的Web开发过程中的思维方式：  通过URL来设计系统结构。在REST中，所有的URL都对应着资源，只要URL的设计是良好的，那么其呈现的系统结构也就是良好的。这点和TDD  (Test Driven  Development)很相似，他是通过测试用例来设计系统的接口，每一个测试用例都表示一系列用户的需求。开发人员不需要一开始就编写功能，而只需要  把需要实现的功能通过测试用例的形式表现出来即可。这个和REST中通过URL设计系统结构的方式类似，我们只需要根据需求设计出合理地URL，这些  URL不一定非要链接到指定的页面或者完成一些行为，只要它们能够直观的表现出系统的用户接口。根据这些URL，我们就可以方便的设计系统结构。从  REST架构的概念上来看，所有能够被抽象成资源的东西都可以被指定为一个URL，而开发人员所需要做的工作就是如何能把用户需求抽象为资源，以及如何抽   象的精确。因为对资源抽象的越为精确，对REST的应用来说就越好。这个和传统MVC开发模式中基于Action的思想差别就非常大。设计良好的URL，   不但对于开发人员来说可以更明确的认识系统结构，对使用者来说也方便记忆和识别资源，因为URL足够简单和有意义。按照以往的设计模式，很多URL后面都  是一堆参数，对于使用者来说也是很不方便的。</p> <p align="left">既然REST这  么好用，那么是不是所有的Web应用都能采取此种架构呢？答案是否定的。我们知道，直到现在为止，MVC(Model-View-Controller)   模式依然是Web开发最普遍的模式，绝大多数的公司和开发人员都采取此种架构来开发Web应用，并且其思维方式也停留于此。MVC模式由数据，视图和控制   器构成，通过事件(Event)触发Controller来改变Model和View。加上Webwork,Struts等开源框架的加入，MVC开发模   式已经相当成熟，其思想根本就是基于Action来驱动。从开发人员角度上来说，贸然接受一个新的架构会带来风险，其中的不确定因素太多。并且REST新   的思维方式是把所有用户需求抽象为资源，这在实际开发中是比较难做到的，因为并不是所有的用户需求都能被抽象为资源，这样也就是说不是整个系统的结构都能   通过REST的来表现。所以在开发中，我们需要根据以上2点来在REST和MVC中做出选择。我们认为比较好的办法是混用REST和MVC，因为这适合绝   大多数的Web应用开发，开发人员只需要对比较容易能够抽象为资源的用户需求采取REST的开发模式，而对其它需求采取MVC开发即可。这里需要提到的就  是ROR(Ruby on  Rails)框架，这是一个基于Ruby语言的越来越流行的Web开发框架，它极大的提高了Web开发的速度。更为重要的是，ROR(从1.2版本起)框   架是第一个引入REST做为核心思想的Web开发框架，它提供了对REST最好的支持，也是当今最成功的应用REST的Web开发框架。实际上，ROR的  REST实现就是REST和MVC混用，开发人员采用ROR框架，可以更快更好的构建Web应用。</p> <p align="left">对开发人员来说，REST不仅仅在Web开发上贡献了自己的力量，同时也让我们学到了如何把软件工程原则系统地应用于对一个真实软件的设计和评估上</p></div></div><img src ="http://www.blogjava.net/zhb8015/aggbug/379943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhb8015/" target="_blank">zhb8015</a> 2012-06-04 16:38 <a href="http://www.blogjava.net/zhb8015/articles/379943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xfire 与spring完整集成实例(转)</title><link>http://www.blogjava.net/zhb8015/articles/378208.html</link><dc:creator>zhb8015</dc:creator><author>zhb8015</author><pubDate>Tue, 15 May 2012 09:42:00 GMT</pubDate><guid>http://www.blogjava.net/zhb8015/articles/378208.html</guid><wfw:comment>http://www.blogjava.net/zhb8015/comments/378208.html</wfw:comment><comments>http://www.blogjava.net/zhb8015/articles/378208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhb8015/comments/commentRss/378208.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhb8015/services/trackbacks/378208.html</trackback:ping><description><![CDATA[<p><br />首先打开Myeclipse8.x以上版本..因为我这里共享那些xfire 项目所需要的jar都是Myeclipse自带添加的，所以要求大家伙准备好myeclipse8.x或者更高版本的..这里是spring2.0与xfire1.2整合..废话少说..转正正传..</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000"><strong>1.打开Myeclipse---&gt;new project--&gt;项目名随便吧..最好是有意义的名称..看起来比较舒服..</strong></span></p>
<p><strong><br /></strong></p>
<p><span style="color: #ff0000"><strong>2--配置web.xml</strong></span></p>
<p>&nbsp;</p>
<p><span style="color: #339966">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></p>
<p><span style="color: #339966">&lt;web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee &nbsp; http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&gt;</span></p>
<p><span style="color: #339966"><br /></span></p>
<p><span style="color: #339966">&nbsp; &lt;context-param&gt;</span></p>
<p><span style="color: #339966">&nbsp;&nbsp;<span style="white-space: pre"> </span>&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;</span></p>
<p><span style="color: #339966">&nbsp;&nbsp;<span style="white-space: pre"> </span>&lt;param-value&gt;classpath:applicationContext.xml,classpath:org/codehaus/xfire/spring/xfire.xml&lt;/param-value&gt;</span></p>
<p><span style="color: #339966">&nbsp; &lt;/context-param&gt;</span></p>
<p><span style="color: #339966"><br /></span></p>
<p><span style="color: #339966"><span style="white-space: pre"></span>&lt;listener&gt;</span></p>
<p><span style="color: #339966"><span style="white-space: pre"></span>&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;</span></p>
<p><span style="color: #339966"><span style="white-space: pre"></span>&lt;/listener&gt;</span></p>
<p><span style="color: #339966"><br /></span></p>
<p><span style="color: #339966">&nbsp; &nbsp;&lt;listener&gt;</span></p>
<p><span style="color: #339966"><span style="white-space: pre"></span>&lt;listener-class&gt;org.springframework.web.util.IntrospectorCleanupListener&lt;/listener-class&gt;</span></p>
<p><span style="color: #339966"><span style="white-space: pre"></span>&lt;/listener&gt;</span></p>
<p><span style="color: #339966">&nbsp; &lt;servlet&gt;</span></p>
<p><span style="color: #339966">&nbsp; &nbsp; &lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;</span></p>
<p><span style="color: #339966">&nbsp; &nbsp; &lt;servlet-class&gt;org.codehaus.xfire.transport.http.XFireConfigurableServlet&lt;/servlet-class&gt;</span></p>
<p><span style="color: #339966">&nbsp; &nbsp; &lt;load-on-startup&gt;0&lt;/load-on-startup&gt;</span></p>
<p><span style="color: #339966">&nbsp; &lt;/servlet&gt;</span></p>
<p><span style="color: #339966">&nbsp; &lt;servlet-mapping&gt;</span></p>
<p><span style="color: #339966">&nbsp; &nbsp; &lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;</span></p>
<p><span style="color: #339966">&nbsp; &nbsp; &lt;url-pattern&gt;/services/*&lt;/url-pattern&gt;</span></p>
<p><span style="color: #339966">&nbsp; &lt;/servlet-mapping&gt;</span></p>
<p><span style="color: #339966">&nbsp; &lt;welcome-file-list&gt;</span></p>
<p><span style="color: #339966">&nbsp; &nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;</span></p>
<p><span style="color: #339966">&nbsp; &lt;/welcome-file-list&gt;</span></p>
<p><span style="color: #339966">&lt;/web-app&gt;</span></p>
<p>&nbsp;</p>
<p><span style="color: #ff0000"><br /></span></p>
<p><span style="color: #ff0000"><strong>3.配置applicationContext.xml</strong></span></p>
<p>&nbsp;</p>
<p><span style="color: #ff99cc">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></p>
<p><span style="color: #ff99cc">&lt;beans</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>xmlns="http://www.springframework.org/schema/beans"</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>xmlns:p="http://www.springframework.org/schema/p"</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>xmlns:jee="http://www.springframework.org/schema/jee"</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>xmlns:aop="http://www.springframework.org/schema/aop"</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>xmlns:tx="http://www.springframework.org/schema/tx"</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>xsi:schemaLocation="http://www.springframework.org/schema/beans</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>&nbsp;http://www.springframework.org/schema/aop</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>&nbsp;http://www.springframework.org/schema/aop/spring-aop-2.0.xsd</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>&nbsp;http://www.springframework.org/schema/tx</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>&nbsp;http://www.springframework.org/schema/tx/spring-tx-2.0.xsd</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>&nbsp;http://www.springframework.org/schema/jee</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>&nbsp;http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>&nbsp;default-autowire="byName" default-lazy-init="true"</span></p>
<p><span style="color: #ff99cc"><span style="white-space: pre"></span>&nbsp;&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&nbsp;&lt;import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&nbsp;&lt;import resource="xfire-servlet.xml"/&gt;</span></p>
<p><span style="color: #00ff00">&lt;/beans&gt;</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #ff00ff"><strong>4.配置xfire-servlet.xml</strong></span></p>
<p>&nbsp;</p>
<p>为了不给大家伙困扰.所以我这里用那个就打开那个配置..</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #ff00ff">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></p>
<p><span style="color: #ff00ff">&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"</span></p>
<p><span style="color: #ff00ff">"http://www.springframework.org/dtd/spring-beans-2.0.dtd"&gt;</span></p>
<p><span style="color: #ff00ff">&lt;beans&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;!--&nbsp;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;bean id="HellWorldSimple" class="org.codehaus.xfire.spring.ServiceBean"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="name"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;value&gt;HelloWorldSimple&lt;/value&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="namespace"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;value&gt;http://service.core.xfire.com&lt;/value&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="serviceClass"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;value&gt;com.xfire.core.service.IHelloWorld&lt;/value&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="serviceBean"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;ref bean="HellWorldSimple"/&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/bean&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>--&gt;</span></p>
<p><span style="white-space: pre"><span style="color: #ff00ff"></span></span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;!--&nbsp;</span></p>
<p><span style="color: #ff00ff">&nbsp;<span style="white-space: pre"> </span>&lt;bean id="MyHandle" class="org.codehaus.xfire.spring.ServiceBean"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="name"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;value&gt;MyHandle&lt;/value&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="namespace"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;value&gt;http://service.core.xfire.com&lt;/value&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="serviceClass"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;value&gt;com.xfire.core.handler.MyHandlerImpl&lt;/value&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="serviceBean"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;ref bean="MyHandle"/&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/bean&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&nbsp;--&gt;</span></p>
<p><span style="color: #ff00ff"><br /></span></p>
<p><span style="color: #00ff00"><br /></span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&lt;bean id="UserInfoService" class="org.codehaus.xfire.spring.ServiceBean"&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&lt;property name="name"&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&lt;value&gt;UserInfo&lt;/value&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&lt;property name="namespace"&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&lt;value&gt;http://service.core.xfire.com/UserInfoService&lt;/value&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&lt;property name="serviceClass"&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&lt;value&gt;com.xfire.core.service.IUserInfoService&lt;/value&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&lt;property name="serviceBean"&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&lt;ref bean="UserInfoService"/&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #00ff00"><span style="white-space: pre"></span>&lt;/bean&gt;</span></p>
<p><span style="white-space: pre"><span style="color: #00ff00"></span></span></p>
<p><span style="white-space: pre"><span style="color: #ff00ff"></span></span></p>
<p><span style="color: #ff00ff">&lt;!-- &nbsp;</span></p>
<p><span style="color: #ff00ff">&nbsp; &nbsp;&lt;bean id="ApplictionException" class="org.codehaus.xfire.spring.ServiceBean"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="name"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;value&gt;ApplictionException&lt;/value&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #ff00ff"><br /></span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="namespace"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;value&gt;http://service.core.xfire.com/IMyExceptionSevice&lt;/value&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="white-space: pre"><span style="color: #ff00ff"></span></span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="serviceClass"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;value&gt;com.xfire.core.service.IMyExceptionSevice&lt;/value&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="white-space: pre"><span style="color: #ff00ff"></span></span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="serviceBean"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;ref bean="ApplictionException"/&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/bean&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>--&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&nbsp;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&nbsp;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&nbsp;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&nbsp;&lt;!-- &nbsp;</span></p>
<p><span style="color: #ff00ff">&nbsp; &nbsp;&lt;bean id="IServiceMap" class="org.codehaus.xfire.spring.ServiceBean"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="name"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;value&gt;AddressService&lt;/value&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #ff00ff"><br /></span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="namespace"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;value&gt;http://service.core.xfire.com/IServiceMap&lt;/value&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="white-space: pre"><span style="color: #ff00ff"></span></span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="serviceClass"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;value&gt;com.xfire.core.service.IServiceMap&lt;/value&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="white-space: pre"><span style="color: #ff00ff"></span></span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;property name="serviceBean"&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;ref bean="IServiceMap"/&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/property&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&lt;/bean&gt;</span></p>
<p><span style="white-space: pre"><span style="color: #ff00ff"></span></span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>--&gt;</span></p>
<p><span style="color: #ff00ff"><span style="white-space: pre"></span>&nbsp;</span></p>
<p><span style="white-space: pre"><span style="color: #ff00ff"></span></span></p>
<p><span style="color: #ff00ff">&lt;/beans&gt;</span></p>
<div><br /></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #339966"><strong>5.xfire-servlet.xml配置</strong></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #333399">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></p>
<p><span style="color: #333399">&lt;beans&gt;</span></p>
<p><span style="color: #333399">&lt;!--</span></p>
<p><span style="color: #333399">&nbsp; &nbsp;<span style="white-space: pre"> </span>在没整合spring之前的xfire是这样的配置</span></p>
<p><span style="color: #333399">&nbsp;<span style="white-space: pre"> </span>当要整合spring之后的这句代码复制到service 节点</span></p>
<p><span style="color: #333399">&nbsp;<span style="white-space: pre"> </span>xmlns="http://xfire.codehaus.org/config/1.0"</span></p>
<p><span style="color: #333399">&nbsp;<span style="white-space: pre"> </span>&lt;beans xmlns="http://xfire.codehaus.org/config/1.0"&gt;</span></p>
<p><span style="color: #333399">&nbsp;--&gt;</span></p>
<p><span style="color: #ff0000"><span style="color: #333399">&lt;</span><span style="color: #333399">service xmlns="http://xfire.codehaus.org/config/1.0</span><span style="color: #333399">"&gt;</span></span></p>
<p><span style="color: #333399"><br /></span></p>
<p><span style="color: #333399">&nbsp;</span></p>
<p><span style="white-space: pre; color: #333399"></span><span style="color: #339966">&nbsp;&lt;name&gt;UserInfo&lt;/name&gt;</span></p>
<p><span style="color: #339966"><span style="white-space: pre"></span>&nbsp;&lt;namespace&gt;http://service.core.xfire.com&lt;/namespace&gt;</span></p>
<p><span style="color: #339966"><span style="white-space: pre"></span>&nbsp;&lt;serviceClass&gt;com.xfire.core.service.IUserInfoService&lt;/serviceClass&gt;</span></p>
<p><span style="color: #339966"><span style="white-space: pre"></span>&nbsp;&lt;implementationClass&gt;com.xfire.core.service.impl.UserInfoServiceImpl</span></p>
<p><span style="color: #339966"><span style="white-space: pre"></span>&nbsp;&lt;/implementationClass&gt;</span></p>
<p><span style="color: #339966"><span style="white-space: pre"></span>&nbsp;&lt;scope&gt;request&lt;/scope&gt;</span></p>
<p><span style="color: #339966"><span style="white-space: pre"></span>&nbsp;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&nbsp;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;!--&nbsp;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;name&gt;HelloWorldSimple&lt;/name&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;namespace&gt;http://service.core.xfire.com&lt;/namespace&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;serviceClass&gt;com.xfire.core.service.IHelloWorld&lt;/serviceClass&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;implementationClass&gt;com.xfire.core.service.impl.HelloWorldImpl&lt;/implementationClass&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;style&gt;wrapped&lt;/style&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;use&gt;literal&lt;/use&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;scope&gt;request&lt;/scope&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>--&gt;</span></p>
<p><span style="white-space: pre"><span style="color: #333399"></span></span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;!-- &nbsp;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;name&gt;MyHandle&lt;/name&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;namespace&gt;http://service.core.xfire.com&lt;/namespace&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;serviceClass&gt;com.xfire.core.handler.IMyHandler&lt;/serviceClass&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;implementationClass&gt;com.xfire.core.handler.MyHandlerImpl&lt;/implementationClass&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;scope&gt;application&lt;/scope&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&nbsp;--&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&nbsp;&lt;!--&nbsp;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;name&gt;ServiceMap&lt;/name&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;namespace&gt;http://service.core.xfire.com&lt;/namespace&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;serviceClass&gt;com.xfire.core.service.IServiceMap&lt;/serviceClass&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;implementationClass&gt;com.xfire.core.service.impl.ServiceMapImpl</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;/implementationClass&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;scope&gt;request&lt;/scope&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&nbsp;--&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&nbsp;</span></p>
<p><span style="white-space: pre"><span style="color: #333399"></span></span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&nbsp;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;!--&nbsp;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;name&gt;ApplictionException&lt;/name&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;namespace&gt;http://service.core.xfire.com&lt;/namespace&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;serviceClass&gt;com.xfire.core.service.IMyExceptionSevice&lt;/serviceClass&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;implementationClass&gt;com.xfire.core.service.impl.MyExceptionSeviceImpl&lt;/implementationClass&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&lt;scope&gt;request&lt;/scope&gt;</span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>--&gt;</span></p>
<p><span style="white-space: pre"><span style="color: #333399"></span></span></p>
<p><span style="white-space: pre"><span style="color: #333399"></span></span></p>
<p><span style="color: #333399"><span style="white-space: pre"></span>&nbsp;</span></p>
<p><span style="color: #333399">&lt;/service&gt;</span></p>
<p><span style="color: #333399">&lt;/beans&gt;</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><br /></strong></p>
<p><strong>实现代码..</strong></p>
<p><strong>首先新建一个实体类UseInfor</strong></p>
<p>package com.xfire.core.entity;</p>
<p>&nbsp;</p>
<p>import java.io.Serializable;</p>
<p>import java.util.ArrayList;</p>
<p>import java.util.Arrays;</p>
<p>import java.util.HashMap;</p>
<p>import java.util.List;</p>
<p>import java.util.Map;</p>
<p>&nbsp;</p>
<p>/**</p>
<p>&nbsp;*@author jilongliang</p>
<p>&nbsp;*@Date 2012-2-29</p>
<p>&nbsp;*/</p>
<p>@SuppressWarnings("all")</p>
<p>public class&nbsp;<span style="color: #ff00ff">UserInfo&nbsp;</span>implements Serializable {</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>private Integer identifier;</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>private String address;</p>
<p><span style="white-space: pre"></span>private String city;</p>
<p><span style="white-space: pre"></span>private String proivice;</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public Integer getIdentifier() {</p>
<p><span style="white-space: pre"></span>return identifier;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public void setIdentifier(Integer identifier) {</p>
<p><span style="white-space: pre"></span>this.identifier = identifier;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public String getAddress() {</p>
<p><span style="white-space: pre"></span>return address;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public void setAddress(String address) {</p>
<p><span style="white-space: pre"></span>this.address = address;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public String getCity() {</p>
<p><span style="white-space: pre"></span>return city;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public void setCity(String city) {</p>
<p><span style="white-space: pre"></span>this.city = city;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public String getProivice() {</p>
<p><span style="white-space: pre"></span>return proivice;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public void setProivice(String proivice) {</p>
<p><span style="white-space: pre"></span>this.proivice = proivice;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public String getCountry() {</p>
<p><span style="white-space: pre"></span>return country;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public void setCountry(String country) {</p>
<p><span style="white-space: pre"></span>this.country = country;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public String getPostCode() {</p>
<p><span style="white-space: pre"></span>return postCode;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public void setPostCode(String postCode) {</p>
<p><span style="white-space: pre"></span>this.postCode = postCode;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public String[] getArrary() {</p>
<p><span style="white-space: pre"></span>return arrary;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public void setArrary(String[] arrary) {</p>
<p><span style="white-space: pre"></span>this.arrary = arrary;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public List&lt;Integer&gt; getList() {</p>
<p><span style="white-space: pre"></span>return list;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public void setList(List&lt;Integer&gt; list) {</p>
<p><span style="white-space: pre"></span>this.list = list;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public Map&lt;Integer, InnerClass&gt; getMap() {</p>
<p><span style="white-space: pre"></span>return map;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public void setMap(Map&lt;Integer, InnerClass&gt; map) {</p>
<p><span style="white-space: pre"></span>this.map = map;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public boolean isExist() {</p>
<p><span style="white-space: pre"></span>return isExist;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public void setExist(boolean isExist) {</p>
<p><span style="white-space: pre"></span>this.isExist = isExist;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public InnerClass getInner() {</p>
<p><span style="white-space: pre"></span>return inner;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public void setInner(InnerClass inner) {</p>
<p><span style="white-space: pre"></span>this.inner = inner;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>private String country;</p>
<p><span style="white-space: pre"></span>private String postCode;</p>
<p><span style="white-space: pre"></span>private String[] arrary;</p>
<p><span style="white-space: pre"></span>private List&lt;Integer&gt; list;</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>private Map&lt;Integer, InnerClass&gt; map;</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>private boolean isExist;</p>
<p><span style="white-space: pre"></span>private InnerClass inner;</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>public UserInfo() {</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>list = new ArrayList&lt;Integer&gt;();</p>
<p><span style="white-space: pre"></span>list.add(1);</p>
<p><span style="white-space: pre"></span>list.add(2);</p>
<p><span style="white-space: pre"></span>list.add(3);</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>map = new HashMap&lt;Integer, InnerClass&gt;();</p>
<p><span style="white-space: pre"></span>map.put(1, new InnerClass("a"));</p>
<p><span style="white-space: pre"></span>map.put(2, new InnerClass("b"));</p>
<p><span style="white-space: pre"></span>map.put(3, new InnerClass("c"));</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>inner = new InnerClass();</p>
<p><span style="white-space: pre"></span>inner.setInnerName("服务器地址: Address InnerClass");</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p><span style="white-space: pre"></span>@Override</p>
<p><span style="white-space: pre"></span>public String toString() {</p>
<p><span style="white-space: pre"></span>return "Address [address=" + address + ", arrary="</p>
<p><span style="white-space: pre"></span>+ Arrays.toString(arrary) + ", city=" + city + ", country="</p>
<p><span style="white-space: pre"></span>+ country + ", identifier=" + identifier + ", inner=" + inner</p>
<p><span style="white-space: pre"></span>+ ", isExist=" + isExist + ", list=" + list + ", map=" + map</p>
<p><span style="white-space: pre"></span>+ ", postCode=" + postCode + ", proivice=" + proivice + "]";</p>
<p><span style="white-space: pre"></span>}</p>
<p>&nbsp;</p>
<p>}</p>
<div><br /></div>
<div><span style="color: #ff00ff"><br /></span></div>
<div><span style="color: #ff00ff">----内置实体类</span></div>
<div>package com.xfire.core.entity;</div>
<div><br /></div>
<div>import java.io.Serializable;</div>
<div><br /></div>
<div>/**</div>
<div>&nbsp;*@Project xfire</div>
<div>&nbsp;*@author jilongliang</div>
<div>&nbsp;*@Date 2012-2-29</div>
<div>&nbsp;*@Class InnerClass.java</div>
<div>&nbsp;*/</div>
<div>@SuppressWarnings("all")</div>
<div>public class&nbsp;<span style="color: #ff00ff">InnerClass&nbsp;</span>implements Serializable {</div>
<div><br /></div>
<div><span style="white-space: pre"></span>private String innerName = "static InnerClass";</div>
<div><br /></div>
<div><span style="white-space: pre"></span>public String getInnerName() {</div>
<div><span style="white-space: pre"></span>return innerName;</div>
<div><span style="white-space: pre"></span>}</div>
<div><br /></div>
<div><span style="white-space: pre"></span>public void setInnerName(String innerName) {</div>
<div><span style="white-space: pre"></span>this.innerName = innerName;</div>
<div><span style="white-space: pre"></span>}</div>
<div><br /></div>
<div><span style="white-space: pre"></span>public InnerClass() {</div>
<div><span style="white-space: pre"></span>}</div>
<div><br /></div>
<div><span style="white-space: pre"></span>public InnerClass(String innerName) {</div>
<div><span style="white-space: pre"></span>super();</div>
<div><span style="white-space: pre"></span>this.innerName = innerName;</div>
<div><br /></div>
<div><span style="white-space: pre"></span>}</div>
<div>}</div>
<div><br /></div>
<div><br /></div>
<div><br /></div>
<div><span style="color: #ff00ff">其次一个接口类:</span></div>
<div>package com.xfire.core.service;</div>
<div><br /></div>
<div>import java.util.List;</div>
<div><br /></div>
<div>import com.xfire.core.entity.UserInfo;</div>
<div><br /></div>
<div>/**</div>
<div>&nbsp;*@author jilongliang</div>
<div>&nbsp;*@Date 2012-2-29</div>
<div>&nbsp;*/</div>
<div>public interface&nbsp;<span style="color: #ff00ff">IUserInfoService&nbsp;</span>{</div>
<div><span style="white-space: pre"></span>public List&lt;UserInfo&gt; getAddressList();</div>
<div><br /></div>
<div><span style="white-space: pre"></span>public List&lt;UserInfo&gt; setAddresses(List&lt;UserInfo&gt; list);</div>
<div>}</div>
<div><br /></div>
<div><br /></div>
<div><br /></div>
<div><span style="color: #ff00ff">然后新建一个实现类去实现接口</span></div>
<div><br /></div>
<div>
<div>package com.xfire.core.service.impl;</div>
<div><br /></div>
<div>import java.util.ArrayList;</div>
<div>import java.util.List;</div>
<div><br /></div>
<div>import com.xfire.core.entity.UserInfo;</div>
<div>import com.xfire.core.service.IUserInfoService;</div>
<div><br /></div>
<div>/**</div>
<div>&nbsp;*@author jilongliang</div>
<div>&nbsp;*@Date 2012-2-29</div>
<div>&nbsp;*/</div>
<div>public class UserInfoServiceImpl implements IUserInfoService {</div>
<div><br /></div>
<div><span style="white-space: pre"></span>private int requestCount = 0;</div>
<div><br /></div>
<div><span style="white-space: pre"></span>public List&lt;UserInfo&gt; getAddressList() {</div>
<div><span style="white-space: pre"></span>requestCount++;</div>
<div><span style="white-space: pre"></span>System.out.println("requestCount" + requestCount);</div>
<div><span style="white-space: pre"></span>List&lt;UserInfo&gt; listAdd = new ArrayList&lt;UserInfo&gt;();</div>
<div><span style="white-space: pre"></span>UserInfo address = new UserInfo();</div>
<div><span style="white-space: pre"></span>address.setIdentifier(1);</div>
<div><span style="white-space: pre"></span>address.setCountry("中國");</div>
<div><span style="white-space: pre"></span>address.setProivice("廣東省");</div>
<div><span style="white-space: pre"></span>address.setCity("陽江");</div>
<div><span style="white-space: pre"></span>address.setAddress("廣東陽春");</div>
<div><span style="white-space: pre"></span>address.setPostCode("1111111");</div>
<div><span style="white-space: pre"></span>address.setExist(false);</div>
<div><span style="white-space: pre"></span>address.setArrary(new String[] { "22", "23", "24" });</div>
<div><span style="white-space: pre"></span>listAdd.add(address);</div>
<div><br /></div>
<div><span style="white-space: pre"></span>address.setIdentifier(2);</div>
<div><span style="white-space: pre"></span>address.setCountry("中國");</div>
<div><span style="white-space: pre"></span>address.setProivice("廣東省");</div>
<div><span style="white-space: pre"></span>address.setCity("陽江");</div>
<div><span style="white-space: pre"></span>address.setAddress("廣東陽春");</div>
<div><span style="white-space: pre"></span>address.setPostCode("1111111");</div>
<div><span style="white-space: pre"></span>address.setExist(false);</div>
<div><span style="white-space: pre"></span>address.setArrary(new String[] { "a", "b", "c" });</div>
<div><span style="white-space: pre"></span>listAdd.add(address);</div>
<div><br /></div>
<div><span style="white-space: pre"></span>return listAdd;</div>
<div><span style="white-space: pre"></span>}</div>
<div><br /></div>
<div><span style="white-space: pre"></span>/**</div>
<div><span style="white-space: pre"></span>&nbsp;*&nbsp;</div>
<div><span style="white-space: pre"></span>&nbsp;* @param list</div>
<div><span style="white-space: pre"></span>&nbsp;* @return</div>
<div><span style="white-space: pre"></span>&nbsp;*/</div>
<div><span style="white-space: pre"></span>public List&lt;UserInfo&gt; setAddresses(List&lt;UserInfo&gt; list) {</div>
<div><span style="white-space: pre"></span>requestCount++;</div>
<div><span style="white-space: pre"></span>System.out.println("requestCount" + requestCount);</div>
<div><span style="white-space: pre"></span>return list;</div>
<div><span style="white-space: pre"></span>}</div>
<div><br /></div>
<div>}</div></div>
<div><br /></div>
<div><br /></div>
<div><br /></div>
<div><span style="color: #ff00ff">-----客户端</span></div>
<div><br /></div>
<div>
<div>package com.xfire.core.client;</div>
<div><br /></div>
<div>import java.net.MalformedURLException;</div>
<div>import java.util.ArrayList;</div>
<div>import java.util.Iterator;</div>
<div>import java.util.List;</div>
<div><br /></div>
<div>import org.codehaus.xfire.client.XFireProxyFactory;</div>
<div>import org.codehaus.xfire.service.Service;</div>
<div>import org.codehaus.xfire.service.binding.ObjectServiceFactory;</div>
<div><br /></div>
<div>import com.xfire.core.entity.UserInfo;</div>
<div>import com.xfire.core.service.IUserInfoService;</div>
<div><br /></div>
<div>/**</div>
<div>&nbsp;*@author jilongliang</div>
<div>&nbsp;*@Date 2012-3-5</div>
<div>&nbsp;*&nbsp;</div>
<div>&nbsp;*/</div>
<div>public class&nbsp;<span style="color: #ff00ff">UserInfoClient&nbsp;</span>{</div>
<div><br /></div>
<div><span style="white-space: pre"></span>public static void main(String[] args) {</div>
<div><span style="white-space: pre"></span>getServiceList();</div>
<div><span style="white-space: pre"></span>setServiceList();</div>
<div><span style="white-space: pre"></span>}</div>
<div><br /></div>
<div><span style="white-space: pre"></span>static String url = "http://localhost:8081/xfire/services/UserInfo";</div>
<div><br /></div>
<div><span style="white-space: pre"></span>/**</div>
<div><span style="white-space: pre"></span>&nbsp;*&nbsp;</div>
<div><span style="white-space: pre"></span>&nbsp;*/</div>
<div><span style="white-space: pre"></span>public static void getServiceList() {</div>
<div><span style="white-space: pre"></span>Service service = new ObjectServiceFactory()</div>
<div><span style="white-space: pre"></span>.create(IUserInfoService.class);</div>
<div><br /></div>
<div><span style="white-space: pre"></span>try {</div>
<div><span style="white-space: pre"></span>IUserInfoService iAddressService = (IUserInfoService) new XFireProxyFactory()</div>
<div><span style="white-space: pre"></span>.create(service, url);</div>
<div><span style="white-space: pre"></span>List&lt;UserInfo&gt; list = (ArrayList&lt;UserInfo&gt;) iAddressService</div>
<div><span style="white-space: pre"></span>.getAddressList();</div>
<div><br /></div>
<div><span style="white-space: pre"></span>System.out.println("一共多少条数据：" + list.size());</div>
<div><br /></div>
<div><span style="white-space: pre"></span>for (Iterator&lt;UserInfo&gt; iter = list.iterator(); iter.hasNext();) {</div>
<div><br /></div>
<div><span style="white-space: pre"></span>UserInfo a = iter.next();</div>
<div><br /></div>
<div><span style="white-space: pre"></span>System.out.println(a);</div>
<div><span style="white-space: pre"></span>}</div>
<div><br /></div>
<div><span style="white-space: pre"></span>} catch (MalformedURLException e) {</div>
<div><span style="white-space: pre"></span>e.printStackTrace();</div>
<div><span style="white-space: pre"></span>}</div>
<div><span style="white-space: pre"></span>}</div>
<div><br /></div>
<div><span style="white-space: pre"></span>public static void setServiceList() {</div>
<div><span style="white-space: pre"></span>Service service = new ObjectServiceFactory()</div>
<div><span style="white-space: pre"></span>.create(IUserInfoService.class);</div>
<div><br /></div>
<div><span style="white-space: pre"></span>try {</div>
<div><span style="white-space: pre"></span>IUserInfoService iAddressService = (IUserInfoService) new XFireProxyFactory()</div>
<div><span style="white-space: pre"></span>.create(service, url);</div>
<div><br /></div>
<div><span style="white-space: pre"></span>List&lt;UserInfo&gt; listAdd = new ArrayList&lt;UserInfo&gt;();</div>
<div><span style="white-space: pre"></span>UserInfo address = new UserInfo();</div>
<div><span style="white-space: pre"></span>address.setIdentifier(1);</div>
<div><span style="white-space: pre"></span>address.setCountry("中國");</div>
<div><span style="white-space: pre"></span>address.setProivice("廣東省");</div>
<div><span style="white-space: pre"></span>address.setCity("陽江");</div>
<div><span style="white-space: pre"></span>address.setAddress("廣東陽春");</div>
<div><span style="white-space: pre"></span>address.setPostCode("1111111");</div>
<div><span style="white-space: pre"></span>address.setExist(false);</div>
<div><span style="white-space: pre"></span>address.setArrary(new String[] { "22", "23", "24" });</div>
<div><span style="white-space: pre"></span>listAdd.add(address);</div>
<div><br /></div>
<div><span style="white-space: pre"></span>address.setIdentifier(2);</div>
<div><span style="white-space: pre"></span>address.setCountry("中國");</div>
<div><span style="white-space: pre"></span>address.setProivice("廣東省");</div>
<div><span style="white-space: pre"></span>address.setCity("陽江");</div>
<div><span style="white-space: pre"></span>address.setAddress("廣東陽春");</div>
<div><span style="white-space: pre"></span>address.setPostCode("1111111");</div>
<div><span style="white-space: pre"></span>address.setExist(false);</div>
<div><span style="white-space: pre"></span>address.setArrary(new String[] { "a", "b", "c" });</div>
<div><span style="white-space: pre"></span>listAdd.add(address);</div>
<div><br /></div>
<div><span style="white-space: pre"></span>List&lt;UserInfo&gt; returnAdd = iAddressService.setAddresses(listAdd);</div>
<div><br /></div>
<div><span style="white-space: pre"></span>System.out.println("总数:" + returnAdd);</div>
<div><br /></div>
<div><span style="white-space: pre"></span>for (Iterator&lt;UserInfo&gt; it = returnAdd.iterator(); it.hasNext();) {</div>
<div><span style="white-space: pre"></span>UserInfo address2 = it.next();</div>
<div><br /></div>
<div><span style="white-space: pre"></span>System.out.println(address2);</div>
<div><span style="white-space: pre"></span>}</div>
<div><br /></div>
<div><span style="white-space: pre"></span>} catch (MalformedURLException e) {</div>
<div><span style="white-space: pre"></span>e.printStackTrace();</div>
<div><span style="white-space: pre"></span>}</div>
<div><br /></div>
<div><span style="white-space: pre"></span>}</div>
<div>}</div></div>
<div><br /></div>
<div><br /></div>
<p>图解----</p>
<p>&nbsp;</p>
<p><br /><img alt="" src="http://dl.iteye.com/upload/attachment/0064/2935/9fba5987-a72a-36d4-bdca-f6a9a2916619.jpg" /></p>
<p><br /><img alt="" src="http://dl.iteye.com/upload/attachment/0064/2937/55077c5a-fd71-32f9-8ce2-9aa8b6151b64.jpg" /><br />&nbsp;<br /><img alt="" src="http://dl.iteye.com/upload/attachment/0064/2939/1c6e5aaf-813e-318e-812d-6bad945c7ec5.jpg" /><br />&nbsp;<br /><img alt="" src="http://dl.iteye.com/upload/attachment/0064/2941/f1a81d14-5ae3-3098-b783-e688ca654434.jpg" /><br />&nbsp;<br /><img class="magplus" title="点击查看原始大小图片" alt="" src="http://dl.iteye.com/upload/attachment/0064/2943/2304e273-e360-3b87-9609-7ed8b46e9efc.jpg" width="700" height="422" /><br />&nbsp;<br /><img class="magplus" title="点击查看原始大小图片" alt="" src="http://dl.iteye.com/upload/attachment/0064/2945/6487af9c-e608-3364-b9cd-56b8cfe65a5d.jpg" width="700" height="346" /></p>
<p>&nbsp;<br /><img class="magplus" title="点击查看原始大小图片" alt="" src="http://dl.iteye.com/upload/attachment/0064/2947/c8976ee7-1490-34fb-bf9b-83ddbb03c403.jpg" width="700" height="342" /><br />&nbsp;<br /><img class="magplus" title="点击查看原始大小图片" alt="" src="http://dl.iteye.com/upload/attachment/0064/2950/6594f082-26b6-3e0e-8a34-e6ed281b1a27.jpg" width="700" height="458" /><br />&nbsp;<br /><img alt="" src="http://dl.iteye.com/upload/attachment/0064/2952/bc3a498b-7c02-32b9-bde7-fe67497564c4.jpg" /><br />&nbsp;<br /><img alt="" src="http://dl.iteye.com/upload/attachment/0064/2954/79c35fee-afb5-3925-a69f-a74af51924f2.jpg" /><br />&nbsp;<br /><img class="magplus" title="点击查看原始大小图片" alt="" src="http://dl.iteye.com/upload/attachment/0064/2956/63c65834-c81a-353d-8f50-b48ab0392344.jpg" width="700" height="201" /></p>&nbsp; 
<p>&nbsp;</p>
<p>&nbsp;</p>子书下载<a href="http://download.csdn.net/detail/l_ji_l/4116804">http://download.csdn.net/detail/l_ji_l/4116804</a> 
<p>源代码下载：<a href="http://download.csdn.net/detail/l_ji_l/4116788">http://download.csdn.net/detail/l_ji_l/4116788</a></p><img src ="http://www.blogjava.net/zhb8015/aggbug/378208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhb8015/" target="_blank">zhb8015</a> 2012-05-15 17:42 <a href="http://www.blogjava.net/zhb8015/articles/378208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.IllegalStateException: Could not find valid implementation for: 2.0</title><link>http://www.blogjava.net/zhb8015/articles/377905.html</link><dc:creator>zhb8015</dc:creator><author>zhb8015</author><pubDate>Fri, 11 May 2012 06:42:00 GMT</pubDate><guid>http://www.blogjava.net/zhb8015/articles/377905.html</guid><wfw:comment>http://www.blogjava.net/zhb8015/comments/377905.html</wfw:comment><comments>http://www.blogjava.net/zhb8015/articles/377905.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhb8015/comments/commentRss/377905.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhb8015/services/trackbacks/377905.html</trackback:ping><description><![CDATA[<pre>myeclipse6.5,xfire1.2.6开发webservice报错，</pre><pre>报错原因：xfire自带spring-1.2.6.jar 与spring.jar版本冲突，删除一个即可 </pre><pre>&nbsp;</pre><pre>&nbsp;</pre><pre>java.lang.IllegalStateException: Could not find valid implementation for: 2.0
	org.apache.xbean.spring.context.impl.XBeanHelper.createBeanDefinitionReader(XBeanHelper.java:48)
	org.codehaus.xfire.spring.XFireConfigLoader.getXFireApplicationContext(XFireConfigLoader.java:74)
	org.codehaus.xfire.spring.XFireConfigLoader.loadContext(XFireConfigLoader.java:41)
	org.codehaus.xfire.transport.http.XFireConfigurableServlet.loadConfig(XFireConfigurableServlet.java:86)
	org.codehaus.xfire.transport.http.XFireConfigurableServlet.createXFire(XFireConfigurableServlet.java:54)
	org.codehaus.xfire.transport.http.XFireServlet.init(XFireServlet.java:45)
	javax.servlet.GenericServlet.init(GenericServlet.java:212)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	java.lang.Thread.run(Thread.java:662)
</pre>
<p>&nbsp;</p>
<p><strong><font style="background-color: #525d76" color="#ffffff">root cause</font></strong> <pre>java.lang.reflect.InvocationTargetException
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	org.apache.xbean.spring.context.impl.XBeanHelper.createBeanDefinitionReader(XBeanHelper.java:46)
	org.codehaus.xfire.spring.XFireConfigLoader.getXFireApplicationContext(XFireConfigLoader.java:74)
	org.codehaus.xfire.spring.XFireConfigLoader.loadContext(XFireConfigLoader.java:41)
	org.codehaus.xfire.transport.http.XFireConfigurableServlet.loadConfig(XFireConfigurableServlet.java:86)
	org.codehaus.xfire.transport.http.XFireConfigurableServlet.createXFire(XFireConfigurableServlet.java:54)
	org.codehaus.xfire.transport.http.XFireServlet.init(XFireServlet.java:45)
	javax.servlet.GenericServlet.init(GenericServlet.java:212)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	java.lang.Thread.run(Thread.java:662)
</pre>
<p>&nbsp;</p>
<p><strong><font style="background-color: #525d76" color="#ffffff">root cause</font></strong> <pre>java.lang.NoSuchMethodError: org.springframework.beans.factory.xml.XmlBeanDefinitionReader.setValidationMode(I)V
	org.apache.xbean.spring.context.v2.XBeanXmlBeanDefinitionReader.&lt;init&gt;(XBeanXmlBeanDefinitionReader.java:58)
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	org.apache.xbean.spring.context.impl.XBeanHelper.createBeanDefinitionReader(XBeanHelper.java:46)
	org.codehaus.xfire.spring.XFireConfigLoader.getXFireApplicationContext(XFireConfigLoader.java:74)
	org.codehaus.xfire.spring.XFireConfigLoader.loadContext(XFireConfigLoader.java:41)
	org.codehaus.xfire.transport.http.XFireConfigurableServlet.loadConfig(XFireConfigurableServlet.java:86)
	org.codehaus.xfire.transport.http.XFireConfigurableServlet.createXFire(XFireConfigurableServlet.java:54)
	org.codehaus.xfire.transport.http.XFireServlet.init(XFireServlet.java:45)
	javax.servlet.GenericServlet.init(GenericServlet.java:212)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	java.lang.Thread.run(Thread.java:662)
</pre><img src ="http://www.blogjava.net/zhb8015/aggbug/377905.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhb8015/" target="_blank">zhb8015</a> 2012-05-11 14:42 <a href="http://www.blogjava.net/zhb8015/articles/377905.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>理解AXIOM</title><link>http://www.blogjava.net/zhb8015/articles/377311.html</link><dc:creator>zhb8015</dc:creator><author>zhb8015</author><pubDate>Thu, 03 May 2012 10:16:00 GMT</pubDate><guid>http://www.blogjava.net/zhb8015/articles/377311.html</guid><wfw:comment>http://www.blogjava.net/zhb8015/comments/377311.html</wfw:comment><comments>http://www.blogjava.net/zhb8015/articles/377311.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhb8015/comments/commentRss/377311.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhb8015/services/trackbacks/377311.html</trackback:ping><description><![CDATA[AXis 对象模型（AXis Object Model，AXIOM）是 Apache Axis 2 的 XML 对象模型，其目标是提供强大的特性组合彻底改变 XML 处理技术。AXIOM 超越了现有的 XML 处理技术，它把延迟构建和一种快速、轻型的可定制对象模型结合了起来。 
<div class="spctrl"></div>　　AXIOM 还不是另一种对象模型。它有着明确的设计目标：大幅提升 Apache 下一代 SOAP 协议栈 Axis 2 的性能。结果造就了不同于其他对象模型的 AXIOM（也称为 OM），因为它突出了构造的轻型，并且 仅当需要的时候才建立。由于是轻型的，它尽可能地减轻对系统资源的压力，特别是 CPU 和内存。同时，延迟构造又允许在其他部分还没有完成的时候使用树的一部分。AXIOM 强大的延迟构建能力源于底层的 Streaming API for XML (StAX) 解析器。AXIOM 提供了所有这些特性，同时幕后的复杂性对用户是透明的。 
<div class="spctrl"></div>　　使用 XMLBench Document Model Benchmark 测试的结果表明，AXIOM 的性能和现有的高性能对象模型相当。但是 AXIOM 的内存占用要好于现有多数依靠 SAX 和/或 DOM 输入输出的对象模型。因此对于 Web 服务引擎或内存受限制设备这样的 XML 处理器，AXIOM 是一种理想的选择，它可用于 
<div class="spctrl"></div>　　一般的 XML 处理，但是有一个对 SOAP 优化了的可选层。 <img src ="http://www.blogjava.net/zhb8015/aggbug/377311.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhb8015/" target="_blank">zhb8015</a> 2012-05-03 18:16 <a href="http://www.blogjava.net/zhb8015/articles/377311.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>axis2教程（转）</title><link>http://www.blogjava.net/zhb8015/articles/377301.html</link><dc:creator>zhb8015</dc:creator><author>zhb8015</author><pubDate>Thu, 03 May 2012 09:07:00 GMT</pubDate><guid>http://www.blogjava.net/zhb8015/articles/377301.html</guid><wfw:comment>http://www.blogjava.net/zhb8015/comments/377301.html</wfw:comment><comments>http://www.blogjava.net/zhb8015/articles/377301.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhb8015/comments/commentRss/377301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhb8015/services/trackbacks/377301.html</trackback:ping><description><![CDATA[<div class="blog_title">
<h3><a href="http://zxs19861202.iteye.com/blog/630359">Axis2 教程</a> </h3>
<h3><em class="actions"></em>(<a href="http://zxs19861202.iteye.com/blog/630359">http://zxs19861202.iteye.com/blog/630359</a></h3>
<h3><a href="http://zxs19861202.iteye.com/blog/635903">http://zxs19861202.iteye.com/blog/635903</a>&nbsp;&nbsp; 手工打包)</h3>
<h3><a href="http://www.iteye.com/blogs/tag/WebService">WebService</a><a href="http://www.iteye.com/blogs/tag/Tomcat">Tomcat</a><a href="http://www.iteye.com/blogs/tag/Apache">Apache</a><a href="http://www.iteye.com/blogs/tag/%E6%B5%8F%E8%A7%88%E5%99%A8">浏览器</a><a href="http://www.iteye.com/blogs/tag/Web">Web</a></h3></div>
<div id="blog_content" class="blog_content">
<p>&nbsp; Axis2<span>是一套崭新的</span>WebService<span>引擎，该版本是对</span>Axis1.x<span>重新设计的产物。</span>Axis2<span>不仅支持</span>SOAP1.1<span>和</span>SOAP1.2<span>，还集成了非常流行的</span>REST WebService<span>，同时还支持</span>Spring<span>、</span>JSON<span>等技术。这些都将在后面的系列教程中讲解。在本文中主要介绍了如何使用</span>Axis2<span>开发一个不需要任何配置文件的</span>WebService<span>，并在客户端使用</span>Java<span>和</span>C#<span>调用这个</span>WebService<span>。</span></p>
<p><strong><span>一、</span>Axis2</strong><strong><span>的下载和安装</span></strong></p>
<p>&nbsp;&nbsp;&nbsp; <span>读者可以从如下的网址下载</span>Axis2<span>的最新版本：</span></p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://ws.apache.org/axis2/">http://ws.apache.org/axis2/</a></p>
<p>&nbsp;&nbsp;&nbsp; <span>在本文使用了目前</span>Axis2<span>的最新版本</span>1.4.1<span>。读者可以下载如下两个</span>zip<span>包：</span></p>
<p>&nbsp;&nbsp;&nbsp; axis2-1.4.1-bin.zip</p>
<p>&nbsp;&nbsp;&nbsp; axis2-1.4.1-war.zip</p>
<p>&nbsp;&nbsp;&nbsp; <span>其中</span>axis2-1.4.1-bin.zip<span>文件中包含了</span>Axis2<span>中所有的</span>jar<span>文件</span>, axis2-1.4.1-war.zip<span>文件用于将</span>WebService<span>发布到</span>Web<span>容器中。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span>将</span>axis2-1.4.1-war.zip<span>文件解压到相应的目录，将目录中的</span>axis2.war<span>文件放到</span>&lt;Tomcat<span>安装目录</span>&gt;\webapps<span>目录中（本文使用的</span>Tomcat<span>的版本是</span>6.x<span>），并启动</span>Tomcat<span>。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span>在浏览器地址栏中输入如下的</span>URL<span>：</span></p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://localhost:8080/axis2/">http://localhost:8080/axis2/</a></p>
<p>&nbsp;&nbsp;&nbsp; <span>如果在浏览器中显示出如图</span>1<span>所示的页面，则表示</span>Axis2<span>安装成功。<br /></span></p>
<div><br /><br />图1</div>
<div><br /><img class="magplus" title="点击查看原始大小图片" alt="" src="http://dl.iteye.com/upload/attachment/228189/8361c97d-ea79-3b16-aaed-f6dba647ddf9.jpg" width="700" height="405" /><br />&nbsp;<br /></div>
<p><strong><span>二、编写和发布WebService</span></strong></p>
<p>&nbsp;&nbsp;<span>对于用</span>Java<span>实现的服务程序给人的印象就是需要进行大量的配置，不过这一点在</span>Axis2<span>中将被终结。在</span>Axis2<span>中不需要进行任何的配置，就可以直接将一个简单的</span>POJO<span>发布成</span>WebService<span>。其中</span>POJO<span>中所有的</span>public<span>方法将被发布成</span>WebService<span>方法。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span>下面我们来实现一个简单的</span>POJO<span>，代码如下：</span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SimpleService<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getGreeting(String&nbsp;name)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">你好&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;name;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;getPrice()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;java.util.Random().nextInt(</span><span style="color: #000000">1000</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /></span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span>在</span>SimpleService<span>类中有两个方法，由于这两个方法都是</span>public<span>方法，因此，它们都将作为</span>WebService<span>方法被发布。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span>编译</span>SimpleService<span>类后，将</span>SimpleService.class<span>文件放到</span>&lt;Tomcat<span>安装目录</span>&gt;\webapps\axis2\WEB-INF\pojo<span>目录中（如果没有</span>pojo<span>目录，则建立该目录）。现在我们已经成功将</span>SimpleService<span>类发布成了</span>WebService<span>。在浏览器地址栏中输入如下的</span>URL<span>：</span></p>
<p><a href="http://localhost:8080/axis2/services/listServices">http://localhost:8080/axis2/services/listServices</a></p>
<p>&nbsp;&nbsp;&nbsp; <span>这时当前页面将显示所有在</span>Axis2<span>中发布的</span>WebService<span>，如图</span>2<span>所示。<br /></span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span>在浏览器地址栏中输入如下的两个</span>URL<span>来分别测试</span>getGreeting<span>和</span>getPrice<span>方法：</span></p>
<p><a href="http://localhost:8080/axis2/services/SimpleService/getGreeting?name=bill">http://localhost:8080/axis2/services/SimpleService/getGreeting?name=bill</a></p>
<p><a href="http://localhost:8080/axis2/services/SimpleService/getPrice">http://localhost:8080/axis2/services/SimpleService/getPrice</a><br /><br />&nbsp;&nbsp;&nbsp; <span>图</span>3<span>和图</span>4<span>分别显示了</span>getGreeting<span>和</span>getPrice<span>方法的测试结果。<br /></span></p>
<p>&nbsp;</p>
<p><span>图3&nbsp; getGreeting方法的测试结果</span></p>
<p><span><br /><img alt="" src="http://dl.iteye.com/upload/attachment/228193/d266b21e-4f1b-3413-997d-f1192eb0b5b5.jpg" /><br />&nbsp;</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>图4&nbsp; getPrice方法的测试结果</span></p>
<p><span><br /><img alt="" src="http://dl.iteye.com/upload/attachment/228195/f462cbcc-efa0-3cfa-a9de-9a13614c8c2f.jpg" /><br />&nbsp;</span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span>在编写、发布和测试</span>0<span>配置的</span>WebService<span>时应注意如下几点：</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span>1.&nbsp;POJO<span>类不能使用</span>package<span>关键字声明包。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span>2.&nbsp;Axis2<span>在默认情况下可以热发布</span>WebService<span>，也就是说，将</span>WebService<span>的</span>.class<span>文件复制到</span>pojo<span>目录中时，</span>Tomcat<span>不需要重新启动就可以自动发布</span>WebService<span>。如果想取消</span>Axis2<span>的热发布功能，可以打开</span>&lt;Tomcat<span>安装目录</span>&gt;\webapps\axis2\WEB-INF\conf\axis2.xml<span>，找到如下的配置代码：</span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">&lt;</span><span style="color: #800000">parameter&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="hotdeployment"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">true</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">parameter</span><span style="color: #0000ff">&gt;</span> </div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span>将</span>true<span>改为</span>false<span>即可。要注意的是，</span>Axis2<span>在默认情况下虽然是热发布，但并不是热更新，也就是说，一旦成功发布了</span>WebService<span>，再想更新该</span>WebService<span>，就必须重启</span>Tomcat<span>。这对于开发人员调试</span>WebService<span>非常不方便，因此，在开发</span>WebService<span>时，可以将</span>Axis2<span>设为热更新。在</span>axis2.xml<span>文件中找到</span><span>&lt;parameter name="hotupdate"&gt;false&lt;/parameter&gt;</span><span>，将</span>false<span>改为</span>true<span>即可。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span>3.&nbsp;<span>在浏览器中测试</span>WebService<span>时，如果</span>WebService<span>方法有参数，需要使用</span>URL<span>的请求参数来指定该</span>WebService<span>方法参数的值，请求参数名与方法参数名要一致，例如，要测试</span>getGreeting<span>方法，请求参数名应为</span>name<span>，如上面的</span>URL<span>所示。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span>4.&nbsp;<span>发布</span>WebService<span>的</span>pojo<span>目录只是默认的，如果读者想在其他的目录发布</span>WebService<span>，可以打开</span>axis2.xml<span>文件，并在</span>&lt;axisconfig&gt;<span>元素中添加如下的子元素：</span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">deployer&nbsp;</span><span style="color: #ff0000">extension</span><span style="color: #0000ff">=".class"</span><span style="color: #ff0000">&nbsp;directory</span><span style="color: #0000ff">="my"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.apache.axis2.deployment.POJODeployer"</span><span style="color: #0000ff">/&gt;</span> </div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span>上面的配置允许在</span>&lt;Tomcat<span>安装目录</span>&gt;\webapps\axis2\WEB-INF\my<span>目录中发布</span>WebService<span>。例如，将本例中的</span>SimpleService.class<span>复制到</span>my<span>目录中也可以成功发布（但要删除</span>pojo<span>目录中的</span>SimpleService.class<span>，否则</span>WebService<span>会重名）。</span></p>
<p>&nbsp;</p>
<p><strong><span>三、</span> </strong><strong><span>用</span>Java</strong><strong><span>实现调用</span>WebService</strong><strong><span>的客户端程序</span></strong></p>
<p>&nbsp;&nbsp;&nbsp; WebService<span>是为程序服务的，只在浏览器中访问</span>WebService<span>是没有意义的。因此，在本节使用</span>Java<span>实现了一个控制台程序来调用上一节发布的</span>WebService<span>。调用</span>WebService<span>的客户端代码如下：</span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;client;<br /><br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.xml.namespace.QName;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.addressing.EndpointReference;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.client.Options;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.rpc.client.RPCServiceClient;<br /><br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;RPCClient<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;使用RPC方式调用WebService&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RPCServiceClient&nbsp;serviceClient&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;RPCServiceClient();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Options&nbsp;options&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;serviceClient.getOptions();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;指定调用WebService的URL</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EndpointReference&nbsp;targetEPR&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;EndpointReference(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:8080/axis2/services/SimpleService</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options.setTo(targetEPR);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;指定getGreeting方法的参数值</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object[]&nbsp;opAddEntryArgs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object[]&nbsp;{</span><span style="color: #000000">"</span><span style="color: #000000">超人</span><span style="color: #000000">"</span><span style="color: #000000">};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;指定getGreeting方法返回值的数据类型的Class对象</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class[]&nbsp;classes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Class[]&nbsp;{String.</span><span style="color: #0000ff">class</span><span style="color: #000000">};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;指定要调用的getGreeting方法及WSDL文件的命名空间</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QName&nbsp;opAddEntry&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;QName(</span><span style="color: #000000">"</span><span style="color: #000000">http://ws.apache.org/axis2</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">getGreeting</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;调用getGreeting方法并输出该方法的返回值</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(serviceClient.invokeBlocking(opAddEntry,&nbsp;opAddEntryArgs,&nbsp;classes)[</span><span style="color: #000000">0</span><span style="color: #000000">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;下面是调用getPrice方法的代码，这些代码与调用getGreeting方法的代码类似</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;classes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Class[]&nbsp;{</span><span style="color: #0000ff">int</span><span style="color: #000000">.</span><span style="color: #0000ff">class</span><span style="color: #000000">};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opAddEntry&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;QName(</span><span style="color: #000000">"</span><span style="color: #000000">http://ws.apache.org/axis2</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">getPrice</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(serviceClient.invokeBlocking(opAddEntry,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object[]{},&nbsp;classes)[</span><span style="color: #000000">0</span><span style="color: #000000">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />}<br /></span></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>运行上面的程序后，将在控制台输出如下的信息：</span></p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">你好&nbsp;超人<br />443</span> </div>
<p>&nbsp;&nbsp;&nbsp; <span>在编写客户端代码时应注意如下几点：</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span>1.&nbsp;<span>客户端代码需要引用很多</span>Axis2<span>的</span>jar<span>包，如果读者不太清楚要引用哪个</span>jar<span>包，可以在</span>Eclipse<span>的工程中引用</span>Axis2<span>发行包的</span>lib<span>目录中的所有</span>jar<span>包。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span>2.&nbsp;<span>在本例中使用了</span>RPCServiceClient<span>类的</span>invokeBlocking<span>方法调用了</span>WebService<span>中的方法。</span>invokeBlocking<span>方法有三个参数，其中第一个参数的类型是</span>QName<span>对象，表示要调用的方法名；第二个参数表示要调用的</span>WebService<span>方法的参数值，参数类型为</span>Object[]<span>；第三个参数表示</span>WebService<span>方法的返回值类型的</span>Class<span>对象，参数类型为</span>Class[]<span>。当方法没有参数时，</span>invokeBlocking<span>方法的第二个参数值不能是</span>null<span>，而要使用</span>new Object[]{}<span>。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span>3.&nbsp;<span>如果被调用的</span>WebService<span>方法没有返回值，应使用</span>RPCServiceClient<span>类的</span>invokeRobust<span>方法，该方法只有两个参数，它们的含义与</span>invokeBlocking<span>方法的前两个参数的含义相同。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span>4.&nbsp;<span>在创建</span>QName<span>对象时，</span>QName<span>类的构造方法的第一个参数表示</span>WSDL<span>文件的命名空间名，也就是</span>&lt;wsdl:definitions&gt;<span>元素的</span>targetNamespace<span>属性值，下面是</span>SimpleService<span>类生成的</span>WSDL<span>文件的代码片段：<br /><br /></span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">wsdl:definitions&nbsp;</span><span style="color: #ff0000">xmlns:wsdl</span><span style="color: #0000ff">="http://schemas.xmlsoap.org/wsdl/"</span><span style="color: #ff0000">&nbsp;xmlns:ns1</span><span style="color: #0000ff">="http://org.apache.axis2/xsd"</span><span style="color: #ff0000"> <br />xmlns:ns</span><span style="color: #0000ff">="http://ws.apache.org/axis2"</span><span style="color: #ff0000">&nbsp;xmlns:wsaw</span><span style="color: #0000ff">="http://www.w3.org/2006/05/addressing/wsdl"</span><span style="color: #ff0000"> <br />xmlns:http</span><span style="color: #0000ff">="http://schemas.xmlsoap.org/wsdl/http/"</span><span style="color: #ff0000">&nbsp;xmlns:xs</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema"</span><span style="color: #ff0000"> <br />xmlns:mime</span><span style="color: #0000ff">="http://schemas.xmlsoap.org/wsdl/mime/"</span><span style="color: #ff0000">&nbsp;xmlns:soap</span><span style="color: #0000ff">="http://schemas.xmlsoap.org/wsdl/soap/"</span><span style="color: #ff0000"> <br />xmlns:soap12</span><span style="color: #0000ff">="http://schemas.xmlsoap.org/wsdl/soap12/"</span><strong><span style="color: #ff0000"> <br />targetNamespace</span><span style="color: #0000ff">="http://ws.apache.org/axis2"</span></strong><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">wsdl:types</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" />&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">wsdl:types</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" />&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">wsdl:definitions</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span></div>
<p>&nbsp;</p>
<p><strong><span>四、用</span>wsdl2java</strong><strong><span>简化客户端的编写</span></strong></p>
<p>&nbsp;&nbsp;&nbsp; <span>也许有很多读者会说&#8220;有没有搞错啊，只调用两个</span>WebService<span>方法用要写这么多代码，太麻烦了&#8221;。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span>不过幸好</span>Axis2<span>提供了一个</span>wsdl2java.bat<span>命令可以根据</span>WSDL<span>文件自动产生调用</span>WebService<span>的代码。</span>wsdl2java.bat<span>命令可以在</span>&lt;Axis2<span>安装目录</span>&gt;"bin<span>目录中找到。在使用</span>wsdl2java.bat<span>命令之前需要设置</span>AXIS2_HOME<span>环境变量，该变量值是</span>&lt;Axis2<span>安装目录</span>&gt;<span>。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span>在</span>Windows<span>控制台输出如下的命令行来生成调用</span>WebService<span>的代码：</span></p>
<p><span>%AXIS2_HOME%\bin\wsdl2java -uri http://localhost:8080/axis2/services/SimpleService?wsdl -p client -s -o stub</span></p>
<p>&nbsp;&nbsp;&nbsp; <span>其中</span>-url<span>参数指定了</span>wsdl<span>文件的路径，可以是本地路径，也可以是网络路径。</span>-p<span>参数指定了生成的</span>Java<span>类的包名，</span>-o<span>参数指定了生成的一系列文件保存的根目录。在执行完上面的命令后，读者就会发现在当前目录下多了个</span>stub<span>目录，在</span>."stub"src"client<span>目录可以找到一个</span>SimpleServiceStub.java<span>文件，该文件复杂调用</span>WebService<span>，读者可以在程序中直接使用这个类，代码如下：<br /></span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;client;<br /><br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.xml.namespace.QName;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.addressing.EndpointReference;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.client.Options;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.rpc.client.RPCServiceClient;<br /><br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;StubClient<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleServiceStub&nbsp;stub&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleServiceStub();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleServiceStub.GetGreeting&nbsp;gg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleServiceStub.GetGreeting();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gg.setName(</span><span style="color: #000000">"</span><span style="color: #000000">比尔</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;stub.getGreeting(gg).get_return());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(stub.getPrice().get_return());<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />}<br /></span></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span>上面的代码大大简化了调用</span>WebService<span>的步骤，并使代码更加简洁。但要注意的是，</span>wsdl2java.bat<span>命令生成的</span>Stub<span>类将</span>WebService<span>方法的参数都封装在了相应的类中，类名为方法名，例如，</span>getGreeting<span>方法的参数都封装在了</span>GetGreeting<span>类中，要想调用</span>getGreeting<span>方法，必须先创建</span>GetGreeting<span>类的对象实例。</span></p>
<p><strong><span>五、使用</span>C#</strong><strong><span>调用</span>WebService</strong></p>
<p>&nbsp;&nbsp;&nbsp; <span>从理论上说，</span>WebService<span>可以被任何支持</span>SOAP<span>协议的语言调用。在</span>Visual Studio<span>中使用</span>C#<span>调用</span>WebService<span>是在所有语言中最容易实现的（</span>VB.net<span>的调用方法类似，也同样很简单）。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span>新建一个</span>Visual Studio<span>工程，并在引用</span>Web<span>服务的对话框中输入如下的</span>URL<span>，并输入</span>Web<span>引用名为&#8220;</span>WebService<span>&#8221;：</span></p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://localhost:8080/axis2/services/SimpleService?wsdl">http://localhost:8080/axis2/services/SimpleService?wsdl</a></p>
<p>&nbsp;&nbsp;&nbsp; <span>然后引用</span>Web<span>服务的对话框就会显示该</span>WebService<span>中的所有的方法，如图</span>5<span>所示。<br /></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span>在完成上面的工作后，只需要如下三行</span>C#<span>代码就可以调用</span>getGreeting<span>和</span>getPrice<span>方法，并显示这两个方法的返回值：</span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">WebService.SimpleService&nbsp;simpleService&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WSC.WebService.SimpleService();<br />MessageBox.Show(&nbsp;simpleService.getGreeting(</span><span style="color: #000000">"</span><span style="color: #000000">比尔</span><span style="color: #000000">"</span><span style="color: #000000">));<br />MessageBox.Show(simpleService.getPrice().@return.ToString());</span> </div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span>在</span>.net<span>解析</span>WSDL<span>文件时直接将</span>getGreeting<span>方法的参数映射为</span>String<span>类型，因此，可以直接进行传值。</span><br />&nbsp;&nbsp;&nbsp; <span>从上面的调用过程可以看出，添加</span>Web<span>引用的过程就相当于在</span>Java<span>中调用</span>wsdl2java.bat<span>自动生成</span>stub<span>类的过程。只是在调用</span>stub<span>类时与</span>C#<span>有一定的区别，但从总体上来说，都大大简化了调用</span>WebService<span>的过程。</span></p>
<div><br /><br />图5</div>
<div><br /><img class="magplus" title="点击查看原始大小图片" alt="" src="http://dl.iteye.com/upload/attachment/228197/b684beb5-3e6f-3494-a479-d9ff4d1ca3f1.jpg" width="700" height="434" /><br />&nbsp;<br /></div>
<div><br /><span><br />图2</span> </div>
<div><br /><img class="magplus" title="点击查看原始大小图片" alt="" src="http://dl.iteye.com/upload/attachment/228191/b28de9a2-c8e0-341d-93e0-75c7e852930f.jpg" width="700" height="405" /><br />&nbsp;<br /></div></div><img src ="http://www.blogjava.net/zhb8015/aggbug/377301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhb8015/" target="_blank">zhb8015</a> 2012-05-03 17:07 <a href="http://www.blogjava.net/zhb8015/articles/377301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>axis2插件安装</title><link>http://www.blogjava.net/zhb8015/articles/377280.html</link><dc:creator>zhb8015</dc:creator><author>zhb8015</author><pubDate>Thu, 03 May 2012 07:25:00 GMT</pubDate><guid>http://www.blogjava.net/zhb8015/articles/377280.html</guid><wfw:comment>http://www.blogjava.net/zhb8015/comments/377280.html</wfw:comment><comments>http://www.blogjava.net/zhb8015/articles/377280.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhb8015/comments/commentRss/377280.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhb8015/services/trackbacks/377280.html</trackback:ping><description><![CDATA[两个插件包直接解压，并复制到%eclipse%\plugins\下即可：<br /><br />Axis2_Codegen_Wizard_1.3.0<br />Axis2_Service_Archiver_1.3.0<img src ="http://www.blogjava.net/zhb8015/aggbug/377280.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhb8015/" target="_blank">zhb8015</a> 2012-05-03 15:25 <a href="http://www.blogjava.net/zhb8015/articles/377280.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XFire 学习</title><link>http://www.blogjava.net/zhb8015/articles/373409.html</link><dc:creator>zhb8015</dc:creator><author>zhb8015</author><pubDate>Thu, 05 Apr 2012 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/zhb8015/articles/373409.html</guid><wfw:comment>http://www.blogjava.net/zhb8015/comments/373409.html</wfw:comment><comments>http://www.blogjava.net/zhb8015/articles/373409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhb8015/comments/commentRss/373409.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhb8015/services/trackbacks/373409.html</trackback:ping><description><![CDATA[参照：<br />
<div>http://www.blogjava.net/fastzch/archive/2008/08/28/225439.html<br />http://www.blogjava.net/waterye/archive/2005/12/05/22643.html<br />http://xfire.codehaus.org/JSR+181+Annotations<br />http://blog.csdn.net/hlf48641715/article/details/3220542<br />http://www.ibm.com/developerworks/cn/java/j-ws/#JAVAZA45<br /><br /><a href="http://blog.csdn.net/shazhenhua/article/details/3186726">http://blog.csdn.net/shazhenhua/article/details/3186726</a><br />&lt;interface_name&gt;.aegis.xml--&gt;
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">mappings</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">method&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">test</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">parameter&nbsp;index</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">0</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;componentType</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">java.lang.String</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">return</span><span style="color: #000000">-</span><span style="color: #000000">type&nbsp;componentType</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org.vivianj.xfire.pojo.Course</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">method</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">mappings</span><span style="color: #000000">&gt;</span></div><br />problem:<br />http://yuyuqian521.iteye.com/blog/939047</div><br />PS：<br />1、IHelloService.aegis.xml 应与interface放在同一包下，否则报错：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">1</span>&nbsp;<span style="color: #000000">Cannot&nbsp;create&nbsp;mapping&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;java.util.List,&nbsp;unspecified&nbsp;component&nbsp;type&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;parameter&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;of&nbsp;method&nbsp;test&nbsp;in&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;org.vivianj.xfire.service.IHelloService<br /></span><span style="color: #008080">2</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:</span><span style="color: #000000">370</span><span style="color: #000000">)</span></div>2、services.xml应放在classes 中，目录结构META-INF-xfire-services.xml <img src ="http://www.blogjava.net/zhb8015/aggbug/373409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhb8015/" target="_blank">zhb8015</a> 2012-04-05 22:10 <a href="http://www.blogjava.net/zhb8015/articles/373409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>