﻿<?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-美丽的爪哇岛-随笔分类-WebService</title><link>http://www.blogjava.net/askcuix/category/32346.html</link><description>Keep Walking......</description><language>zh-cn</language><lastBuildDate>Thu, 22 Oct 2009 18:04:12 GMT</lastBuildDate><pubDate>Thu, 22 Oct 2009 18:04:12 GMT</pubDate><ttl>60</ttl><item><title>CXF客户端请求超时设置</title><link>http://www.blogjava.net/askcuix/archive/2009/10/22/299433.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Thu, 22 Oct 2009 14:41:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2009/10/22/299433.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/299433.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2009/10/22/299433.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/299433.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/299433.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在使用WebService时，我们通常都会在客户端中设置请求超时的限制，以避免长时间的去连接不可用的服务器。在CXF的环境中，提供了两个属性对客户端的超时限制进行配置。&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2009/10/22/299433.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/299433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2009-10-22 22:41 <a href="http://www.blogjava.net/askcuix/archive/2009/10/22/299433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据绑定之JAXB</title><link>http://www.blogjava.net/askcuix/archive/2009/02/17/255195.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Tue, 17 Feb 2009 14:22:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2009/02/17/255195.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/255195.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2009/02/17/255195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/255195.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/255195.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JAXB（Java Architecture for XML Binding）提供了一个快速而方便的方式绑定XML Schemas和java，使java程序员能够很方便的在java应用程序中处理XML数据。JAXB提供了将XML文档解组为java内容树的方法，以及将java内容树重新编组回XML文档的方法。JAXB同样也提供了一种从java对象生成XML Schema的方式。以下是对JAXB操作方法的讲解。&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2009/02/17/255195.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/255195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2009-02-17 22:22 <a href="http://www.blogjava.net/askcuix/archive/2009/02/17/255195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>理解SAX</title><link>http://www.blogjava.net/askcuix/archive/2009/02/06/253608.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Fri, 06 Feb 2009 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2009/02/06/253608.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/253608.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2009/02/06/253608.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/253608.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/253608.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: DOM（Document Object Model）是处理XML数据的传统方法，但其将整个XML文件读取并以树状结构加载至内存中的工作方式非常消耗资源，尤其是在操作大文件时，就尤为显得低效、缓慢。作为一种替代技术的SAX（Simple API for XML），其自身的数据处理机制允许你在读取文档时进行处理，从而不必等待整个文档被存储后才采取操作。&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2009/02/06/253608.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/253608.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2009-02-06 17:19 <a href="http://www.blogjava.net/askcuix/archive/2009/02/06/253608.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService之WSDL</title><link>http://www.blogjava.net/askcuix/archive/2008/07/04/212597.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Fri, 04 Jul 2008 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2008/07/04/212597.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/212597.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2008/07/04/212597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/212597.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/212597.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、WSDL概述&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebServices Description Language (WSDL Web服务语言)是一个用于精确描述Web Service的文档格式。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WSDL非常适合于用作代码生成器，它能够读取WSDL文档，...&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2008/07/04/212597.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/212597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2008-07-04 15:02 <a href="http://www.blogjava.net/askcuix/archive/2008/07/04/212597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService之SOAP</title><link>http://www.blogjava.net/askcuix/archive/2008/07/03/212298.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Thu, 03 Jul 2008 04:47:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2008/07/03/212298.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/212298.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2008/07/03/212298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/212298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/212298.html</trackback:ping><description><![CDATA[一、SOAP概述<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SOAP（Simple Object Access Protocol），它是一种标准消息传递协议，通常是Web Service的事实标准。SOAP是以XML为基础，SOAP消息格式是由XML Schema模式定义，通过XML命名空间使SOAP具有很强的扩展性。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOAP message：SOAP XML文档实例，通常通过其他某些网络协议的有效载荷来携带SOAP消息，例如：HTTP, SMTP, TCP/IP等。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebService可以使用两种消息传递方式：One-Way messaging（单向消息传递）或者Request/Response messaging（请求/响应消息传递）</p>
<p>&nbsp;二、SOAP的基本结构<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOAP中根元素是Envelope元素。Envelope元素中可以包含多个可选的Header元素，必须同时包含一个Body元素。Header元素必须是Envelope元素的直接子元素，并且要位于Body元素之前。<br />
<br />
三、SOAP的命名空间<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOAP消息可以在Header元素和Body元素中包含若干不同的XML元素，使用唯一的命名空间来标识它们。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/命名空间定义了标准SOAP元素（例如：Envelope, Header和Body等）。Header元素的每个头文件都有自己的命名空间。<br />
<br />
四、 SOAP头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOAP header在Web Service中的应用越来越多，例如安全性、事务以及其他各种服务方面的大量&#8220;标准&#8221;文件头。SOAP文件头是扩展SOAP协议的一个功能非常强大的措施，SOAP文件头的扩展性是SOAP得以流行并且获得其他协议没有取得成功的另一个原因。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;4.1 actor属性(next、ultimate receiver)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Actor是由SOAP注释定义的，在SOAP 1.2中，actor属性已经被更名为role。Actor属性和XML命名空间组合在一起使用，以确定要用哪个代码模块处理具体的Header。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next角色表示消息路径中的下一个节点必须处理文件头。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ultimate receiver角色表示只有消息的最终接收方才能处理指定的Header。<br />
<br />
&nbsp;&nbsp;&nbsp; 4.2 mustUnderstand属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表示处理是否为强制性处理，如果一个节点不能识别某一个强制性Header，那么必定会产生SOAP错误。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果MustUnderstand属性的值是0，如果应用程序没有能够识别该文件头，那么必须删除此文件头。<br />
<br />
五、SOAP体<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Body元素要包含应用程序专有的数据或者错误消息。应用程序的专有数据可以是任意XML数据或者是提供给过程调用的任意参数。只有SOAP消息最后的接收方应该处理SOAP Body。<br />
<br />
六、SOAP消息传递模式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOAP支持四种消息传递模式（RPC/Literal, Document/ Literal, RPC/Encoded, and Document/Encoded），但是WS-I Basic Profile只允许RPC/Literal和Document/ Literal，不支持SOAP encoding，因为它会引起严重的互操作性。Literal表示可以根据XML模式验证XML文档的有效性。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.1 Document/ Literal消息传递模式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document/ Literal消息传递模式中，SOAP的Body元素包含一个XML格式良好的文档段；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.2 RPC/Literal消息传递模式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RPC/Literal消息传递模式将Body元素格式化成struct。PRC请求消息包含调用的方法名称与输入参数。RPC响应消息则包含返回值和各种输出参数（或者错误）；</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">SOAP请求消息：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><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 />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">soap:Envelope<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #ff0000">xmlns:soap</span><span style="color: #0000ff">="http://schemas.xmlsoap.org/soap/envelope/"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;xmlns:mh</span><span style="color: #0000ff">="http://www.Monson-Haefel.com/jwsbook/BookQuote"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">soap:Body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mh:getBookPrice</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">isbn</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">0321146182</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">isbn</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">mh:getBookPrice</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">soap:Body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">soap:Envelope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />SOAP返回消息<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><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 />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">soap:Envelope<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #ff0000">xmlns:soap</span><span style="color: #0000ff">="http://schemas.xmlsoap.org/soap/envelope/"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;xmlns:mh</span><span style="color: #0000ff">="http://www.Monson-Haefel.com/jwsbook/BookQuote"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">soap:Body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mh:getBookPriceResponse</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">24.99</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">mh:getBookPriceResponse</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">soap:Body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">soap:Envelope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.3 消息传递模式和消息交换模式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Messaging Modes：（RPC/Literal, Document/ Literal, RPC/Encoded, and Document/Encoded）。消息传递模式通常描述的是SOAP消息的有效负载：即XML文档段或者是远程过程调用对应的参数和返回值的XML表示。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Messaging Exchange Patterns (MEPs)：One-Way and Request/Response MEPs。消息交换模式表示的是消息的流向，而不是消息的内容<br />
<br />
七、SOAP错误<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOAP错误是由消息接收方（消息的中介体或者最终接收方）产生的。只有使用的请求/响应消息传递模式的时候，才要去接收方将SOAP错误传递给发送方。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.1 faultcode元素<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; faultcode表示错误错误代码，包括Client、Server、VersionMismatch和MustUnderstand不同类型。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Client表示传递SOAP消息的节点出现了错误（发送错误），例如：消息不是一个良好的格式，或者包含无效数据、缺少所期望的信息，接收节点就会产生一个Client错误。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server表示接收到SOAP消息的节点发生故障或者不能处理SOAP消息（中介体或者最终接收方引起的错误）。例如：当接收节点处理SOAP消息不能连接到数据库等资源，就会产生一个Server错误。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VersionMismatch表示接收节点不能识别SOAP消息的Envelope元素的命名空间，例如：SOAP 1.1的节点接收到SOAP1.2消息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MustUnderstand表示节点不能识别&#8220;MustUnderstand=1&#8221;指定的header，就会产生这个类型的fault。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 还有一些非标准的错误信息例如：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff">&lt;</span><span style="color: #800000">soap:Body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">soap:Fault</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font>&lt;</span><span style="color: #800000">faultcode</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">wsse:InvalidSecurityToken</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">faultcode</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">faultstring</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">An&nbsp;invalid&nbsp;security&nbsp;token&nbsp;was&nbsp;provided</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">faultstring</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">detail</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">soap:Fault</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">soap:Body</span><span style="color: #0000ff">&gt;</span></div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.2 faultstring元素<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; faultstring表示错误的描述，是强制性元素，可以使用特殊属性xml:lang表示文本消息使用的语言。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7.3 faultactor元素<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; faultactor表示遇到错误并且产生错误的节点，如果错误节点是一个中介节点，那么需要使用faultactor元素，但是如果错误节点是最终接收方，则该元素可选。<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7.4 detail元素</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果Body元素的内容产生错误，必须包含错误消息的detail元素，但是如果文件头发生错误，则不能包含该元素<br />
<br />
八、SOAP和HTTP<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;目前最常用SOAP的传输体是HTTP。大多数HTTP的传输由HTTP GET请求和HTTP应答组成的，HTTP GET请求指定了请求的页面，可以包含一些参数，HTTP response作为有效负载返回到到请求方。另外，HTTP POST请求有效负载，所以适合携带SOAP消息。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8.1 HTTP POST消息传输的SOAP<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTTP POST消息必须包含SOAPAction文件字头；SOAP1.2用(&#8220;application/soap+xml&#8221;) MIME类型替换SOAPAction文件头。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Content-Type是text/xml，表示有效负载是一个XML文档。带附件的SOAP会指定mulitpart/related，但是不推荐这样做。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8.2 HTTP响应代码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 200-level的HTTP成功代码包括：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 200 OK表示消息没有错误；包含一个正常的SOAP响应消息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;200 Accepted：表示成功处理了请求，但是没有SOAP响应数据，类似与void返回类型。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 400-level错误<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 400 Bad Request：表示SOAP消息中的HTTP请求或者XML格式不正确<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 405 Method Not Allowed：如果不是通过HTTP POST方式传递的SOAP消息，返回此错误。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 415 Unsupported Media Type：text/xml值包含一个Content-Type文件头，否则将返回此错误。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 500 Internal Server Error：当请求/响应MEP中的响应消息是SOAP错误时，必须使用此代码。</p>
<img src ="http://www.blogjava.net/askcuix/aggbug/212298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2008-07-03 12:47 <a href="http://www.blogjava.net/askcuix/archive/2008/07/03/212298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService复习</title><link>http://www.blogjava.net/askcuix/archive/2008/06/19/209161.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Thu, 19 Jun 2008 07:03:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2008/06/19/209161.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/209161.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2008/06/19/209161.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/209161.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/209161.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 最近准备复习WebService方面的知识，系统的、深入的学习一下，将所复习到的知识通过学习笔记的方式记录下来，供今后查阅。首先从基本概念开始回顾。<br />
<ul>
    <li>WebService使用开放的协议进行通讯；
    <li>WebService是自描述和自包含的；
    <li>XML是WebService的基础； </li>
</ul>
&nbsp;&nbsp;&nbsp; WebService是基于XML+HTTP来实现的；HTTP协议是常用的Internet协议，XML语言的独立性为不同平台和不同编程语言之间的数据交换提供了便利，WebService包含了三个重要的元素：SOAP、UDDI、WSDL。<br />
<ul>
    <li>SOAP（Simple Object Access protocol）<br />
    SOAP表示简单对象访问协议，是一种通过Internet进行通讯的协议，SOAP消息是一种XML文档，有其自己的XML Schema、命名空间和处理规则。 </li>
</ul>
<ul>
    <li>WSDL（Web Service Description Language）<br />
    WSDL表示webservice描述语言，是一个用于描述Web服务的文档格式，用来指定客户与具体的web服务通讯时必须使用的确切的消息格式、Internet协议以及地址。 </li>
</ul>
<ul>
    <li>UDDI（Universal Description, Discovery, and Integration）<br />
    UDDI定义了一套标准的Web服务操作方法，用于存储、查找有关其它Web服务应用程序方面的消息。 </li>
</ul>
<br />
<br />
<img src ="http://www.blogjava.net/askcuix/aggbug/209161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2008-06-19 15:03 <a href="http://www.blogjava.net/askcuix/archive/2008/06/19/209161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hessian实例</title><link>http://www.blogjava.net/askcuix/archive/2008/04/24/208293.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Thu, 24 Apr 2008 05:37:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2008/04/24/208293.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/208293.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2008/04/24/208293.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/208293.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/208293.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;试着写了一个Hessian的例子，是参考caucho官网上的一个example，很简单，也没什么实际的意义，但足以领会Hessian的用法。</p>
<p>1、建立一个Remote Interface</p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;com.hessian.test;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img id="Codehighlighter1_56_95_Open_Image" onclick="this.style.display='none'; Codehighlighter1_56_95_Open_Text.style.display='none'; Codehighlighter1_56_95_Closed_Image.style.display='inline'; Codehighlighter1_56_95_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" align="top" /><img id="Codehighlighter1_56_95_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_56_95_Closed_Text.style.display='none'; Codehighlighter1_56_95_Open_Image.style.display='inline'; Codehighlighter1_56_95_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">interface</span><span style="color: rgb(0, 0, 0);">&nbsp;MathService&nbsp;</span><span id="Codehighlighter1_56_95_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_56_95_Open_Text"><span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;add(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;a,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;b);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" align="top" />}</span></span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span></div>
<p><br />
&nbsp;&nbsp; 2、Service Implementation<br />
&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;com.hessian.test;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;com.caucho.hessian.server.HessianServlet;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img id="Codehighlighter1_155_217_Open_Image" onclick="this.style.display='none'; Codehighlighter1_155_217_Open_Text.style.display='none'; Codehighlighter1_155_217_Closed_Image.style.display='inline'; Codehighlighter1_155_217_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" align="top" /><img id="Codehighlighter1_155_217_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_155_217_Closed_Text.style.display='none'; Codehighlighter1_155_217_Open_Image.style.display='inline'; Codehighlighter1_155_217_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;HessianMathService&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;HessianServlet&nbsp;</span><span style="color: rgb(0, 0, 255);">implements</span><span style="color: rgb(0, 0, 0);">&nbsp;MathService&nbsp;</span><span id="Codehighlighter1_155_217_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_155_217_Open_Text"><span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" /><br />
<img id="Codehighlighter1_189_214_Open_Image" onclick="this.style.display='none'; Codehighlighter1_189_214_Open_Text.style.display='none'; Codehighlighter1_189_214_Closed_Image.style.display='inline'; Codehighlighter1_189_214_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" alt="" align="top" /><img id="Codehighlighter1_189_214_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_189_214_Closed_Text.style.display='none'; Codehighlighter1_189_214_Open_Image.style.display='inline'; Codehighlighter1_189_214_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;add(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;a,&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;b)</span><span id="Codehighlighter1_189_214_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_189_214_Open_Text"><span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;a&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;b;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" align="top" />}</span></span></div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp; 官网上的例子是没有实现MathService接口的，而且也能运行成功，但我觉得有点不合逻辑，不应该将该实现类作为MathService接口暴露给client端。</p>
<p>3、web.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">servlet</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">servlet-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">math</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">servlet-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">servlet-class</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.hessian.test.HessianMathService<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">servlet-class</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">servlet</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">servlet-mapping</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">servlet-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">math</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">servlet-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">url-pattern</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">/hessian/math</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">url-pattern</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">servlet-mapping</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
<p><br />
4、Java client<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img id="Codehighlighter1_31_495_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_495_Open_Text.style.display='none'; Codehighlighter1_31_495_Closed_Image.style.display='inline'; Codehighlighter1_31_495_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" align="top" /><img id="Codehighlighter1_31_495_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_31_495_Closed_Text.style.display='none'; Codehighlighter1_31_495_Open_Image.style.display='inline'; Codehighlighter1_31_495_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" alt="" align="top" /><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;HessianClientTest&nbsp;</span><span id="Codehighlighter1_31_495_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_31_495_Open_Text"><span style="color: rgb(0, 0, 0);">{<br />
<img id="Codehighlighter1_74_493_Open_Image" onclick="this.style.display='none'; Codehighlighter1_74_493_Open_Text.style.display='none'; Codehighlighter1_74_493_Closed_Image.style.display='inline'; Codehighlighter1_74_493_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" alt="" align="top" /><img id="Codehighlighter1_74_493_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_74_493_Closed_Text.style.display='none'; Codehighlighter1_74_493_Open_Image.style.display='inline'; Codehighlighter1_74_493_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;main(String[]&nbsp;args)</span><span id="Codehighlighter1_74_493_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_74_493_Open_Text"><span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">http://localhost:8080/hessiantest/hessian/math</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HessianProxyFactory&nbsp;factory&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;HessianProxyFactory();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MathService&nbsp;math&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />
<img id="Codehighlighter1_253_333_Open_Image" onclick="this.style.display='none'; Codehighlighter1_253_333_Open_Text.style.display='none'; Codehighlighter1_253_333_Closed_Image.style.display='inline'; Codehighlighter1_253_333_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" alt="" align="top" /><img id="Codehighlighter1_253_333_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_253_333_Closed_Text.style.display='none'; Codehighlighter1_253_333_Open_Image.style.display='inline'; Codehighlighter1_253_333_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span id="Codehighlighter1_253_333_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_253_333_Open_Text"><span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;math&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;(MathService)factory.create(MathService.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">,&nbsp;url);<br />
<img id="Codehighlighter1_367_432_Open_Image" onclick="this.style.display='none'; Codehighlighter1_367_432_Open_Text.style.display='none'; Codehighlighter1_367_432_Closed_Image.style.display='inline'; Codehighlighter1_367_432_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" alt="" align="top" /><img id="Codehighlighter1_367_432_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_367_432_Closed_Text.style.display='none'; Codehighlighter1_367_432_Open_Image.style.display='inline'; Codehighlighter1_367_432_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);">&nbsp;(MalformedURLException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_367_432_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_367_432_Open_Text"><span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">occur&nbsp;exception:&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;e);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">3&nbsp;+&nbsp;2&nbsp;=&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;math.add(</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" align="top" />}</span></span></div>
<p><br />
&nbsp;&nbsp; 使用java实现的client，通过HessianProxyFactory的create即可获取到服务接口。</p>
<p>5、python client</p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: rgb(0, 0, 255);">from</span><span style="color: rgb(0, 0, 0);">&nbsp;hessianlib&nbsp;</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;Hessian<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />url&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">http://localhost:8080/hessiantest/hessian/math</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />proxy&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;Hessian(url)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">2&nbsp;+&nbsp;3&nbsp;=</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;proxy.add(</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span></div>
<p><br />
&nbsp;&nbsp; 使用python实现的client，需加入hessianlib.py。</p>
<p>&nbsp;&nbsp; 以上就是一个完整的Hessian实现。</p>
<p>&nbsp;&nbsp; Spring也提供了对Hessian的集成，若使用spring，server端的service实现类则不需实现HessianServlet，使用Spring的DispatcherServlet来配置一个Servlet暴露你的服务。<br />
&nbsp;&nbsp; web.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">servlet</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">servlet-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">remote</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">servlet-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">servlet-class</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />org.springframework.web.servlet.DispatcherServlet<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">servlet-class</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">load-on-startup</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">load-on-startup</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">servlet</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">servlet-mapping</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">servlet-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">remote</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">servlet-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">url-pattern</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">/remote/*</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">url-pattern</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">servlet-mapping</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
<p><br />
&nbsp;&nbsp; 还需要在 WEB-INF 目录里创建一个名为 remote-servlet.xml（remote为你配置的servlet名）的应用上下文。<br />
&nbsp;&nbsp; remote-servlet.xml</p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">bean&nbsp;</span><span style="color: rgb(255, 0, 0);">id</span><span style="color: rgb(0, 0, 255);">="mathService"</span><span style="color: rgb(255, 0, 0);">&nbsp;class</span><span style="color: rgb(0, 0, 255);">="&nbsp;com.hessian.test.HessianMathService"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">bean</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">bean&nbsp;</span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="/math"</span><span style="color: rgb(255, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: rgb(0, 0, 255);">="org.springframework.remoting.caucho.HessianServiceExporter"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property&nbsp;</span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="service"</span><span style="color: rgb(255, 0, 0);">&nbsp;ref</span><span style="color: rgb(0, 0, 255);">="&nbsp;mathService&nbsp;"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property&nbsp;</span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="serviceInterface"</span><span style="color: rgb(255, 0, 0);">&nbsp;value</span><span style="color: rgb(0, 0, 255);">="&nbsp;com.hessian.test.MathService&nbsp;"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">bean</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
<p><br />
server端做以上操作即可。</p>
<p>client端可以延用之前的操作，若使用spring则可通过 HessianProxyFactoryBean在客户端连接服务，在spring的配置中加入：</p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">bean&nbsp;</span><span style="color: rgb(255, 0, 0);">class</span><span style="color: rgb(0, 0, 255);">="com.hessian.test.HessianClientTest"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property&nbsp;</span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="mathService"</span><span style="color: rgb(255, 0, 0);">&nbsp;ref</span><span style="color: rgb(0, 0, 255);">="mathService"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">bean</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">bean&nbsp;</span><span style="color: rgb(255, 0, 0);">id</span><span style="color: rgb(0, 0, 255);">="&nbsp;mathService&nbsp;"</span><span style="color: rgb(255, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: rgb(0, 0, 255);">="org.springframework.remoting.caucho.HessianProxyFactoryBean"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property&nbsp;</span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="serviceUrl"</span><span style="color: rgb(255, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value</span><span style="color: rgb(0, 0, 255);">="http://remotehost:8080/hessiantest/remote/math"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property&nbsp;</span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="serviceInterface"</span><span style="color: rgb(255, 0, 0);">&nbsp;value</span><span style="color: rgb(0, 0, 255);">="com.hessian.test.MathService"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">bean</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
<p><br />
加入以上的配置后，就可像使用其他的bean一样去操作了。原来实现一个webservice是可以这么简单的。</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/askcuix/aggbug/208293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2008-04-24 13:37 <a href="http://www.blogjava.net/askcuix/archive/2008/04/24/208293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对于Hessian的一点感受</title><link>http://www.blogjava.net/askcuix/archive/2008/04/22/208290.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Tue, 22 Apr 2008 09:23:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2008/04/22/208290.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/208290.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2008/04/22/208290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/208290.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/208290.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一直都没有机会在项目中去真正的体会webservice，之前有个项目需提供简单webservice的接口，是通过spring对JAX-RPC的实现去暴露服务，然后使用eclipse自动生成WSDL文件以及部署，就此了事，也没有去深究。最近项目不太忙了，就想了解一下webservice，看看其中的究竟。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前几天看了下AXIS，发现这个基于SOAP协议的webservice实现实在是不让人称道。我按照User Guide把example试验了一下，也自己写了个简单的例子跑了一下，都成功了，但让我感觉这样一个webservice太麻烦了，繁琐的部署，服务端与客户端耗时的解析操作，一种极其笨重的感觉，据说XFire的实现相对简单，但还没来得及看，改天比较一下。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一同事极其推崇Hessian，今天简单看了下，这是一个基于binary的实现，看了一个例子，极其的简单，没有了繁琐的部署，简单的服务调用，只看了java的，还不清楚用其他的语言如何实现客户端，看了一篇对于各种webservice实现的性能比较，hessian远远领先于其他的实现，AXIS貌似性能最差。在如此的性能差距下，还有那么多的应用采用AXIS实现，为何？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我认为hessian更适合作为一个独立的异构系统的实现，比如我们公司的产品基本是前台采用JAVA，后台采用C++，在这种情况下，前后台之间如何通讯应该是可以由我们决定的，多半都不会受到客户的牵制，在这种情况下，hessian明显优于AXIS。但是对于部分产品需要对其他开发商提供接口，我觉得hessian就不适用了，不同开发商之间更需要WSDL这种服务描述文件去对实现进行规定，不知道hessian有没有这种服务描述的东西，暂时还没看到，服务端的代码通常是不会提供给其它开发商的，这种时候如何去做实现呢，如果说是通过开发文档进行告知，我觉得是不够合理的，这不是一种标准，每个人的表达方式及理解都有差异，难免会有错误发生。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简单看了下hessian，有这么一点想法，总的来说，hessian的实现更容易让java程序员去理解，没有太多的学习成本，AXIS就相对复杂了点，打算继续深入的学习一下hessian。
<img src ="http://www.blogjava.net/askcuix/aggbug/208290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2008-04-22 17:23 <a href="http://www.blogjava.net/askcuix/archive/2008/04/22/208290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>