﻿<?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-CONAN ZONE-文章分类-Web Service</title><link>http://www.blogjava.net/conans/category/32883.html</link><description>你越挣扎我就越兴奋</description><language>zh-cn</language><lastBuildDate>Sun, 08 Mar 2009 12:05:57 GMT</lastBuildDate><pubDate>Sun, 08 Mar 2009 12:05:57 GMT</pubDate><ttl>60</ttl><item><title>Using JAXB 2.1 with JavaSE 6</title><link>http://www.blogjava.net/conans/articles/258412.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Sat, 07 Mar 2009 13:50:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/258412.html</guid><description><![CDATA[<p style="line-height: 135%"><span><span lang="EN-US" style="font-size: 11.5pt; color: rgb(51,51,51); line-height: 135%">JavaSE <span class="hilite2">6</span> comes with <span class="hilite3">JAXB</span> 2.0 API in </span><tt><span lang="EN-US" style="color: rgb(51,51,51)"><span style="font-size: small">rt.jar</span> </span></tt><span lang="EN-US" style="font-size: 11.5pt; color: rgb(51,51,51); line-height: 135%">. Therefore, using <span class="hilite3">JAXB</span> 2.1 with JavaSE <span class="hilite2">6</span> requires one to override a portion of </span><tt><span lang="EN-US" style="color: rgb(51,51,51)"><span style="font-size: small">rt.jar</span> </span></tt><span lang="EN-US" style="font-size: 11.5pt; color: rgb(51,51,51); line-height: 135%">with the new API. There are several ways to do this: </span></span></p>
<ol type="1">
    <li style="margin: 0cm 0cm 0pt; color: rgb(51,51,51); line-height: 135%; text-align: left"><span lang="EN-US" style="font-size: 11.5pt; line-height: 135%; font-family: Arial">Place the 2.1 </span><tt><span lang="EN-US" style="font-size: 12pt; line-height: 135%"><span><span class="hilite3">jaxb</span>-api.jar</span> </span></tt><span lang="EN-US" style="font-size: 11.5pt; line-height: 135%; font-family: Arial">into </span><tt><span lang="EN-US" style="font-size: 12pt; line-height: 135%"><span>$JRE_HOME/lib/endorsed</span> </span></tt><span lang="EN-US" style="font-size: 11.5pt; line-height: 135%; font-family: Arial">. This essentially makes your JRE to "JRE <span class="hilite2">6</span> + <span class="hilite3">JAXB</span> 2.1". This won't affect any other applications that use this JRE, and it's easy. On the other hand, in various scenarios you may not be able to alter the JRE. </span></li>
    <li style="margin: 0cm 0cm 0pt; color: rgb(51,51,51); line-height: 135%; text-align: left"><span lang="EN-US" style="font-size: 11.5pt; line-height: 135%; font-family: Arial">Use the system property </span><tt><span lang="EN-US" style="font-size: 12pt; line-height: 135%"><span>java.endorsed.dirs</span> </span></tt><span lang="EN-US" style="font-size: 11.5pt; line-height: 135%; font-family: Arial">when you launch your application, and have it point to the directory that contains the 2.1 </span><tt><span lang="EN-US" style="font-size: 12pt; line-height: 135%"><span><span class="hilite3">jaxb</span>-api.jar</span> </span></tt><span lang="EN-US" style="font-size: 11.5pt; line-height: 135%; font-family: Arial">. This allows you use use <span class="hilite3">JAXB</span> 2.1 without modifying the JRE. Make sure not to include any other <span class="hilite3">JAXB</span> RI jar files (such as </span><tt><span lang="EN-US" style="font-size: 12pt; line-height: 135%"><span>jsr173-api.jar</span> </span></tt><span lang="EN-US" style="font-size: 11.5pt; line-height: 135%; font-family: Arial">or </span><tt><span lang="EN-US" style="font-size: 12pt; line-height: 135%"><span><span class="hilite3">jaxb</span>-impl.jar</span> </span></tt><span lang="EN-US" style="font-size: 11.5pt; line-height: 135%; font-family: Arial">.) </span></li>
    <li style="margin: 0cm 0cm 0pt; color: rgb(51,51,51); line-height: 135%; text-align: left"><span lang="EN-US" style="font-size: 11.5pt; line-height: 135%; font-family: Arial">Implement a custom </span><tt><span lang="EN-US" style="font-size: 12pt; line-height: 135%"><span>ClassLoader</span> </span></tt><span lang="EN-US" style="font-size: 11.5pt; line-height: 135%; font-family: Arial">and block delegation to </span><tt><span lang="EN-US" style="font-size: 12pt; line-height: 135%"><span>javax.xml.bind</span> </span></tt><span lang="EN-US" style="font-size: 11.5pt; line-height: 135%; font-family: Arial">package, so that code running inside this class loader will load the <span class="hilite3">JAXB</span> API from elsewhere. This is a very advanced approach. </span></li>
</ol>
<p style="line-height: 135%"><span><span lang="EN-US" style="font-size: 11.5pt; color: rgb(51,51,51); line-height: 135%">No matter which approach you take, make sure not to include jar files other than </span><tt><span lang="EN-US" style="color: rgb(51,51,51)"><span style="font-size: small"><span class="hilite3">jaxb</span>-api.jar</span> </span></tt><span lang="EN-US" style="font-size: 11.5pt; color: rgb(51,51,51); line-height: 135%">. Doing so, for example including </span><tt><span lang="EN-US" style="color: rgb(51,51,51)"><span style="font-size: small"><span class="hilite3">jaxb</span>-xjc.jar</span> </span></tt><span lang="EN-US" style="font-size: 11.5pt; color: rgb(51,51,51); line-height: 135%">, may result in classloading related errors such as "taskdef A class needed by class com.sun.tools.xjc.XJCTask cannot be found: org/apache/tools/ant/...." </span></span></p>
<p style="line-height: 135%"><span lang="EN-US" style="font-size: 11.5pt; color: rgb(51,51,51); line-height: 135%"><span>See </span><a href="http://java.sun.com/j2se/1.4.2/docs/guide/standards/"><span style="text-decoration: underline"><span style="color: rgb(0,102,153)"><span>the endorsed directory mechanism</span> </span></span></a><span>for more details. </span></span></p>
<br />
jdk6update12也可解决
<img src ="http://www.blogjava.net/conans/aggbug/258412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-03-07 21:50 <a href="http://www.blogjava.net/conans/articles/258412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService大讲堂之Axis2(10)：使用soapmonitor模块监视soap请求与响应消息 </title><link>http://www.blogjava.net/conans/articles/255091.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Tue, 17 Feb 2009 06:56:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/255091.html</guid><description><![CDATA[<span style="font-family: 宋体">在</span>Axis2<span style="font-family: 宋体">中提供了一个</span>Axis2<span style="font-family: 宋体">模块（</span>soapmonitor<span style="font-family: 宋体">），该模块实现了与</span><a class="titlelink" id="Editor_Results_rprSelectionList_ctl03_LinkTitle" href="http://www.blogjava.net/nokiaguy/archive/2009/02/archive/2009/02/16/254826.html">《WebService大讲堂之Axis2(9)：编写Axis2模块（Module）》</a><span style="font-family: 宋体">中实现的</span>logging<span style="font-family: 宋体">模块相同的功能，所不同的是，</span>logging<span style="font-family: 宋体">模块直接将</span>SOAP<span style="font-family: 宋体">请求与响应消息输出到</span>Tomcat<span style="font-family: 宋体">控制台中，而</span>soapmonitor<span style="font-family: 宋体">模块利用</span>applet<span style="font-family: 宋体">直接在页面中输出</span>SOAP<span style="font-family: 宋体">请求和响应消息。</span>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">下面是配置和使用</span>soapmonitor<span style="font-family: 宋体">模块的步骤：&nbsp;&nbsp;&nbsp; <br />
</span></p>
<p><strong><span style="font-family: 宋体">第</span>1<span style="font-family: 宋体">步：部署</span>Applet<span style="font-family: 宋体">和</span>Servlet</strong></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">由于</span>axis2<span style="font-family: 宋体">默认情况下已经自带了</span>soapmonitor<span style="font-family: 宋体">模块，因此，</span>soapmonitor<span style="font-family: 宋体">模块并不需要单独安装。但</span>applet<span style="font-family: 宋体">所涉及到的相应的</span>.class<span style="font-family: 宋体">文件需要安装一下。在</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2\WEB-INF\lib<span style="font-family: 宋体">目录中找到</span>soapmonitor-1.4.1.jar<span style="font-family: 宋体">文件，将该文件解压。虽然</span>applet<span style="font-family: 宋体">并不需要</span>soapmonitor-1.4.1.jar<span style="font-family: 宋体">文件中所有的</span>.class<span style="font-family: 宋体">文件，但为了方便，读者也可以直接将解压目录中的</span>org<span style="font-family: 宋体">目录复制到</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2<span style="font-family: 宋体">目录中，</span>Applet<span style="font-family: 宋体">所需的</span>.class<span style="font-family: 宋体">文件需要放在这个目录。然后再将</span>org<span style="font-family: 宋体">目录复制到</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2\WEB-INF\classes<span style="font-family: 宋体">目录中，</span>soapmonitor<span style="font-family: 宋体">模块中的</span>Servlet<span style="font-family: 宋体">所对应的</span>.class<span style="font-family: 宋体">文件需要放在这个目录。<br />
</span></p>
<p><strong><span style="font-family: 宋体">第</span>2<span style="font-family: 宋体">步：配置</span>Servlet</strong></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">打开</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2\WEB-INF\web.xml<span style="font-family: 宋体">文件，在其中加入如下的内容：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><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">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">SOAPMonitorService</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><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">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.axis2.soapmonitor.servlet.SOAPMonitorService<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-class</span><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">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">SOAPMonitorPort</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">5001</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><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">init-param</span><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">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-mapping</span><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">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">SOAPMonitorService</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><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">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/SOAPMonitor</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<p>&nbsp;</p>
<p><strong><span style="font-family: 宋体">第</span>3<span style="font-family: 宋体">步：在</span>services.xml<span style="font-family: 宋体">文件中引用</span>soapmonitor<span style="font-family: 宋体">模块</span></strong></p>
&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">与引用logging模块一样，引用soapmonitor模块也需要使用&lt;module&gt;元素，引用soapmonitor模块的services.xml文件的内容如下：<br />
</span>
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="myService"</span><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">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用logging和soapmonitor模块<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;引用logging模块&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">module&nbsp;</span><span style="color: #ff0000">ref</span><span style="color: #0000ff">="logging"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;引用soapmonitor模块&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">module&nbsp;</span><span style="color: #ff0000">ref</span><span style="color: #0000ff">="soapmonitor"</span><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">parameter&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ServiceClass"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.MyService&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">parameter</span><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">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">mep</span><span style="color: #0000ff">="http://www.w3.org/2004/08/wsdl/in-out"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><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">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">service</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">由于</span>soapmonitor<span style="font-family: 宋体">模块已经在</span>axis2.xml<span style="font-family: 宋体">进行配置了，因此，在本例中不需要再对</span>axis2.xml<span style="font-family: 宋体">文件进行配置了。&nbsp;&nbsp;&nbsp; <br />
</span></p>
<p><strong><span style="font-family: 宋体">第</span>4<span style="font-family: 宋体">步：使用</span>soapmonitor<span style="font-family: 宋体">模块</span></strong></p>
<span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 启动Tomcat后，在浏览器中输入如下的URL：<br />
<br />
<a href="http://localhost:8080/axis2/SOAPMonitor">http://localhost:8080/axis2/SOAPMonitor<br />
<br />
</a></span><a href="http://localhost:8080/axis2/SOAPMonitor"></a>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在浏览器中将出现</span>soapmonitor<span style="font-family: 宋体">所带的</span>Applet<span style="font-family: 宋体">的界面，当访问</span>MyService<span style="font-family: 宋体">的</span>getGreeting<span style="font-family: 宋体">方法时，在</span>Tomcat<span style="font-family: 宋体">控制台与</span>Applet<span style="font-family: 宋体">中都显示了相应的</span>SOAP<span style="font-family: 宋体">请求和响应消息。如图</span>1<span style="font-family: 宋体">和图</span>2<span style="font-family: 宋体">分别是调用了两次</span>getGreeting<span style="font-family: 宋体">方法后输出的</span>SOAP<span style="font-family: 宋体">请求和响应消息。<br />
<div align="center"><img alt="" src="http://www.blogjava.net/images/blogjava_net/nokiaguy/axis2_10/01.jpg" /><br />
<br />
图1<br />
</div>
<br />
<div align="center"><img alt="" src="http://www.blogjava.net/images/blogjava_net/nokiaguy/axis2_10/022.jpg" /><br />
<br />
图2<br />
</div>
</span>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">如果读者想让</span>logging<span style="font-family: 宋体">和</span>soapmonitor<span style="font-family: 宋体">模块监视部署在</span>Axis2<span style="font-family: 宋体">中的所有</span>WebService<span style="font-family: 宋体">，可以在</span>axis2.xml<span style="font-family: 宋体">文件中使用</span>&lt;module&gt;<span style="font-family: 宋体">元素来引用这两个模块，代码如下：</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;引用logging模块&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">module&nbsp;</span><span style="color: #ff0000">ref</span><span style="color: #0000ff">="logging"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;引用soapmonitor模块&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">module&nbsp;</span><span style="color: #ff0000">ref</span><span style="color: #0000ff">="soapmonitor"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/conans/aggbug/255091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-02-17 14:56 <a href="http://www.blogjava.net/conans/articles/255091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService大讲堂之Axis2(9)：编写Axis2模块（Module） </title><link>http://www.blogjava.net/conans/articles/254909.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Mon, 16 Feb 2009 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/254909.html</guid><description><![CDATA[Axis2<span style="font-family: 宋体">可以通过模块（</span>Module<span style="font-family: 宋体">）进行扩展。</span>Axis2<span style="font-family: 宋体">模块至少需要有两个类，这两个类分别实现了</span>Module<span style="font-family: 宋体">和</span>Handler<span style="font-family: 宋体">接口。开发和使用一个</span>Axis2<span style="font-family: 宋体">模块的步骤如下：</span>
<p>1.&nbsp;<span style="font-family: 宋体">编写实现</span>Module<span style="font-family: 宋体">接口的类。</span>Axis2<span style="font-family: 宋体">模块在进行初始化、销毁等动作时会调用该类中相应的方法）。</span></p>
<p>2.&nbsp;<span style="font-family: 宋体">编写实现</span>Handler<span style="font-family: 宋体">接口的类。该类是</span>Axis2<span style="font-family: 宋体">模块的业务处理类。</span></p>
<p>3.&nbsp;<span style="font-family: 宋体">编写</span>module.xml<span style="font-family: 宋体">文件。该文件放在</span>META-INF<span style="font-family: 宋体">目录中，用于配置</span>Axis2<span style="font-family: 宋体">模块。</span></p>
<p>4.&nbsp;<span style="font-family: 宋体">在</span>axis2.xml<span style="font-family: 宋体">文件中配置</span>Axis2<span style="font-family: 宋体">模块。</span></p>
<p>5.&nbsp;<span style="font-family: 宋体">在</span>services.xml<span style="font-family: 宋体">文件中配置</span>Axis2<span style="font-family: 宋体">模块。每一个</span>Axis2<span style="font-family: 宋体">模块都需要使用</span>&lt;module&gt;<span style="font-family: 宋体">元素引用才能使用。</span></p>
<p>6.&nbsp;<span style="font-family: 宋体">发布</span>Axis2<span style="font-family: 宋体">模块。需要使用</span>jar<span style="font-family: 宋体">命令将</span>Axis2<span style="font-family: 宋体">模块压缩成</span>.mar<span style="font-family: 宋体">包（文件扩展名必须是</span>.mar<span style="font-family: 宋体">），然后将</span>.mar<span style="font-family: 宋体">文件放在</span></p>
<p>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2\WEB-INF\modules<span style="font-family: 宋体">目录中。&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 先来编写一个WebService类，代码如下：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;service;<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;MyService<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;}<br />
}<br />
</span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">下面我们来编写一个记录请求和响应</span>SOAP<span style="font-family: 宋体">消息的</span>Axis2<span style="font-family: 宋体">模块。当客户端调用</span>WebService<span style="font-family: 宋体">方法时，该</span>Axis2<span style="font-family: 宋体">模块会将请求和响应</span>SOAP<span style="font-family: 宋体">消息输出到</span>Tomcat<span style="font-family: 宋体">控制台上。</span></p>
<p><strong><span style="font-family: 宋体">第</span>1<span style="font-family: 宋体">步：编写</span>LoggingModule<span style="font-family: 宋体">类</span></strong></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>LoggingModule</span><span style="font-family: 宋体">类实现了</span>Module<span style="font-family: 宋体">接口，代码如下：</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;module;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.AxisFault;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.context.ConfigurationContext;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.description.AxisDescription;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.description.AxisModule;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.modules.Module;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.neethi.Assertion;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.neethi.Policy;<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;LoggingModule&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Module<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;initialize&nbsp;the&nbsp;module</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init(ConfigurationContext&nbsp;configContext,&nbsp;AxisModule&nbsp;module)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;AxisFault<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">init</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&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">void</span><span style="color: #000000">&nbsp;engageNotify(AxisDescription&nbsp;axisDescription)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;AxisFault<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;shutdown&nbsp;the&nbsp;module</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;shutdown(ConfigurationContext&nbsp;configurationContext)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;AxisFault<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">shutdown</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String[]&nbsp;getPolicyNamespaces()<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">null</span><span style="color: #000000">;<br />
&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">void</span><span style="color: #000000">&nbsp;applyPolicy(Policy&nbsp;policy,&nbsp;AxisDescription&nbsp;axisDescription)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;AxisFault<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&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">boolean</span><span style="color: #000000">&nbsp;canSupportAssertion(Assertion&nbsp;assertion)<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">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>

<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在本例中</span>LoggingModule<span style="font-family: 宋体">类并没实现实际的功能，但该类必须存在。当</span>Tomcat<span style="font-family: 宋体">启动时会装载该</span>Axis2<span style="font-family: 宋体">模块，同时会调用</span>LoggingModule<span style="font-family: 宋体">类的</span>init<span style="font-family: 宋体">方法，并在</span>Tomcat<span style="font-family: 宋体">控制台中输出&#8220;</span>init<span style="font-family: 宋体">&#8221;。</span></p>
<p><strong><span style="font-family: 宋体">第</span>2<span style="font-family: 宋体">步：编写</span>LogHandler<span style="font-family: 宋体">类<br />
</span></strong></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>LogHandler</span><span style="font-family: 宋体">类实现了</span>Handler<span style="font-family: 宋体">接口，代码如下：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;module;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.AxisFault;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.context.MessageContext;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.engine.Handler;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.handlers.AbstractHandler;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.commons.logging.Log;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.commons.logging.LogFactory;<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;LogHandler&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;AbstractHandler&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Handler<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;Log&nbsp;log&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;LogFactory.getLog(LogHandler.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getName()<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;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;InvocationResponse&nbsp;invoke(MessageContext&nbsp;msgContext)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;AxisFault<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;向Tomcat控制台输出请求和响应SOAP消息</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.info(msgContext.getEnvelope().toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;InvocationResponse.CONTINUE;<br />
&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">void</span><span style="color: #000000">&nbsp;revoke(MessageContext&nbsp;msgContext)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.info(msgContext.getEnvelope().toString());<br />
&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">void</span><span style="color: #000000">&nbsp;setName(String&nbsp;name)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<p>&nbsp;</p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>LogHandler</span><span style="font-family: 宋体">类的核心方法是</span>invoke<span style="font-family: 宋体">，当使用该</span>Axis2<span style="font-family: 宋体">模块的</span>WebService<span style="font-family: 宋体">的方法被调用时，</span>LogHandler<span style="font-family: 宋体">类的</span>invoke<span style="font-family: 宋体">方法被调用。&nbsp;&nbsp;&nbsp; </span><span><br />
<br />
</span><strong><span style="font-family: 宋体">第</span>3<span style="font-family: 宋体">步：编写</span>module.xml<span style="font-family: 宋体">文件&nbsp;&nbsp;&nbsp; <br />
</span></strong></p>
&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在META-INF目录中建立一个module.xml文件，内容如下：<br />
</span>
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">module&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="logging"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="module.LoggingModule"</span><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">InFlow</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">handler&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="InFlowLogHandler"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="module.LogHandler"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">order&nbsp;</span><span style="color: #ff0000">phase</span><span style="color: #0000ff">="loggingPhase"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">handler</span><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">InFlow</span><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">OutFlow</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">handler&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="OutFlowLogHandler"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="module.LogHandler"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">order&nbsp;</span><span style="color: #ff0000">phase</span><span style="color: #0000ff">="loggingPhase"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">handler</span><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">OutFlow</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">OutFaultFlow</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">handler&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="FaultOutFlowLogHandler"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="module.LogHandler"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">order&nbsp;</span><span style="color: #ff0000">phase</span><span style="color: #0000ff">="loggingPhase"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">handler</span><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">OutFaultFlow</span><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">InFaultFlow</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">handler&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="FaultInFlowLogHandler"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="module.LogHandler"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">order&nbsp;</span><span style="color: #ff0000">phase</span><span style="color: #0000ff">="loggingPhase"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">handler</span><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">InFaultFlow</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">module</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<p><strong><span style="font-family: 宋体">第</span>4<span style="font-family: 宋体">步：在</span>axis2.xml<span style="font-family: 宋体">文件中配置</span>Axis2<span style="font-family: 宋体">模块</span></strong></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">打开</span>axis2.xml<span style="font-family: 宋体">文件，分别在如下四个</span>&lt;phaseOrder&gt;<span style="font-family: 宋体">元素中加入</span><span>&lt;phase name="loggingPhase"/&gt;</span><span style="font-family: 宋体">：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">phaseOrder&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="InFlow"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&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">&nbsp;&nbsp;&nbsp; &lt;</span><span style="color: #800000">phase&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="soapmonitorPhase"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; &lt;</span><span style="color: #800000">phase&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="loggingPhase"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">phaseOrder</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">phaseOrder&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="OutFlow"</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 />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">phase&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Security"</span><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">phase&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="loggingPhase"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">phaseOrder</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">phaseOrder&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="InFaultFlow"</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 />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">phase&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="soapmonitorPhase"</span><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">phase&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="loggingPhase"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">phaseOrder</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">phaseOrder&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="OutFaultFlow"</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 />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">phase&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Security"</span><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">phase&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="loggingPhase"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">phaseOrder</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<p>&nbsp;</p>
<p><strong><span style="font-family: 宋体">第</span>5<span style="font-family: 宋体">步：在</span>services.xml<span style="font-family: 宋体">文件中引用</span>logging<span style="font-family: 宋体">模块</span></strong></p>
<p>&nbsp;&nbsp;&nbsp; services.xml<span style="font-family: 宋体">文件的内容如下：</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="myService"</span><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">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用logging模块<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;引用logging模块&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">module&nbsp;</span><span style="color: #ff0000">ref</span><span style="color: #0000ff">="logging"</span><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">parameter&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ServiceClass"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.MyService&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">parameter</span><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">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">mep</span><span style="color: #0000ff">="http://www.w3.org/2004/08/wsdl/in-out"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><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">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">service</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<p><strong><span style="font-family: 宋体">第</span>6<span style="font-family: 宋体">步：发布</span>logging<span style="font-family: 宋体">模块</span></strong></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">到现在为止，我们应用可以建立两个发行包：</span>logging.mar<span style="font-family: 宋体">和</span>service.aar<span style="font-family: 宋体">。其中</span>logging.mar<span style="font-family: 宋体">文件是</span>Axis2<span style="font-family: 宋体">模块的发行包，该包的目录结构如下：</span></p>
<p>logging.mar</p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>module\LoggingModule.class</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>module\LogHandler.class</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>META-INF\module.xml</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>service.aar</span><span style="font-family: 宋体">文件是本例编写的</span>WebService<span style="font-family: 宋体">发行包，该包的目录结构如下：</span></p>
<p>service.aar</p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>service\MyService.class</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>META-INF\services.xml</span></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">将</span>logging.mar<span style="font-family: 宋体">文件放在</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2\WEB-INF\modules<span style="font-family: 宋体">目录中，将</span>service.aar<span style="font-family: 宋体">文件放在</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2\WEB-INF\services<span style="font-family: 宋体">目录中。要注意的是，如果</span>modules<span style="font-family: 宋体">目录中包含了</span>modules.list<span style="font-family: 宋体">文件，</span>Axis2<span style="font-family: 宋体">会只装载在该文件中引用的</span>Axis2<span style="font-family: 宋体">模块，因此，必须在该文件中引用</span>logging<span style="font-family: 宋体">模块，该文件的内容如下：</span></p>
<p>addressing-1.4.1.mar</p>
<p>soapmonitor-1.4.1.mar</p>
<p>ping-1.4.1.mar</p>
<p>mex-1.4.1.mar</p>
<p>axis2-scripting-1.4.1.mar</p>
<p>logging.mar</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">如果</span>modules<span style="font-family: 宋体">目录中不包含</span>modules.list<span style="font-family: 宋体">文件，则</span>Axis2<span style="font-family: 宋体">会装载</span>modules<span style="font-family: 宋体">文件中的所有</span>Axis2<span style="font-family: 宋体">模块。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">现在启动</span>Tomcat<span style="font-family: 宋体">，使用如下的</span>C#<span style="font-family: 宋体">代码调用</span>MyService<span style="font-family: 宋体">的</span>getGreeting<span style="font-family: 宋体">方法则会在</span>Tomcat<span style="font-family: 宋体">控制台中输出相应的请求和响应</span>SOAP<span style="font-family: 宋体">消息。<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;async是引用MyService的服务名</span><span style="color: #008000"><br />
</span><span style="color: #000000">async.myService&nbsp;my&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.asyn.myService();<br />
MessageBox.Show(my.getGreeting(</span><span style="color: #000000">"</span><span style="color: #000000">中国</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
MessageBox.Show(</span><span style="color: #000000">"</span><span style="color: #000000">完成调用</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在执行上面的代码后，在</span>Tomcat<span style="font-family: 宋体">控制台中输出的信息如下</span><span style="font-family: 宋体">图所示。<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/nokiaguy/axis2_9/01.jpg" /><br />
<br />
转自：http://www.blogjava.net/nokiaguy/archive/2009/02/16/254826.html<br />
</span></p>
<br />
<br />
<img src ="http://www.blogjava.net/conans/aggbug/254909.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-02-16 16:47 <a href="http://www.blogjava.net/conans/articles/254909.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService大讲堂之Axis2(8)：异步调用WebService </title><link>http://www.blogjava.net/conans/articles/254908.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Mon, 16 Feb 2009 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/254908.html</guid><description><![CDATA[&nbsp;<span style="font-family: 宋体">在前面几篇文章中都是使用同步方式来调用</span>WebService<span style="font-family: 宋体">。也就是说，如果被调用的</span>WebService<span style="font-family: 宋体">方法长时间不返回，客户端将一直被阻塞，直到该方法返回为止。使用同步方法来调用</span>WebService<span style="font-family: 宋体">虽然很直观，但当</span>WebService<span style="font-family: 宋体">方法由于各种原因需要很长时间才能返回的话，就会使客户端程序一直处于等待状态，这样用户是无法忍受的。</span><br />
&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">当然，我们很容易就可以想到解决问题的方法，这就是多线程。解决问题的基本方法是将访问</span>WebService<span style="font-family: 宋体">的任务交由一个或多个线程来完成，而主线程并不负责访问</span>WebService<span style="font-family: 宋体">。这样即使被访问的</span>WebService<span style="font-family: 宋体">方法长时间不返回，客户端仍然可以做其他的工作。我们可以管这种通过多线程访问</span>WebService<span style="font-family: 宋体">的方式称为异步访问。</span><br />
&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">虽然直接使用多线程可以很好地解决这个问题，但比较麻烦。幸好</span>Axis2<span style="font-family: 宋体">的客户端提供了异步访问</span>WebService<span style="font-family: 宋体">的功能。</span><br />
&nbsp;&nbsp;&nbsp; RPCServiceClient<span style="font-family: 宋体">类提供了一个</span>invokeNonBlocking<span style="font-family: 宋体">方法可以通过异步的方式来访问</span>WebService<span style="font-family: 宋体">。下面先来建立一个</span>WebService<span>。<br />
<span>&nbsp;&nbsp;&nbsp; </span>MyService</span><span style="font-family: 宋体">是一个</span>WebService<span style="font-family: 宋体">类，代码如下：<br />
</span>
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;service;<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;MyService<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getName()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">getName方法正在执行<img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;延迟5秒</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000">5000</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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">火星</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">为了模拟需要一定时间才返回的</span>WebService<span style="font-family: 宋体">方法，在</span>getName<span style="font-family: 宋体">方法中使用了</span>sleep<span style="font-family: 宋体">方法来延迟</span>5<span style="font-family: 宋体">秒。</span><br />
&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">下面是</span>MyService<span style="font-family: 宋体">类的配置代码：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;services.xml&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="myService"</span><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">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;异步调用演示<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><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">parameter&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ServiceClass"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.MyService&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">parameter</span><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">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">mep</span><span style="color: #0000ff">="http://www.w3.org/2004/08/wsdl/in-out"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><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">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">service</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">从上面的配置代码可以看出，</span>MyService<span style="font-family: 宋体">的配置方式与前几章的</span>WebService<span style="font-family: 宋体">的配置方式完全一样，也就是说，</span>MyService<span style="font-family: 宋体">只是一个普通的</span>WebService<span style="font-family: 宋体">。</span><br />
&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">下面是异步调用</span>MyService<span style="font-family: 宋体">的</span>Java<span style="font-family: 宋体">客户端代码：<br />
<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><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.context.MessageContext;<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;RPCAsyncClient<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<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&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;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/myService</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;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[]{};<br />
&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://service</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">getName</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serviceClient.invokeNonBlocking(opAddEntry,&nbsp;opAddEntryArgs,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;org.apache.axis2.client.async.AxisCallback()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&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">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;onComplete()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&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">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;onError(Exception&nbsp;arg0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&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">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;onFault(MessageContext&nbsp;arg0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&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">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;onMessage(MessageContext&nbsp;mc)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&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: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;输出返回值</span><span style="color: #008000"><br />
</span><span style="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;System.out.println(mc.getEnvelope().getFirstElement()<br />
&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getFirstElement().getFirstElement().getText());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</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;阻止程序退出</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.in.read();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}&nbsp; <br />
</span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">从上面的代码可以看出，</span>invokeNonBlocking<span style="font-family: 宋体">方法有三个参数，前两个参数分别指定了要调用的方法及方法参数的相关信息，而最后一个参数并不是方法返回值的类型信息，而是一个实现</span>org.apache.axis2.client.async.AxisCallback<span style="font-family: 宋体">接口的类的对象实例。在本例中隐式实现了</span>AxisCallback<span style="font-family: 宋体">接口。在</span>AxisCallback<span style="font-family: 宋体">接口中有四个方法需要实现，其中当被异步调用的方法返回时</span>onMessage<span style="font-family: 宋体">方法被调用。当运行上面的程序后，将输出如下的信息：</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">异步调用！<br />
火星</span></div>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">虽然上面的例子可以实现异步调用，但比较麻烦。为了更方便地实现异步调用，可以使用</span>wsdl2java<span style="font-family: 宋体">命令的</span>-a<span style="font-family: 宋体">参数生成可异步调用的</span>Stub<span style="font-family: 宋体">类。下面的命令可生成同步和异步调用的客户端代码（两个类），其中</span>-s<span style="font-family: 宋体">表示生成同步调用代码，</span>-a<span style="font-family: 宋体">表示生成异步调用代码。</span><span><br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">%AXIS2_HOME%\bin\wsdl2java&nbsp;-uri&nbsp;http://localhost:</span><span style="color: #000000">8080</span><span style="color: #000000">/axis2/services/myService?wsdl&nbsp;-p&nbsp;client&nbsp;-s&nbsp;-a&nbsp;-o&nbsp;stub</span></div>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在执行上面的命令后，将生成两个类：</span>MyServiceStub<span style="font-family: 宋体">和</span>MyServiceCallbackHandler<span style="font-family: 宋体">类，其中</span>MyServiceStub<span style="font-family: 宋体">类负责同步和异步调用</span>WebService<span style="font-family: 宋体">，</span>MyServiceCallbackHandler<span style="font-family: 宋体">类是一个抽象类，也是一个回调类，当使用异步方式调用</span>WebService<span style="font-family: 宋体">方法时，如果方法返回，则</span>MyServiceCallbackHandler<span style="font-family: 宋体">类的</span>receiveResultgetName<span style="font-family: 宋体">方法被调用。下面是使用</span>MyServiceStub<span style="font-family: 宋体">类异步访问</span>WebService<span style="font-family: 宋体">的代码：</span><br />
</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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><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;client.MyServiceStub.GetNameResponse;<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyCallback&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;MyServiceCallbackHandler<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;receiveResultgetName(GetNameResponse&nbsp;result)<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;输出getName方法的返回结果</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(result.get_return());<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<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;MyServiceStub&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;MyServiceStub();&nbsp;&nbsp;&nbsp;&nbsp;&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;异步调用WebService</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stub.startgetName(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MyCallback());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</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.in.read();&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
}<br />
</span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; <span style="font-family: 宋体">执行上面的程序后，将输出如下的信息：&nbsp;&nbsp;&nbsp; <br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">异步调用！<br />
火星<br />
</span></div>
<span style="font-size: 10.5pt; font-family: 'Times New Roman'"><br />
&nbsp;&nbsp;&nbsp; &nbsp; </span><span style="font-family: 宋体">在.net中也可以使用异步的方式来调用WebService，如在C#中可使用如下的代码来异步调用getName方法：<br />
</span>
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;回调方法</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;getNameCompletedEvent(object&nbsp;sender,&nbsp;WSC.asyn.getNameCompletedEventArgs&nbsp;e)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;listBox1.Items.Add(&nbsp;e.Result.@</span><span style="color: #0000ff">return</span><span style="color: #000000">);<br />
}<br />
</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;button1_Click(object&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;async.myService&nbsp;my&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.async.myService();<br />
&nbsp;&nbsp;&nbsp;&nbsp;my.getNameCompleted&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.async.getNameCompletedEventHandler(getNameCompletedEvent);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my.getNameAsync();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(</span><span style="color: #000000">"</span><span style="color: #000000">完成调用</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
}<br />
</span></div>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">其中</span>async<span style="font-family: 宋体">是引用</span>MyService<span style="font-family: 宋体">的服务名。要注意的是，在</span>C#<span style="font-family: 宋体">中不能在同一个</span>WebService<span style="font-family: 宋体">实例的</span>getName<span style="font-family: 宋体">方法未返回之前，再次调用该实例的</span>getName<span style="font-family: 宋体">方法，否则将抛出异常。如下面的代码会抛出一个异常：</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;async.myService&nbsp;my&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.async.myService();<br />
&nbsp;&nbsp;&nbsp;&nbsp;my.getNameCompleted&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.async.getNameCompletedEventHandler(getNameCompletedEvent);<br />
&nbsp;&nbsp;&nbsp; my.getNameAsync();<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;将抛出异常</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp; my.getNameAsync();<br />
</span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">但不同的</span>WebService<span style="font-family: 宋体">实例的方法可以在方法未返回时调用，如下面的代码是可以正常工作的：</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">asyn.myService&nbsp;my&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.asyn.myService();<br />
my.getNameAsync();<br />
my.getNameCompleted&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.asyn.getNameCompletedEventHandler(getNameCompletedEvent);<br />
asyn.myService&nbsp;my1&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.asyn.myService();<br />
my1.getNameCompleted&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.asyn.getNameCompletedEventHandler(getNameCompletedEvent);<br />
my1.getNameAsync();</span></div>
<br />
转自：http://www.blogjava.net/nokiaguy/archive/2009/02/13/254548.html<br />
<img src ="http://www.blogjava.net/conans/aggbug/254908.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-02-16 16:46 <a href="http://www.blogjava.net/conans/articles/254908.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService大讲堂之Axis2(7)：将Spring的装配JavaBean发布成WebService </title><link>http://www.blogjava.net/conans/articles/254907.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Mon, 16 Feb 2009 08:45:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/254907.html</guid><description><![CDATA[<span style="font-family: 宋体">在现今的</span>Web<span style="font-family: 宋体">应用中经常使用</span>Spring<span style="font-family: 宋体">框架来装载</span>JavaBean<span style="font-family: 宋体">。如果要想将某些在</span>Spring<span style="font-family: 宋体">中装配的</span>JavaBean<span style="font-family: 宋体">发布成</span>WebService<span style="font-family: 宋体">，使用</span>Axis2<span style="font-family: 宋体">的</span>Spring<span style="font-family: 宋体">感知功能是非常容易做到的。</span><br />
&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在本文的例子中，除了</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2<span style="font-family: 宋体">目录及该目录中的相关库外，还需要</span>Spring<span style="font-family: 宋体">框架中的</span>spring.jar<span style="font-family: 宋体">文件，将该文件复制到</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2\WEB-INF\lib<span style="font-family: 宋体">目录中。</span><br />
&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">下面先建立一个</span>JavaBean<span style="font-family: 宋体">（该</span>JavaBean<span style="font-family: 宋体">最终要被发布成</span>WebService<span style="font-family: 宋体">），代码如下：<br />
</span>
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;service;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;entity.Person;<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;SpringService<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;job;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setName(String&nbsp;name)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br />
&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">void</span><span style="color: #000000">&nbsp;setJob(String&nbsp;job)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.job&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;job;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Person&nbsp;getPerson()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;person&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person.setName(name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person.setJob(job);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;person;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<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">hello&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;}<br />
}</span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">其中</span>Person<span style="font-family: 宋体">也是一个</span>JavaBean<span style="font-family: 宋体">，代码如下：</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;entity;<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;Person<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;job;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getName()<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;name;<br />
&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">void</span><span style="color: #000000">&nbsp;setName(String&nbsp;name)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getJob()<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;job;<br />
&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">void</span><span style="color: #000000">&nbsp;setJob(String&nbsp;job)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.job&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;job;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">将上面两个</span>Java<span style="font-family: 宋体">源文件编译后，放到</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2\WEB-INF\classes<span style="font-family: 宋体">目录中。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2\WEB-INF<span style="font-family: 宋体">目录中建立一个</span>applicationContext.xml<span style="font-family: 宋体">文件，该文件是</span>Spring<span style="font-family: 宋体">框架用于装配</span>JavaBean<span style="font-family: 宋体">的配置文件，内容如下：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><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">beans&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:aop</span><span style="color: #0000ff">="http://www.springframework.org/schema/aop"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:tx</span><span style="color: #0000ff">="http://www.springframework.org/schema/tx"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff">="<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/aop&nbsp;http://www.springframework.org/schema/aop/spring-aop-2.5.xsd<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/tx&nbsp;http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="springService"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="service.SpringService"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="name"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="姚明"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="job"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="职业男篮"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在</span>applicationContext.xml<span style="font-family: 宋体">文件中装配了</span>service.SpringService<span style="font-family: 宋体">类，并被始化了</span>name<span style="font-family: 宋体">和</span>job<span style="font-family: 宋体">属性。在配置完</span>SpringService<span style="font-family: 宋体">类后，就可以直接在程序中</span>FileSystemXmlApplicationContext<span style="font-family: 宋体">类或其他类似功能的类读取</span>applicationContext.xml<span style="font-family: 宋体">文件中的内容，并获得</span>SpringService<span style="font-family: 宋体">类的对象实例。但现在我们并不这样做，而是将</span>SpringService<span style="font-family: 宋体">类发布成</span>WebService<span style="font-family: 宋体">。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2\WEB-INF\lib<span style="font-family: 宋体">目录中有一个</span>axis2-spring-1.4.1.jar<span style="font-family: 宋体">文件，该文件用于将被装配</span>JavaBean<span style="font-family: 宋体">的发布成</span>WebService<span style="font-family: 宋体">。在</span>D<span style="font-family: 宋体">盘建立一个</span>axi2-spring-ws<span style="font-family: 宋体">目录，并在该目录中建立一个</span>META-INF<span style="font-family: 宋体">子目录。在</span>META-INF<span style="font-family: 宋体">目录中建立一个</span>services.xml<span style="font-family: 宋体">文件，内容如下：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="springService"</span><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">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Spring&nbsp;aware<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><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">parameter&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ServiceObjectSupplier"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">parameter</span><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">parameter&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="SpringBeanName"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;springService<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">parameter</span><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">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">mep</span><span style="color: #0000ff">="http://www.w3.org/2004/08/wsdl/in-out"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><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">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">service</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp; <br />
</span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在</span>Windows<span style="font-family: 宋体">控制台进入</span>axi2-spring-ws<span style="font-family: 宋体">目录，并使用</span>jar<span style="font-family: 宋体">命令将</span>axi2-spring-ws<span style="font-family: 宋体">目录中的内容打包成</span>axi2-spring-ws.aar<span style="font-family: 宋体">，然后将该文件复制到</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2\WEB-INF\services<span style="font-family: 宋体">目录中，启动</span>Tomcat<span style="font-family: 宋体">后，就可以访问该</span>WebService<span style="font-family: 宋体">了，访问方式与前面几篇文章的访问方式相同。获得</span>wsdl<span style="font-family: 宋体">内容的</span>URL<span style="font-family: 宋体">如下：<br />
<br />
<a href="http://localhost:8080/axis2/services/springService?wsdl">http://localhost:8080/axis2/services/springService?wsdl<br />
</a></span><a href="http://localhost:8080/axis2/services/springService?wsdl"></a><br />
<span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 在将</span>Spring<span style="font-family: 宋体">中的装配</span>JavaBean<span style="font-family: 宋体">发布成</span>WebService<span style="font-family: 宋体">需要注意以下几点：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>1.&nbsp;</span><span style="font-family: 宋体">由</span>JavaBean<span style="font-family: 宋体">编译生成的</span>.class<span style="font-family: 宋体">文件需要放在</span>WEB-INF\classes<span style="font-family: 宋体">目录中，或打成</span>.jar<span style="font-family: 宋体">包后放在</span>WEB-INF\lib<span style="font-family: 宋体">目录中，而</span>WEB-INF\services<span style="font-family: 宋体">目录中的</span>.aar<span style="font-family: 宋体">包中不需要包含</span>.class<span style="font-family: 宋体">文件，而只需要包含一个</span>META-INF<span style="font-family: 宋体">目录，并在该目录中包含一个</span>services.xml<span style="font-family: 宋体">文件即可。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>2.&nbsp;services.xml</span><span style="font-family: 宋体">的配置方法与前几篇文章的配置方法类似，只是并不需要使用</span>ServiceClass<span style="font-family: 宋体">参数指定要发布成</span>WebService<span style="font-family: 宋体">的</span>Java<span style="font-family: 宋体">类，而是要指定在</span>applicationContext.xml<span style="font-family: 宋体">文件中的装配</span>JavaBean<span style="font-family: 宋体">的名称（</span>SpringBeanName<span style="font-family: 宋体">参数）。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>3.&nbsp;</span><span style="font-family: 宋体">在</span>services.xml<span style="font-family: 宋体">文件中需要通过</span>ServiceObjectSupplier<span style="font-family: 宋体">参数指定</span>SpringServletContextObjectSupplier<span style="font-family: 宋体">类来获得</span>Spring<span style="font-family: 宋体">的</span>ApplicationContext<span style="font-family: 宋体">对象。<br />
<br />
转自：http://www.blogjava.net/nokiaguy/archive/2009/02/13/254499.html<br />
</span></p>
<img src ="http://www.blogjava.net/conans/aggbug/254907.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-02-16 16:45 <a href="http://www.blogjava.net/conans/articles/254907.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService大讲堂之Axis2(6)：跨服务会话(Session)管理 </title><link>http://www.blogjava.net/conans/articles/253527.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Fri, 06 Feb 2009 03:47:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/253527.html</guid><description><![CDATA[<p style="text-indent: 21.75pt"><span style="font-family: 宋体">在</span><a id="homepage1_HomePageDays_DaysList_ctl05_DayItem_DayList_ctl00_TitleUrl" href="http://www.blogjava.net/nokiaguy/archive/2009/nokiaguy/archive/2009/01/26/252564.html">《WebService大讲堂之Axis2(5)：会话（Session）管理》</a><span style="font-family: 宋体">一文中介绍了如何使用</span>Axis2<span style="font-family: 宋体">来管理同一个服务的会话，但对于一个复杂的系统，不可能只有一个</span>WebService<span style="font-family: 宋体">服务，例如，至少会有一个管理用户的</span>WebService<span style="font-family: 宋体">（用户登录和注册）以及处理业务的</span>WebService<span style="font-family: 宋体">。象这种情况，就必须在多个</span>WebService<span style="font-family: 宋体">服务之间共享会话状态，也称为跨服务会话</span>(Session)<span style="font-family: 宋体">管理。实现跨服务会话管理与实现同一个服务的会话管理的步骤类似，但仍然有一些差别，实现跨服务会话管理的步骤如下：</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">实现跨服务的</span>Session<span style="font-family: 宋体">管理需要如下三步：</span></p>
<p style="text-indent: 21.75pt">1.&nbsp;<span style="font-family: 宋体">使用</span>MessageContext<span style="font-family: 宋体">和</span><strong>ServiceGroupContext</strong><span style="font-family: 宋体">获得与设置</span>key-value<span style="font-family: 宋体">对。</span></p>
<p style="text-indent: 21.75pt">2.&nbsp;<span style="font-family: 宋体">为要进行</span>Session<span style="font-family: 宋体">管理的</span>WebService<span style="font-family: 宋体">类所对应的</span>&lt;service&gt;<span style="font-family: 宋体">元素添加一个</span>scope<span style="font-family: 宋体">属性，并将该属性值设为</span><strong>application</strong><span style="font-family: 宋体">。</span></p>
<p style="text-indent: 21.75pt">3.&nbsp;<span style="font-family: 宋体">在客户端使用</span>setManageSession(true)<span style="font-family: 宋体">打开</span>Session<span style="font-family: 宋体">管理功能。</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">从上面的步骤可以看出，实现跨服务会话管理与实现同一个服务的会话管理在前两步上存在着差异，而第</span>3<span style="font-family: 宋体">步是完全一样的。下面是一个跨服务的会话管理的实例。在这个例子中有两个</span>WebService<span style="font-family: 宋体">类：</span>LoginService<span style="font-family: 宋体">和</span>SearchService<span style="font-family: 宋体">，代码如下：<strong><br />
<br />
LoginService.java</strong><br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;service;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.context.MessageContext;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.context.ServiceGroupContext;<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;LoginService<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;login(String&nbsp;username,&nbsp;String&nbsp;password)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">"</span><span style="color: #000000">bill</span><span style="color: #000000">"</span><span style="color: #000000">.equals(username)&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1234</span><span style="color: #000000">"</span><span style="color: #000000">.equals(password))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;第1步：设置key-value对</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageContext&nbsp;mc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MessageContext.getCurrentMessageContext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServiceGroupContext&nbsp;sgc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mc.getServiceGroupContext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sgc.setProperty(</span><span style="color: #000000">"</span><span style="color: #000000">login</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">成功登录</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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">false</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<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;String&nbsp;getLoginMsg()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;第1步：获得key-value对中的value</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageContext&nbsp;mc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MessageContext.getCurrentMessageContext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServiceGroupContext&nbsp;sgc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;mc.getServiceGroupContext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(String)sgc.getProperty(</span><span style="color: #000000">"</span><span style="color: #000000">login</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<p><br />
<strong>SearchService.java</strong><br />
</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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;service;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.context.MessageContext;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.context.ServiceGroupContext;<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;SearchService<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;findByName(String&nbsp;name)<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;第1步：获得key-value对中的value</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageContext&nbsp;mc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MessageContext.getCurrentMessageContext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServiceGroupContext&nbsp;sgc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;mc.getServiceGroupContext();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(sgc.getProperty(</span><span style="color: #000000">"</span><span style="color: #000000">login</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: #0000ff">null</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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">找到的数据&lt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;name&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&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">用户未登录</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
<p style="text-indent: 21.75pt">services.xml<span style="font-family: 宋体">文件中的配置代码如下：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">serviceGroup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;第2步：添加scope属性，并设置属性值为application&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="loginService"</span><span style="color: #ff0000">&nbsp;scope</span><span style="color: #0000ff">="application"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;登录服务<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">parameter&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ServiceClass"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.LoginService<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">parameter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">mep</span><span style="color: #0000ff">="http://www.w3.org/2004/08/wsdl/in-out"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">messageReceivers</span><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">service</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;第2步：添加scope属性，并设置属性值为application&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="searchService"</span><span style="color: #ff0000">&nbsp;scope</span><span style="color: #0000ff">="application"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;搜索服务<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">parameter&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ServiceClass"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.SearchService<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">parameter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">mep</span><span style="color: #0000ff">="http://www.w3.org/2004/08/wsdl/in-out"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">messageReceivers</span><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">service</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">serviceGroup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<p style="text-indent: 21.75pt"><br />
</p>
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">第</span>3<span style="font-family: 宋体">步与</span><a id="homepage1_HomePageDays_DaysList_ctl05_DayItem_DayList_ctl00_TitleUrl" href="http://www.blogjava.net/nokiaguy/archive/2009/nokiaguy/archive/2009/01/26/252564.html">《WebService大讲堂之Axis2(5)：会话（Session）管理》</a>一文中<span style="font-family: 宋体">介绍的方法类似。<br />
</span>
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
</p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">下面是使用两个</span>stub<span style="font-family: 宋体">类的对象实例访问上面实现的两个</span>WebService<span style="font-family: 宋体">的客户端代码：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">LoginServiceStub&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;LoginServiceStub();<br />
LoginServiceStub.Login&nbsp;login&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LoginServiceStub.Login();<br />
login.setUsername(</span><span style="color: #000000">"</span><span style="color: #000000">bill</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
login.setPassword(</span><span style="color: #000000">"</span><span style="color: #000000">1234</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #0000ff">if</span><span style="color: #000000">(stub.login(login).local_return)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(stub.getLoginMsg().local_return);<br />
&nbsp;&nbsp;&nbsp;&nbsp;SearchServiceStub&nbsp;searchStub&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SearchServiceStub();<br />
&nbsp;&nbsp;&nbsp;&nbsp;SearchServiceStub.FindByName&nbsp;fbn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SearchServiceStub.FindByName();<br />
&nbsp;&nbsp;&nbsp;&nbsp;fbn.setName(</span><span style="color: #000000">"</span><span style="color: #000000">abc</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(searchStub.findByName(fbn).local_return);&nbsp;<br />
}<br />
</span></div>
<p style="text-indent: 21.75pt"></p>
<p style="text-indent: 21.75pt">
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C03%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
</p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">在执行上面的代码后，将输出如下的信息：</span><br />
</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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">成功登录<br />
<br />
找到的数据</span><span style="color: #000000">&lt;</span><span style="color: #000000">abc</span><span style="color: #000000">&gt;</span><br />
</div>
<p style="text-indent: 21.75pt"></p>
<p style="text-indent: 21.75pt">读者可以将scope属性值改成transportsession，看看会输出什么！<br />
<br />
&nbsp;&nbsp;&nbsp; 实际上，Axis2的会话管理也是通过Cookie实现的，与Web应用中的Session管理类似。如果读者使用C#访问支持会话（在同一个服务中的会话管理）的WebService，需要指定一个CookieContainer对象，代码如下：<br />
</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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">service.loginService&nbsp;ls&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;service.loginService();<br />
System.Net.CookieContainer&nbsp;cc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;System.Net.CookieContainer();<br />
ls.CookieContainer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cc;<br />
</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;r,&nbsp;rs;<br />
ls.login(</span><span style="color: #000000">"</span><span style="color: #000000">bill</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1234</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">out</span><span style="color: #000000">&nbsp;@r,&nbsp;</span><span style="color: #0000ff">out</span><span style="color: #000000">&nbsp;rs);<br />
</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(r)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(ls.getLoginMsg().@return);<br />
}<br />
</span></div>
<p style="text-indent: 21.75pt"></p>
<p style="text-indent: 21.75pt"></p>
<p style="text-indent: 21.75pt">
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
<span style="font-family: 宋体">如果是访问跨服务的支持会话的</span>WebService<span style="font-family: 宋体">，则不需要指定</span>CookieContainer<span style="font-family: 宋体">对象，代码如下：<br />
<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">service.loginService&nbsp;ls&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;service.loginService();<br />
</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;r,&nbsp;rs;<br />
ls.login(</span><span style="color: #000000">"</span><span style="color: #000000">bill</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1234</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">out</span><span style="color: #000000">&nbsp;@r,&nbsp;</span><span style="color: #0000ff">out</span><span style="color: #000000">&nbsp;rs);<br />
</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(r)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;service1.searchService&nbsp;ss&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;service1.searchService();<br />
&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(ss.findByName(</span><span style="color: #000000">"</span><span style="color: #000000">abc</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
}<br />
</span></div>
<p style="text-indent: 21.75pt">
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C08%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
</p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">如果读者使用</span>delphi<span style="font-family: 宋体">（本文使用的是</span>delphi2009<span style="font-family: 宋体">，其他的</span>delphi<span style="font-family: 宋体">版本请读者自行测试）调用支持会话的</span>WebService<span style="font-family: 宋体">时有一些差别。经笔者测试，使用</span>delphi<span style="font-family: 宋体">调用</span>WebService<span style="font-family: 宋体">，将</span>scope<span style="font-family: 宋体">属性值设为</span>transportsession<span style="font-family: 宋体">和</span>application<span style="font-family: 宋体">都可以实现跨服务的会话管理，这一点和</span>Java<span style="font-family: 宋体">与</span>C#<span style="font-family: 宋体">不同，</span>Java<span style="font-family: 宋体">和</span>C#<span style="font-family: 宋体">必须将</span>scope<span style="font-family: 宋体">属性值设为</span>application<span style="font-family: 宋体">才支持跨服务会话管理。在</span>delphi<span style="font-family: 宋体">中不需要象</span>C#<span style="font-family: 宋体">指定一个</span>CookieContainer<span style="font-family: 宋体">或其他类似的对象，而只需要象访问普通的</span>WebService<span style="font-family: 宋体">一样访问支持会话的</span>WebService<span style="font-family: 宋体">即可。</span></p>
<img src ="http://www.blogjava.net/conans/aggbug/253527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-02-06 11:47 <a href="http://www.blogjava.net/conans/articles/253527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService大讲堂之Axis2(5)：会话（Session）管理 </title><link>http://www.blogjava.net/conans/articles/252821.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Sun, 01 Feb 2009 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/252821.html</guid><description><![CDATA[<p style="text-indent: 21.75pt">WebService<span style="font-family: 宋体">给人最直观的感觉就是由一个个方法组成，并在客户端通过</span>SOAP<span style="font-family: 宋体">协议调用这些方法。这些方法可能有返回值，也可能没有返回值。虽然这样可以完成一些工具，但这些被调用的方法是孤立的，当一个方法被调用后，在其他的方法中无法获得这个方法调用后的状态，也就是说无法保留状态。</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">读者可以想象，这对于一个完整的应用程序，无法保留状态，就意味着只依靠</span>WebService<span style="font-family: 宋体">很难完成全部的工作。例如，一个完整的应用系统都需要进行登录，这在</span>Web<span style="font-family: 宋体">应用中使用</span>Session<span style="font-family: 宋体">来保存用户登录状态，而如果用</span>WebService<span style="font-family: 宋体">的方法来进行登录处理，无法保存登录状态是非常令人尴尬的。当然，这也可以通过其他的方法来解决，如在服务端使用</span>static<span style="font-family: 宋体">变量来保存用户状态，并发送一个</span>id<span style="font-family: 宋体">到客户端，通过在服务端和客户端传递这个</span>id<span style="font-family: 宋体">来取得相应的用户状态。这非常类似于</span>Web<span style="font-family: 宋体">应用中通过</span>Session<span style="font-family: 宋体">和</span>Cookie<span style="font-family: 宋体">来管理用户状态。但这就需要由开发人员做很多工作，不过幸好</span>Axis2<span style="font-family: 宋体">为我们提供了</span>WebService<span style="font-family: 宋体">状态管理的功能。</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">使用</span>Axis2<span style="font-family: 宋体">来管理</span>WebService<span style="font-family: 宋体">的状态基本上对于开发人员是透明的。在</span>WebService<span style="font-family: 宋体">类需要使用</span>org.apache.axis2.context.MessageContext<span style="font-family: 宋体">和</span>org.apache.axis2.context.ServiceContext<span style="font-family: 宋体">类来保存与获得保存在服务端的状态信息，这有些象使用</span>HttpSession<span style="font-family: 宋体">接口的</span>getAttribute<span style="font-family: 宋体">和</span>setAttribute<span style="font-family: 宋体">方法获得与设置</span>Session<span style="font-family: 宋体">域属性。</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">除此之外，还需要修改</span>services.xml<span style="font-family: 宋体">文件的内容，为</span>&lt;service&gt;<span style="font-family: 宋体">元素加一个</span>scope<span style="font-family: 宋体">属性，该属性有四个可取的值：</span><span>Application, SOAPSession, TransportSession, Request</span><span style="font-family: 宋体">，不过要注意一下，虽然</span>Axis2<span style="font-family: 宋体">的官方文档将这四个值的单词首字母和缩写字母都写成了大写，但经笔者测试，必须全部小写才有效，也就是这四个值应为：</span>application<span style="font-family: 宋体">、</span>soapsession<span style="font-family: 宋体">、</span>transportsession<span style="font-family: 宋体">、</span>request<span style="font-family: 宋体">，其中</span>request<span style="font-family: 宋体">为</span>scope<span style="font-family: 宋体">属性的默认值。读者可以选择使用</span>transportsession<span style="font-family: 宋体">和</span>application<span style="font-family: 宋体">分别实现同一个</span>WebService<span style="font-family: 宋体">类和跨</span>WebService<span style="font-family: 宋体">类的会话管理。</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">在客户端需要使用</span>setManageSession(true)<span style="font-family: 宋体">打开</span>Session<span style="font-family: 宋体">管理功能。</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">综上所述，实现同一个</span>WebService<span style="font-family: 宋体">的</span>Session<span style="font-family: 宋体">管理需要如下三步：</span></p>
<p style="text-indent: 21.75pt">1.&nbsp;<span style="font-family: 宋体">使用</span>MessageContext<span style="font-family: 宋体">和</span><strong>ServiceContext</strong><span style="font-family: 宋体">获得与设置</span>key-value<span style="font-family: 宋体">对。</span></p>
<p style="text-indent: 21.75pt">2.&nbsp;<span style="font-family: 宋体">为要进行</span>Session<span style="font-family: 宋体">管理的</span>WebService<span style="font-family: 宋体">类所对应的</span>&lt;service&gt;<span style="font-family: 宋体">元素添加一个</span>scope<span style="font-family: 宋体">属性，并将该属性值设为</span><strong>transportsession</strong><span style="font-family: 宋体">。</span></p>
<p style="text-indent: 21.75pt">3.&nbsp;<span style="font-family: 宋体">在客户端使用</span>setManageSession(true)<span style="font-family: 宋体">打开</span>Session<span style="font-family: 宋体">管理功能。</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">下面是一个在同一个</span>WebService<span style="font-family: 宋体">类中管理</span>Session<span style="font-family: 宋体">的例子。</span><br />
<br />
先建立一个WebService类，代码如下：<br />
</p>
<span style="font-size: 10.5pt; font-family: 'Times New Roman'"><br />
</span>
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;service;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.context.ServiceContext;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.axis2.context.MessageContext;<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;LoginService<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;login(String&nbsp;username,&nbsp;String&nbsp;password)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">"</span><span style="color: #000000">bill</span><span style="color: #000000">"</span><span style="color: #000000">.equals(username)&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1234</span><span style="color: #000000">"</span><span style="color: #000000">.equals(password))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;第1步：设置key-value对</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageContext&nbsp;mc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MessageContext.getCurrentMessageContext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServiceContext&nbsp;sc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mc.getServiceContext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc.setProperty(</span><span style="color: #000000">"</span><span style="color: #000000">login</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">成功登录</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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">false</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getLoginMsg()<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;第1步：获得key-value对中的value</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageContext&nbsp;mc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MessageContext.getCurrentMessageContext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServiceContext&nbsp;sc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mc.getServiceContext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(String)sc.getProperty(</span><span style="color: #000000">"</span><span style="color: #000000">login</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">在</span>LoginService<span style="font-family: 宋体">类中有两个方法：</span>login<span style="font-family: 宋体">和</span>getLoginMsg<span style="font-family: 宋体">，如果</span>login<span style="font-family: 宋体">方法登录成功，会将&#8220;成功登录&#8221;字符串保存在</span>ServiceContext<span style="font-family: 宋体">对象中。如果在</span>login<span style="font-family: 宋体">方法返回</span>true<span style="font-family: 宋体">后调用</span>getLoginMsg<span style="font-family: 宋体">方法，就会返回&#8220;成功登录&#8221;。</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">下面是</span>LoginService<span style="font-family: 宋体">类的配置代码（</span>services.xml<span style="font-family: 宋体">）：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;第2步：添加scope属性&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="loginService"</span><span style="color: #ff0000">&nbsp;scope</span><span style="color: #0000ff">="transportsession"</span><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">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;登录服务<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><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">parameter&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ServiceClass"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.LoginService<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">parameter</span><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">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">mep</span><span style="color: #0000ff">="http://www.w3.org/2004/08/wsdl/in-out"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><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">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">service</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<p style="text-indent: 21.75pt">
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
</p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">使用如下的命令生成客户端使用的</span>stub<span style="font-family: 宋体">类：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">%AXIS2_HOME%\bin\wsdl2java&nbsp;-uri&nbsp;http://localhost:</span><span style="color: #000000">8080</span><span style="color: #000000">/axis2/services/loginService?wsdl&nbsp;-p&nbsp;client&nbsp;-s&nbsp;-o&nbsp;stub</span></div>
<p style="text-indent: 21.75pt">
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
</p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">在</span>stub\src\client<span style="font-family: 宋体">目录中生成了一个</span>LoginServiceStub.java<span style="font-family: 宋体">类，在该类中找到如下的构造句方法：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;LoginServiceStub(org.apache.axis2.context.ConfigurationContext&nbsp;configurationContext,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.lang.String&nbsp;targetEndpoint,&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;useSeparateListener)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;org.apache.axis2.AxisFault&nbsp;<br />
{<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 />
&nbsp;&nbsp;&nbsp; _serviceClient.getOptions().setSoapVersionURI(<br />
&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.axiom.soap.SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);<br />
}<br />
</span></div>
<p style="text-indent: 21.75pt"></p>
<p style="text-indent: 21.75pt">
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
<span style="font-family: 宋体">在该方法中最后添加如下的代码：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;第3步：打开客户端的Session管理功能</span><span style="color: #008000"><br />
</span><span style="color: #000000">_serviceClient.getOptions().setManageSession(</span><span style="color: #0000ff">true</span><span style="color: #000000">);</span></div>
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">下面的客户端代码使用</span>LoginServiceStub<span style="font-family: 宋体">对象访问了刚才建立的</span>WebService<span style="font-family: 宋体">：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">LoginServiceStub&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;LoginServiceStub();<br />
LoginServiceStub.Login&nbsp;login&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LoginServiceStub.Login();<br />
login.setUsername(</span><span style="color: #000000">"</span><span style="color: #000000">bill</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
login.setPassword(</span><span style="color: #000000">"</span><span style="color: #000000">1234</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #0000ff">if</span><span style="color: #000000">(stub.login(login).local_return)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(stub.getLoginMsg().local_return);<br />
}<br />
</span></div>
<p style="text-indent: 21.75pt">
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
</p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">运行上面的代码后，会输出&#8220;成功登录&#8221;信息。<br />
转自：<a href="http://www.blogjava.net/nokiaguy/archive/2009/01/26/252564.html">http://www.blogjava.net/nokiaguy/archive/2009/01/26/252564.html</a><br />
</span></p>
<img src ="http://www.blogjava.net/conans/aggbug/252821.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-02-01 09:48 <a href="http://www.blogjava.net/conans/articles/252821.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService大讲堂之Axis2(4)：二进制文件传输 </title><link>http://www.blogjava.net/conans/articles/252355.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Thu, 22 Jan 2009 07:43:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/252355.html</guid><description><![CDATA[在《<a id="viewpost1_TitleUrl" href="http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/01/04/249805.html">WebService大讲堂之Axis2（2）：复合类型数据的传递</a><span style="font-family: 宋体">》中讲过，如果要传递二进制文件（如图像、音频文件等），可以使用</span>byte[]<span style="font-family: 宋体">作为数据类型进行传递，然后客户端使用</span>RPC<span style="font-family: 宋体">方式进行调用。这样做只是其中的一种方法，除此之外，在客户端还可以使用</span>wsdl2java<span style="font-family: 宋体">命令生成相应的</span>stub<span style="font-family: 宋体">类来调用</span>WebService<span style="font-family: 宋体">，</span>wsdl2java<span style="font-family: 宋体">命令的用法详见《</span><a id="viewpost1_TitleUrl" href="http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/01/02/249556.html">WebService大讲堂之Axis2（1）：用POJO实现0配置的WebService</a><span style="font-family: 宋体">》。</span><br />
&nbsp;&nbsp;&nbsp; WebService<span style="font-family: 宋体">类中包含</span>byte[]<span style="font-family: 宋体">类型参数的方法在</span>wsdl2java<span style="font-family: 宋体">生成的</span>stub<span style="font-family: 宋体">类中对应的数据类型不再是</span>byte[]<span style="font-family: 宋体">类型，而是</span>javax.activation.DataHandler<span style="font-family: 宋体">。</span>DataHandler<span style="font-family: 宋体">类是专门用来映射</span>WebService<span style="font-family: 宋体">二进制类型的。<br />
&nbsp;&nbsp;&nbsp; 在</span>WebService<span style="font-family: 宋体">类中除了可以使用</span>byte[]<span style="font-family: 宋体">作为传输二进制的数据类型外，也可以使用</span>javax.activation.DataHandler<span style="font-family: 宋体">作为数据类型。</span> <span style="font-family: 宋体">不管是使用</span>byte[]<span style="font-family: 宋体">，还是使用</span>javax.activation.DataHandler<span style="font-family: 宋体">作为</span>WebService<span style="font-family: 宋体">方法的数据类型，使用</span>wsdl2java<span style="font-family: 宋体">命令生成的</span>stub<span style="font-family: 宋体">类中相应方法的类型都是</span>javax.activation.DataHandler<span style="font-family: 宋体">。而象使用</span>.net<span style="font-family: 宋体">、</span>delphi<span style="font-family: 宋体">生成的</span>stub<span style="font-family: 宋体">类的相应方法类型都是</span>byte[]<span style="font-family: 宋体">。这是由于</span>javax.activation.DataHandler<span style="font-family: 宋体">类是</span>Java<span style="font-family: 宋体">特有的，对于其他语言和技术来说，并不认识</span>javax.activation.DataHandler<span style="font-family: 宋体">类，因此，也只有使用最原始的</span>byte[]<span style="font-family: 宋体">了。<br />
&nbsp;&nbsp;&nbsp; 下面是一个上传二进制文件的例子，</span>WebService<span style="font-family: 宋体">类的代码如下：<br />
<br />
</span>
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;service;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.InputStream;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.OutputStream;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.FileOutputStream;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.activation.DataHandler;<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;FileService<br />
{<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;使用byte[]类型参数上传二进制文件</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;uploadWithByte(</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;file,&nbsp;String&nbsp;filename)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;fos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileOutputStream(filename);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos.write(file);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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">false</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">finally</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(fos&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&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">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;writeInputStreamToFile(InputStream&nbsp;is,&nbsp;OutputStream&nbsp;os)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;buffer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[</span><span style="color: #000000">8192</span><span style="color: #000000">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">((n&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;is.read(buffer))&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.write(buffer,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;n);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;使用DataHandler类型参数上传文件</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;uploadWithDataHandler(DataHandler&nbsp;file,&nbsp;String&nbsp;filename)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;fos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileOutputStream(filename);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;可通过DataHandler类的getInputStream方法读取上传数据</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writeInputStreamToFile(file.getInputStream(),&nbsp;fos);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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">false</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">finally</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(fos&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&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">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<p style="text-indent: 21pt"></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">上面代码在</span>services.xml<span style="font-family: 宋体">文件的配置代码如下：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="fileService"</span><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">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件服务<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><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">parameter&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ServiceClass"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.FileService&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">parameter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">mep</span><span style="color: #0000ff">="http://www.w3.org/2004/08/wsdl/in-out"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><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">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">service</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<p style="text-indent: 21pt"><span style="font-size: 10.5pt; font-family: 宋体"><br />
&nbsp;&nbsp;&nbsp; 如果使用</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'">wsdl2java</span><span style="font-size: 10.5pt; font-family: 宋体">命令生成调用</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'">Java</span><span style="font-size: 10.5pt; font-family: 宋体">客户端代码，则需要创建</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'">DataHandler</span><span style="font-size: 10.5pt; font-family: 宋体">类的对象实例，代码如下：<br />
<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">DataHandler&nbsp;dh&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DataHandler(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileDataSource(imagePath));</span></div>
<p style="text-indent: 21pt"></p>
<p style="text-indent: 21pt">wsdl2java<span style="font-family: 宋体">命令会为每一个方法生成一个封装方法参数的类，类名为方法名（第一个字符大写），如</span>uploadWithByte<span style="font-family: 宋体">方法生成的类名为</span>UploadWithByte<span style="font-family: 宋体">。如果要设置</span>file<span style="font-family: 宋体">参数的值，可以使用</span>UploadWithByte<span style="font-family: 宋体">类的</span>setFile<span style="font-family: 宋体">方法，代码如下：</span></p>
<br />
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">UploadWithByte&nbsp;uwb&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;UPloadWithByte();<br />
uwb.setFile(dh);<br />
</span></div>
<br />
<p style="text-indent: 21pt"><span style="font-family: 宋体">最后是调用</span>uploadWithByte<span style="font-family: 宋体">方法，代码如下（</span>FileServiceStub<span style="font-family: 宋体">为</span>wsdl2java<span style="font-family: 宋体">生成的</span>stub<span style="font-family: 宋体">类名）：</span></p>
<br />
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">FileServiceStub&nbsp;fss&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileServiceStub();<br />
fss.uploadWithByte(uwb);<br />
</span></div>
<p style="text-indent: 21pt"></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">如果使用</span>C#<span style="font-family: 宋体">调用</span>FileService<span style="font-family: 宋体">，则</span>file<span style="font-family: 宋体">参数类型均为</span>byte[]<span style="font-family: 宋体">，代码如下：</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">MemoryStream&nbsp;ms&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MemoryStream();<br />
Bitmap&nbsp;bitmap&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Bitmap(picUpdateImage.Image);<br />
bitmap.Save(ms,&nbsp;System.Drawing.Imaging.ImageFormat.Jpeg);<br />
service.fileService&nbsp;fs&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.service.fileService();<br />
fs.uploadWithDataHandler(ms.ToArray());<br />
fs.uploadWithByte(ms.ToArray());</span>&nbsp;</div>
<p style="text-indent: 21pt"><span style="font-family: 宋体">其中</span>picUpdateImage<span style="font-family: 宋体">为</span>c#<span style="font-family: 宋体">中加载图像文件的</span>picturebox<span style="font-family: 宋体">控件。<br />
<br />
转自：http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/01/22/252305.html</span></p>
<img src ="http://www.blogjava.net/conans/aggbug/252355.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-01-22 15:43 <a href="http://www.blogjava.net/conans/articles/252355.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService大讲堂之Axis2(3)：使用services.xml文件发布WebService </title><link>http://www.blogjava.net/conans/articles/252354.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Thu, 22 Jan 2009 07:42:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/252354.html</guid><description><![CDATA[用Axis2<span style="font-family: 宋体">实现</span>Web Service<span style="font-family: 宋体">，虽然可以将</span>POJO<span style="font-family: 宋体">类放在</span>axis2\WEB-INF\pojo<span style="font-family: 宋体">目录中直接发布成</span>Web Service<span style="font-family: 宋体">，这样做不需要进行任何配置，但这些</span>POJO<span style="font-family: 宋体">类不能在任何包中。这似乎有些不方便，为此，</span>Axis2<span style="font-family: 宋体">也允许将带包的</span>POJO<span style="font-family: 宋体">类发布成</span>Web Service<span style="font-family: 宋体">。<br />
&nbsp;&nbsp;&nbsp; 先实现一个</span>POJO<span style="font-family: 宋体">类，代码如下：<br />
</span>
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;service;<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;MyService<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;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;update(String&nbsp;data)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;data&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&gt;已经更新</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<p style="text-indent: 21.75pt"></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">这个类有两个方法，这两个方法都需要发布成</span>Web Service<span style="font-family: 宋体">方法。这种方式和直接放在</span>pojo<span style="font-family: 宋体">目录中的</span>POJO<span style="font-family: 宋体">类不同。要想将</span>MyService<span style="font-family: 宋体">类发布成</span>Web Service<span style="font-family: 宋体">，需要一个</span>services.xml<span style="font-family: 宋体">文件，这个文件需要放在</span>META-INF<span style="font-family: 宋体">目录中，该文件的内容如下：</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="myService"</span><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">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Web&nbsp;Service例子<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><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">parameter&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ServiceClass"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.MyService&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">parameter</span><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">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">mep</span><span style="color: #0000ff">="http://www.w3.org/2004/08/wsdl/in-out"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">mep</span><span style="color: #0000ff">="http://www.w3.org/2004/08/wsdl/in-only"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><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">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">service</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<p style="text-indent: 21.75pt"></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">其中</span>&lt;service&gt;<span style="font-family: 宋体">元素用于发布</span>Web Service<span style="font-family: 宋体">，一个</span>&lt;service&gt;<span style="font-family: 宋体">元素只能发布一个</span>WebService<span style="font-family: 宋体">类，</span>name<span style="font-family: 宋体">属性表示</span>WebService<span style="font-family: 宋体">名，如下面的</span>URL<span style="font-family: 宋体">可以获得这个</span>WebService<span style="font-family: 宋体">的</span>WSDL<span style="font-family: 宋体">内容：<br />
<br />
</span></p>
<a href="http://localhost:8080/axis2/services/myService?wsdl">http://localhost:8080/axis2/services/myService?wsdl</a> <br />
<br />
<p style="margin-left: 21pt; text-indent: 0.75pt"><span style="font-family: 宋体">其中</span>name<span style="font-family: 宋体">属性名就是上面</span>URL<span style="font-family: 宋体">中</span>"?"<span style="font-family: 宋体">和</span>"/"<span style="font-family: 宋体">之间的部分。</span></p>
<p style="text-indent: 21.75pt">&lt;description&gt;<span style="font-family: 宋体">元素表示当前</span>Web Service<span style="font-family: 宋体">的描述，</span>&lt;parameter&gt;<span style="font-family: 宋体">元素用于设置</span>WebService<span style="font-family: 宋体">的参数，在这里用于设置</span>WebService<span style="font-family: 宋体">对应的类名。在这里最值得注意的是</span>&lt;messageReceivers&gt;<span style="font-family: 宋体">元素，该元素用于设置处理</span>WebService<span style="font-family: 宋体">方法的处理器。例如，</span>getGreeting<span style="font-family: 宋体">方法有一个返回值，因此，需要使用可处理输入输出的</span>RPCMessageReceiver<span style="font-family: 宋体">类，而</span>update<span style="font-family: 宋体">方法没有返回值，因此，需要使用只能处理输入的</span>RPCInOnlyMessageReceiver<span style="font-family: 宋体">类。</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">使用这种方式发布</span>WebService<span style="font-family: 宋体">，必须打包成</span>.aar<span style="font-family: 宋体">文件，</span>..aar<span style="font-family: 宋体">文件实际上就是改变了扩展名的</span>.jar<span style="font-family: 宋体">文件。在现在建立了两个文件：</span>MyService.java<span style="font-family: 宋体">和</span>services.xml<span style="font-family: 宋体">。将</span>MyService.java<span style="font-family: 宋体">编译，生成</span>MyService.class<span style="font-family: 宋体">。</span>services.xml<span style="font-family: 宋体">和</span>MyService.class<span style="font-family: 宋体">文件的位置如下：</span></p>
<p style="margin-left: 21pt; text-indent: 0.75pt"><span>D:\ws\service\MyService.class</span></p>
<p style="text-indent: 21.75pt"><span>D:\ws\META-INF\services.xml<br />
<br />
&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">在</span>windows<span style="font-family: 宋体">控制台中进入</span>ws<span style="font-family: 宋体">目录，并输入如下的命令生成</span>.aar<span style="font-family: 宋体">文件（实际上，.jar文件也可以发布webservice，但axis2官方文档中建议使用.aar文件发布webservice）：</span><span><br />
</span></p>
<p style="text-indent: 21.75pt"><span>jar cvf ws.aar .<br />
<br />
&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">最后将</span>ws.aar<span style="font-family: 宋体">文件复制到</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2\WEB-INF\services<span style="font-family: 宋体">目录中，启动</span>Tomcat<span style="font-family: 宋体">后，就可以调用这个</span>WebService<span style="font-family: 宋体">了。调用的方法和</span><a id="viewpost1_TitleUrl" href="http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/01/02/249556.html">《WebService大讲堂之Axis2（1）：用POJO实现0配置的WebService》</a><span style="font-family: 宋体">所讲的方法类似。</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">另外</span>services.xml<span style="font-family: 宋体">文件中也可以直接指定</span>WebService<span style="font-family: 宋体">类的方法，如可以用下面的配置代码来发布</span>WebService<span style="font-family: 宋体">：</span></p>
<br />
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="myService"</span><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">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Web&nbsp;Service例子<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><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">parameter&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ServiceClass"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.MyService&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">parameter</span><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">operation&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="getGreeting"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><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">operation</span><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">operation&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="update"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><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">operation</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">service</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<br />
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">上面的配置代码前面的部分和以前的</span>services.xml<span style="font-family: 宋体">文件的内容相同，但后面使用了</span>&lt;operation&gt;<span style="font-family: 宋体">元素来指定每一个</span>WebService<span style="font-family: 宋体">方法，并单独指定了处理每一个方法的处理器。对于客户端来说，调用使用这两个</span>services.xml<span style="font-family: 宋体">文件发布的</span>WebService<span style="font-family: 宋体">并没有太大我区别，只是使用第二个</span>services.xml<span style="font-family: 宋体">文件发布</span>WebServices<span style="font-family: 宋体">后，在使用</span>wsdl2java<span style="font-family: 宋体">命令或使用</span>C#<span style="font-family: 宋体">、</span>delphi<span style="font-family: 宋体">等生成客户端的</span>stub<span style="font-family: 宋体">时，</span>update<span style="font-family: 宋体">方法的</span>String<span style="font-family: 宋体">类型被封装在了</span>update<span style="font-family: 宋体">类中，在传递</span>update<span style="font-family: 宋体">方法的参数时需要建立</span>update<span style="font-family: 宋体">类的对象实例。而使用第一个</span>services.xml<span style="font-family: 宋体">文件发布的</span>WebService<span style="font-family: 宋体">在生成</span>stub<span style="font-family: 宋体">时直接可以为</span>update<span style="font-family: 宋体">方法传递</span>String<span style="font-family: 宋体">类型的参数。从这一点可以看出，这两种方法生成的</span>WSDL<span style="font-family: 宋体">有一定的区别。但实际上，如果客户端程序使用第一个</span>services.xml<span style="font-family: 宋体">文件发布的</span>WebService<span style="font-family: 宋体">生成</span>stub<span style="font-family: 宋体">类时（这时</span>update<span style="font-family: 宋体">方法的参数是</span>String<span style="font-family: 宋体">），在服务端又改为第二个</span>services.xml<span style="font-family: 宋体">文件来发布</span>WebService<span style="font-family: 宋体">，这时客户端并不需要再重新生成</span>stub<span style="font-family: 宋体">类，而可以直接调用</span>update<span style="font-family: 宋体">方法。也就是说，服务端使用什么样的方式发布</span>WebService<span style="font-family: 宋体">，对客户端并没有影响。</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">如果想发布多个</span>WebService<span style="font-family: 宋体">，可以使用</span>&lt;serviceGroup&gt;<span style="font-family: 宋体">元素，如再建立一个</span>MyService1<span style="font-family: 宋体">类，代码如下：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;service<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;MyService1<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getName()&nbsp;&nbsp;<br />
&nbsp;&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">bill</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<p style="text-indent: 21.75pt"></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">在</span>services.xml<span style="font-family: 宋体">文件中可以使用如下的配置代码来配置</span>MyService<span style="font-family: 宋体">和</span>MyService1<span style="font-family: 宋体">类：</span></p>
<br />
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">serviceGroup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; &lt;</span><span style="color: #800000">service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="myService"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; Web&nbsp;Service例子<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">parameter&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ServiceClass"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; service.MyService&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">parameter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">mep</span><span style="color: #0000ff">="http://www.w3.org/2004/08/wsdl/in-out"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">mep</span><span style="color: #0000ff">="http://www.w3.org/2004/08/wsdl/in-only"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; &lt;/</span><span style="color: #800000">service</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; &lt;</span><span style="color: #800000">service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="myService1"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; Web&nbsp;Service例子<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">parameter&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ServiceClass"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; service.MyService1&nbsp;&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">parameter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">mep</span><span style="color: #0000ff">="http://www.w3.org/2004/08/wsdl/in-out"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">messageReceiver&nbsp;</span><span style="color: #ff0000">mep</span><span style="color: #0000ff">="http://www.w3.org/2004/08/wsdl/in-only"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; class</span><span style="color: #0000ff">="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">messageReceivers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; &lt;/</span><span style="color: #800000">service</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">serviceGroup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<br />
转自：http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/21/252255.html<br />
<img src ="http://www.blogjava.net/conans/aggbug/252354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-01-22 15:42 <a href="http://www.blogjava.net/conans/articles/252354.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService大讲堂之Axis2（2）：复合类型数据的传递 </title><link>http://www.blogjava.net/conans/articles/252353.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Thu, 22 Jan 2009 07:41:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/252353.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在实际的应用中，不仅需要使用WebService来传递简单类型的数据，有时也需要传递更复杂的数据，这些数据可以被称为复合类型的数据。数组与类（接口）是比较常用的复合类型。在Axis2中可以直接使用将WebService方法的参数或返回值类型声明成数组或类（接口）。但要注意，在定义数组类型时只能使用一维数组，如果想传递多维数组，可以使用分隔符进行分隔，如下面的代码所示：String[] strA...&nbsp;&nbsp;<a href='http://www.blogjava.net/conans/articles/252353.html'>阅读全文</a><img src ="http://www.blogjava.net/conans/aggbug/252353.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-01-22 15:41 <a href="http://www.blogjava.net/conans/articles/252353.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService大讲堂之Axis2（1）：用POJO实现0配置的WebService</title><link>http://www.blogjava.net/conans/articles/252352.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Thu, 22 Jan 2009 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/252352.html</guid><description><![CDATA[Axis2<span style="font-family: 宋体">是一套崭新的</span>WebService<span style="font-family: 宋体">引擎，该版本是对</span>Axis1.x<span style="font-family: 宋体">重新设计的产物。</span>Axis2<span style="font-family: 宋体">不仅支持</span>SOAP1.1<span style="font-family: 宋体">和</span>SOAP1.2<span style="font-family: 宋体">，还集成了非常流行的</span>REST WebService<span style="font-family: 宋体">，同时还支持</span>Spring<span style="font-family: 宋体">、</span>JSON<span style="font-family: 宋体">等技术。这些都将在后面的系列教程中讲解。在本文中主要介绍了如何使用</span>Axis2<span style="font-family: 宋体">开发一个不需要任何配置文件的</span>WebService<span style="font-family: 宋体">，并在客户端使用</span>Java<span style="font-family: 宋体">和</span>C#<span style="font-family: 宋体">调用这个</span>WebService<span style="font-family: 宋体">。</span>
<p><strong><span style="font-family: 宋体">一、</span>Axis2</strong><strong><span style="font-family: 宋体">的下载和安装</span></strong></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">读者可以从如下的网址下载</span>Axis2<span style="font-family: 宋体">的最新版本：</span></p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://ws.apache.org/axis2/">http://ws.apache.org/axis2/</a><br />
</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在本文使用了目前</span>Axis2<span style="font-family: 宋体">的最新版本</span>1.4.1<span style="font-family: 宋体">。读者可以下载如下两个</span>zip<span style="font-family: 宋体">包：</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 style="font-family: 宋体">其中</span>axis2-1.4.1-bin.zip<span style="font-family: 宋体">文件中包含了</span>Axis2<span style="font-family: 宋体">中所有的</span>jar<span style="font-family: 宋体">文件</span>, axis2-1.4.1-war.zip<span style="font-family: 宋体">文件用于将</span>WebService<span style="font-family: 宋体">发布到</span>Web<span style="font-family: 宋体">容器中。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">将</span>axis2-1.4.1-war.zip<span style="font-family: 宋体">文件解压到相应的目录，将目录中的</span>axis2.war<span style="font-family: 宋体">文件放到</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps<span style="font-family: 宋体">目录中（本文使用的</span>Tomcat<span style="font-family: 宋体">的版本是</span>6.x<span style="font-family: 宋体">），并启动</span>Tomcat<span style="font-family: 宋体">。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在浏览器地址栏中输入如下的</span>URL<span style="font-family: 宋体">：</span></p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://localhost:8080/axis2/">http://localhost:8080/axis2/</a><br />
</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">如果在浏览器中显示出如图</span>1<span style="font-family: 宋体">所示的页面，则表示</span>Axis2<span style="font-family: 宋体">安装成功。<br />
</span></p>
<div align="center"><img height="410" alt="" src="http://www.blogjava.net/images/blogjava_net/nokiaguy/axis2_1/01.jpg" width="708" /><br />
<br />
图1<br />
</div>
<p>
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
<strong><span style="font-family: 宋体">二、编写和发布WebService</span></strong></p>
<p>&nbsp;&nbsp;<span style="font-family: 宋体">对于用</span>Java<span style="font-family: 宋体">实现的服务程序给人的印象就是需要进行大量的配置，不过这一点在</span>Axis2<span style="font-family: 宋体">中将被终结。在</span>Axis2<span style="font-family: 宋体">中不需要进行任何的配置，就可以直接将一个简单的</span>POJO<span style="font-family: 宋体">发布成</span>WebService<span style="font-family: 宋体">。其中</span>POJO<span style="font-family: 宋体">中所有的</span>public<span style="font-family: 宋体">方法将被发布成</span>WebService<span style="font-family: 宋体">方法。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">下面我们来实现一个简单的</span>POJO<span style="font-family: 宋体">，代码如下：</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><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>
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C02%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在</span>SimpleService<span style="font-family: 宋体">类中有两个方法，由于这两个方法都是</span>public<span style="font-family: 宋体">方法，因此，它们都将作为</span>WebService<span style="font-family: 宋体">方法被发布。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">编译</span>SimpleService<span style="font-family: 宋体">类后，将</span>SimpleService.class<span style="font-family: 宋体">文件放到</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2\WEB-INF\pojo<span style="font-family: 宋体">目录中（如果没有</span>pojo<span style="font-family: 宋体">目录，则建立该目录）。现在我们已经成功将</span>SimpleService<span style="font-family: 宋体">类发布成了</span>WebService<span style="font-family: 宋体">。在浏览器地址栏中输入如下的</span>URL<span style="font-family: 宋体">：</span></p>
<p><a href="http://localhost:8080/axis2/services/listServices">http://localhost:8080/axis2/services/listServices</a><br />
</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">这时当前页面将显示所有在</span>Axis2<span style="font-family: 宋体">中发布的</span>WebService<span style="font-family: 宋体">，如图</span>2<span style="font-family: 宋体">所示。<br />
<div align="center"><img height="400" alt="" src="http://www.blogjava.net/images/blogjava_net/nokiaguy/axis2_1/02.jpg" width="691" /><br />
<span style="font-family: 宋体"><br />
图2</span><br />
</div>
</span>
<p>&nbsp;</p>
<p>
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在浏览器地址栏中输入如下的两个</span>URL<span style="font-family: 宋体">来分别测试</span>getGreeting<span style="font-family: 宋体">和</span>getPrice<span style="font-family: 宋体">方法：</span></p>
<p><a href="http://localhost:8080/axis2/services/SimpleService/getGreeting?name=bill">http://localhost:8080/axis2/services/SimpleService/getGreeting?name=bill</a><br />
</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 style="font-family: 宋体">图</span>3<span style="font-family: 宋体">和图</span>4<span style="font-family: 宋体">分别显示了</span>getGreeting<span style="font-family: 宋体">和</span>getPrice<span style="font-family: 宋体">方法的测试结果。<br />
<div align="center"><img height="391" alt="" src="http://www.blogjava.net/images/blogjava_net/nokiaguy/axis2_1/03.jpg" width="523" /></div>
</span>
<p>&nbsp;</p>
<p align="center"><span style="font-family: 宋体">图3&nbsp; getGreeting方法的测试结果</span></p>
<p><span style="font-family: 宋体">
<div align="center"><img alt="" src="http://www.blogjava.net/images/blogjava_net/nokiaguy/axis2_1/04.jpg" /></div>
</span>
<p>&nbsp;</p>
<p align="center"><span style="font-family: 宋体">图4&nbsp; getPrice方法的测试结果</span></p>
<p>
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C06%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在编写、发布和测试</span>0<span style="font-family: 宋体">配置的</span>WebService<span style="font-family: 宋体">时应注意如下几点：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>1.&nbsp;POJO</span><span style="font-family: 宋体">类不能使用</span>package<span style="font-family: 宋体">关键字声明包。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>2.&nbsp;Axis2</span><span style="font-family: 宋体">在默认情况下可以热发布</span>WebService<span style="font-family: 宋体">，也就是说，将</span>WebService<span style="font-family: 宋体">的</span>.class<span style="font-family: 宋体">文件复制到</span>pojo<span style="font-family: 宋体">目录中时，</span>Tomcat<span style="font-family: 宋体">不需要重新启动就可以自动发布</span>WebService<span style="font-family: 宋体">。如果想取消</span>Axis2<span style="font-family: 宋体">的热发布功能，可以打开</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;\webapps\axis2\WEB-INF\conf\axis2.xml<span style="font-family: 宋体">，找到如下的配置代码：</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><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 style="font-family: 宋体">将</span>true<span style="font-family: 宋体">改为</span>false<span style="font-family: 宋体">即可。要注意的是，</span>Axis2<span style="font-family: 宋体">在默认情况下虽然是热发布，但并不是热更新，也就是说，一旦成功发布了</span>WebService<span style="font-family: 宋体">，再想更新该</span>WebService<span style="font-family: 宋体">，就必须重启</span>Tomcat<span style="font-family: 宋体">。这对于开发人员调试</span>WebService<span style="font-family: 宋体">非常不方便，因此，在开发</span>WebService<span style="font-family: 宋体">时，可以将</span>Axis2<span style="font-family: 宋体">设为热更新。在</span>axis2.xml<span style="font-family: 宋体">文件中找到</span><span>&lt;parameter name="hotupdate"&gt;false&lt;/parameter&gt;</span><span style="font-family: 宋体">，将</span>false<span style="font-family: 宋体">改为</span>true<span style="font-family: 宋体">即可。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>3.&nbsp;</span><span style="font-family: 宋体">在浏览器中测试</span>WebService<span style="font-family: 宋体">时，如果</span>WebService<span style="font-family: 宋体">方法有参数，需要使用</span>URL<span style="font-family: 宋体">的请求参数来指定该</span>WebService<span style="font-family: 宋体">方法参数的值，请求参数名与方法参数名要一致，例如，要测试</span>getGreeting<span style="font-family: 宋体">方法，请求参数名应为</span>name<span style="font-family: 宋体">，如上面的</span>URL<span style="font-family: 宋体">所示。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>4.&nbsp;</span><span style="font-family: 宋体">发布</span>WebService<span style="font-family: 宋体">的</span>pojo<span style="font-family: 宋体">目录只是默认的，如果读者想在其他的目录发布</span>WebService<span style="font-family: 宋体">，可以打开</span>axis2.xml<span style="font-family: 宋体">文件，并在</span>&lt;axisconfig&gt;<span style="font-family: 宋体">元素中添加如下的子元素：</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&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 style="font-family: 宋体">上面的配置允许在</span>&lt;Tomcat<span style="font-family: 宋体">安装目录</span>&gt;"webapps"axis2"WEB-INF"my<span style="font-family: 宋体">目录中发布</span>WebService<span style="font-family: 宋体">。例如，将本例中的</span>SimpleService.class<span style="font-family: 宋体">复制到</span>my<span style="font-family: 宋体">目录中也可以成功发布（但要删除</span>pojo<span style="font-family: 宋体">目录中的</span>SimpleService.class<span style="font-family: 宋体">，否则</span>WebService<span style="font-family: 宋体">会重名）。</span></p>
<p>
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C08%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
</p>
<p><strong><span style="font-family: 宋体">三、</span> </strong><strong><span style="font-family: 宋体">用</span>Java</strong><strong><span style="font-family: 宋体">实现调用</span>WebService</strong><strong><span style="font-family: 宋体">的客户端程序</span></strong></p>
<p>&nbsp;&nbsp;&nbsp; WebService<span style="font-family: 宋体">是为程序服务的，只在浏览器中访问</span>WebService<span style="font-family: 宋体">是没有意义的。因此，在本节使用</span>Java<span style="font-family: 宋体">实现了一个控制台程序来调用上一节发布的</span>WebService<span style="font-family: 宋体">。调用</span>WebService<span style="font-family: 宋体">的客户端代码如下：</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><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>
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
--> </style>
<span style="font-family: 宋体">运行上面的程序后，将在控制台输出如下的信息：</span></p>
<br />
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">你好&nbsp;超人<br />
443</span></div>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在编写客户端代码时应注意如下几点：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>1.&nbsp;</span><span style="font-family: 宋体">客户端代码需要引用很多</span>Axis2<span style="font-family: 宋体">的</span>jar<span style="font-family: 宋体">包，如果读者不太清楚要引用哪个</span>jar<span style="font-family: 宋体">包，可以在</span>Eclipse<span style="font-family: 宋体">的工程中引用</span>Axis2<span style="font-family: 宋体">发行包的</span>lib<span style="font-family: 宋体">目录中的所有</span>jar<span style="font-family: 宋体">包。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>2.&nbsp;</span><span style="font-family: 宋体">在本例中使用了</span>RPCServiceClient<span style="font-family: 宋体">类的</span>invokeBlocking<span style="font-family: 宋体">方法调用了</span>WebService<span style="font-family: 宋体">中的方法。</span>invokeBlocking<span style="font-family: 宋体">方法有三个参数，其中第一个参数的类型是</span>QName<span style="font-family: 宋体">对象，表示要调用的方法名；第二个参数表示要调用的</span>WebService<span style="font-family: 宋体">方法的参数值，参数类型为</span>Object[]<span style="font-family: 宋体">；第三个参数表示</span>WebService<span style="font-family: 宋体">方法的返回值类型的</span>Class<span style="font-family: 宋体">对象，参数类型为</span>Class[]<span style="font-family: 宋体">。当方法没有参数时，</span>invokeBlocking<span style="font-family: 宋体">方法的第二个参数值不能是</span>null<span style="font-family: 宋体">，而要使用</span>new Object[]{}<span style="font-family: 宋体">。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>3.&nbsp;</span><span style="font-family: 宋体">如果被调用的</span>WebService<span style="font-family: 宋体">方法没有返回值，应使用</span>RPCServiceClient<span style="font-family: 宋体">类的</span>invokeRobust<span style="font-family: 宋体">方法，该方法只有两个参数，它们的含义与</span>invokeBlocking<span style="font-family: 宋体">方法的前两个参数的含义相同。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>4.&nbsp;</span><span style="font-family: 宋体">在创建</span>QName<span style="font-family: 宋体">对象时，</span>QName<span style="font-family: 宋体">类的构造方法的第一个参数表示</span>WSDL<span style="font-family: 宋体">文件的命名空间名，也就是</span>&lt;wsdl:definitions&gt;<span style="font-family: 宋体">元素的</span>targetNamespace<span style="font-family: 宋体">属性值，下面是</span>SimpleService<span style="font-family: 宋体">类生成的</span>WSDL<span style="font-family: 宋体">文件的代码片段：<br />
<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><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>
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C14%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
</p>
<p><strong><span style="font-family: 宋体">四、用</span>wsdl2java</strong><strong><span style="font-family: 宋体">简化客户端的编写</span></strong></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">也许有很多读者会说&#8220;有没有搞错啊，只调用两个</span>WebService<span style="font-family: 宋体">方法用要写这么多代码，太麻烦了&#8221;。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">不过幸好</span>Axis2<span style="font-family: 宋体">提供了一个</span>wsdl2java.bat<span style="font-family: 宋体">命令可以根据</span>WSDL<span style="font-family: 宋体">文件自动产生调用</span>WebService<span style="font-family: 宋体">的代码。</span>wsdl2java.bat<span style="font-family: 宋体">命令可以在</span>&lt;Axis2<span style="font-family: 宋体">安装目录</span>&gt;"bin<span style="font-family: 宋体">目录中找到。在使用</span>wsdl2java.bat<span style="font-family: 宋体">命令之前需要设置</span>AXIS2_HOME<span style="font-family: 宋体">环境变量，该变量值是</span>&lt;Axis2<span style="font-family: 宋体">安装目录</span>&gt;<span style="font-family: 宋体">。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在</span>Windows<span style="font-family: 宋体">控制台输出如下的命令行来生成调用</span>WebService<span style="font-family: 宋体">的代码：</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 style="font-family: 宋体">其中</span>-url<span style="font-family: 宋体">参数指定了</span>wsdl<span style="font-family: 宋体">文件的路径，可以是本地路径，也可以是网络路径。</span>-p<span style="font-family: 宋体">参数指定了生成的</span>Java<span style="font-family: 宋体">类的包名，</span>-o<span style="font-family: 宋体">参数指定了生成的一系列文件保存的根目录。在执行完上面的命令后，读者就会发现在当前目录下多了个</span>stub<span style="font-family: 宋体">目录，在</span>."stub"src"client<span style="font-family: 宋体">目录可以找到一个</span>SimpleServiceStub.java<span style="font-family: 宋体">文件，该文件复杂调用</span>WebService<span style="font-family: 宋体">，读者可以在程序中直接使用这个类，代码如下：<br />
</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><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>
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C16%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">上面的代码大大简化了调用</span>WebService<span style="font-family: 宋体">的步骤，并使代码更加简洁。但要注意的是，</span>wsdl2java.bat<span style="font-family: 宋体">命令生成的</span>Stub<span style="font-family: 宋体">类将</span>WebService<span style="font-family: 宋体">方法的参数都封装在了相应的类中，类名为方法名，例如，</span>getGreeting<span style="font-family: 宋体">方法的参数都封装在了</span>GetGreeting<span style="font-family: 宋体">类中，要想调用</span>getGreeting<span style="font-family: 宋体">方法，必须先创建</span>GetGreeting<span style="font-family: 宋体">类的对象实例。</span></p>
<p><strong><span style="font-family: 宋体">五、使用</span>C#</strong><strong><span style="font-family: 宋体">调用</span>WebService</strong></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">从理论上说，</span>WebService<span style="font-family: 宋体">可以被任何支持</span>SOAP<span style="font-family: 宋体">协议的语言调用。在</span>Visual Studio<span style="font-family: 宋体">中使用</span>C#<span style="font-family: 宋体">调用</span>WebService<span style="font-family: 宋体">是在所有语言中最容易实现的（</span>VB.net<span style="font-family: 宋体">的调用方法类似，也同样很简单）。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">新建一个</span>Visual Studio<span style="font-family: 宋体">工程，并在引用</span>Web<span style="font-family: 宋体">服务的对话框中输入如下的</span>URL<span style="font-family: 宋体">，并输入</span>Web<span style="font-family: 宋体">引用名为&#8220;</span>WebService<span style="font-family: 宋体">&#8221;：</span></p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://localhost:8080/axis2/services/SimpleService?wsdl">http://localhost:8080/axis2/services/SimpleService?wsdl</a><br />
</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">然后引用</span>Web<span style="font-family: 宋体">服务的对话框就会显示该</span>WebService<span style="font-family: 宋体">中的所有的方法，如图</span>5<span style="font-family: 宋体">所示。<br />
<div align="center"><img height="463" alt="" src="http://www.blogjava.net/images/blogjava_net/nokiaguy/axis2_1/05.jpg" width="746" /><br />
<br />
图5<br />
</div>
</span>
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C18%5Cclip_filelist.xml" rel="File-List" />
<style>
<!-- /* Font Definitions */
&#64;font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
&#64;font-face
{font-family:""&#64;宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
&#64;page
{}
&#64;page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
-->
</style>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">在完成上面的工作后，只需要如下三行</span>C#<span style="font-family: 宋体">代码就可以调用</span>getGreeting<span style="font-family: 宋体">和</span>getPrice<span style="font-family: 宋体">方法，并显示这两个方法的返回值：</span></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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><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 style="font-family: 宋体">在</span>.net<span style="font-family: 宋体">解析</span>WSDL<span style="font-family: 宋体">文件时直接将</span>getGreeting<span style="font-family: 宋体">方法的参数映射为</span>String<span style="font-family: 宋体">类型，因此，可以直接进行传值。</span><br />
&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">从上面的调用过程可以看出，添加</span>Web<span style="font-family: 宋体">引用的过程就相当于在</span>Java<span style="font-family: 宋体">中调用</span>wsdl2java.bat<span style="font-family: 宋体">自动生成</span>stub<span style="font-family: 宋体">类的过程。只是在调用</span>stub<span style="font-family: 宋体">类时与</span>C#<span style="font-family: 宋体">有一定的区别，但从总体上来说，都大大简化了调用</span>WebService<span style="font-family: 宋体">的过程。<br />
</span><br />
转自：http://www.blogjava.net/nokiaguy/<br />
</p>
<img src ="http://www.blogjava.net/conans/aggbug/252352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-01-22 15:38 <a href="http://www.blogjava.net/conans/articles/252352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService无法连接Oracle</title><link>http://www.blogjava.net/conans/articles/214080.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Thu, 10 Jul 2008 11:17:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/214080.html</guid><description><![CDATA[<p>WebService无法连接Oracle</p>
<p>2008-7-9 cheungmine</p>
<p>1 问题的来源：我在WebService中无法连接Oracle10g </p>
<p>2 解决的办法： &nbsp;&nbsp;&nbsp; 9i: ORACLE_HOME 目录增加用户Authenticated Users (读和运行的权限) 或 &nbsp;&nbsp;&nbsp; 10g: OracleClient10g 目录增加用户Authenticated Users (读和运行的权限) </p>
<p>ORACLE_HOME 是oracle安装的主目录； OracleClient10g是10g客户端安装的主目录。</p>
<p>为目录增加用户的方法是在目录上右击-&gt;属性-&gt;安全-&gt;添加-&gt;（输入对象和名称框里输入Authenticated Users）-&gt;选中允许读和运行。</p>
<p>我采用oradbi库, 用于在WebService和Oracle连接。oradbi库是我写的开放源码的OCI封装库，</p>
<p>旨在对大数据字段BLOB的读写提供更高效的访问，您可以在我的资源中下载。 </p>
<img src ="http://www.blogjava.net/conans/aggbug/214080.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-07-10 19:17 <a href="http://www.blogjava.net/conans/articles/214080.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实战 JDK 6.0 自带web service </title><link>http://www.blogjava.net/conans/articles/213463.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Tue, 08 Jul 2008 15:02:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/213463.html</guid><description><![CDATA[JAVA 6.0 之后，其中JDK自带有个轻量级的web service 服务器。如果你比较细心一定发现在你安装java的路径下，有java webservice 的示例代码。<br />
<br />
&nbsp;&nbsp;&nbsp;我以前也用java开发过web service ，但是当初用了一个apache 下axis 开源项目。如果axis夜进化了，反正我不认识了。不过java自带有何必舍近求远呢。今天我就把自己创建的最简单java webservice 范例过程记录下来，与大家分享。<br />
<br />
&nbsp;&nbsp;&nbsp;我用的是netbeans 6，首先建立一个java 应用程序工程,名为WebServices。建立一个服务端程序。<br />
<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"><span style="color: #0000ff">package</span> <span style="color: #000000">&nbsp;WebServices;<br />
<br />
</span><span style="color: #0000ff">import</span> <span style="color: #000000">&nbsp;javax.jws.</span> <span style="color: #000000">*</span> <span style="color: #000000">;<br />
</span><span style="color: #0000ff">import</span> <span style="color: #000000">&nbsp;javax.xml.ws.Endpoint;<br />
<br />
</span><span style="color: #008000">/**</span> <span style="color: #008000"><br />
&nbsp;*&nbsp;</span> <span style="color: #808080">@author</span> <span style="color: #008000">&nbsp;hecm<br />
&nbsp;</span> <span style="color: #008000">*/</span> <span style="color: #000000"><br />
@WebService(targetNamespace&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">http://www.blogjava.net/JAVA-HE</span> <span style="color: #000000">"</span> <span style="color: #000000">,&nbsp;serviceName&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">HelloService</span> <span style="color: #000000">"</span> <span style="color: #000000">)<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;WSProvider<br />
{<br />
<br />
&nbsp;&nbsp;&nbsp;</span> <span style="color: #008000">//</span> <span style="color: #008000">&nbsp;@WebResult(name&nbsp;=&nbsp;"Greetings")</span> <span style="color: #008000">//</span> <span style="color: #008000">自定义该方法返回值在WSDL中相关的描述&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;@WebMethod(action&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">sayHi</span> <span style="color: #000000">"</span> <span style="color: #000000">,&nbsp;operationName&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">sayHi</span> <span style="color: #000000">"</span> <span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;String&nbsp;sayHi(@WebParam(name&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">MyName</span> <span style="color: #000000">"</span> <span style="color: #000000">)&nbsp;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">Hi,</span> <span style="color: #000000">"</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">+</span> <span style="color: #000000">&nbsp;name;&nbsp;</span> <span style="color: #008000">//</span> <span style="color: #008000">@WebParam是自定义参数name在WSDL中相关的描述</span> <span style="color: #008000"><br />
</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Oneway&nbsp;</span> <span style="color: #008000">//</span> <span style="color: #008000">表明该服务方法是单向的,既没有返回值,也不应该声明检查异常</span> <span style="color: #008000"><br />
</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;@WebMethod(action&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">printSystemTime</span> <span style="color: #000000">"</span> <span style="color: #000000">,&nbsp;operationName&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">printSystemTime</span> <span style="color: #000000">"</span> <span style="color: #000000">)</span> <span style="color: #008000">//</span> <span style="color: #008000">自定义该方法在WSDL中相关的描述</span> <span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">void</span> <span style="color: #000000">&nbsp;printTime()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(System.currentTimeMillis());<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<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)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread&nbsp;wsPublisher&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">new</span> <span style="color: #000000">&nbsp;Thread(</span> <span style="color: #0000ff">new</span> <span style="color: #000000">&nbsp;WSPublisher());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wsPublisher.start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">private</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">static</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">class</span> <span style="color: #000000">&nbsp;WSPublisher&nbsp;</span> <span style="color: #0000ff">implements</span> <span style="color: #000000">&nbsp;Runnable<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">void</span> <span style="color: #000000">&nbsp;run()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #008000">//</span> <span style="color: #008000">发布WSProvider到http:</span> <span style="color: #008000">//</span> <span style="color: #008000">localhost:8888/hechangmin/WSProvider这个地址,之前必须调用wsgen命令<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #008000">//</span> <span style="color: #008000">生成服务类WSProvider的支持类,命令如下:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #008000">//</span> <span style="color: #008000">wsgen&nbsp;-cp&nbsp;.&nbsp;WebServices.WSProvider</span> <span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Endpoint.publish("<a href="http://localhost:8888/JAVA-HE/WSProvider">http://localhost:8888/JAVA-HE/WSProvider</a>", new WSProvider());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<p>当然建立对应的包，就不用说了。<br />
然后编译文件。<br />
进入命令提示符下，进入classes目录，运行：wsgen&nbsp;-cp&nbsp;.&nbsp;WebServices.WSProvider<br />
<br />
可以看到将刚才的class 生成了几个java文件和class文件。<br />
<br />
现在要做的是发布ws到http://localhost:8888/chinajash/WSProvider<br />
而实际上的动作就是：Endpoint.publish("http://localhost:8888/chinajash/WSProvider",new&nbsp;WSProvider());<br />
当然直接运行WSProvider 。<br />
<br />
然后输入<a href="http://localhost:8888/JAVA-HE/WSProvider?wsdl">http://localhost:8888/JAVA-HE/WSProvider?wsdl</a><br />
<br />
就已经查看到生成的wsdl （webservice 描述语言）。<br />
<br />
也就是服务端就OK了。<br />
<br />
保持运行。编写一个测试客户端：<br />
<br />
首先选择项目，右键新建 web服务客户端。其中ws url填入刚才生成的wsdl地址：<br />
<a href="http://localhost:8888/JAVA-HE/WSProvider?wsdl">http://localhost:8888/JAVA-HE/WSProvider?wsdl</a><br />
<br />
（实际上：和wsimport&nbsp;<a href="http://localhost:8888/JAVA-HE/WSProvider?wsdl">http://localhost:8888/JAVA-HE/WSProvider?wsdl</a>&nbsp;一样的效果）<br />
<br />
<br />
产生一个效果：在classes下 按照 之前指定的名字空间产生的包下（目录结构）生成了7个帮助class。<br />
<br />
然后我们建立一个包 client 建立测试文件：<br />
</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"><span style="color: #008000">/*</span> <span style="color: #008000"><br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Templates<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.<br />
&nbsp;</span> <span style="color: #008000">*/</span> <span style="color: #000000"><br />
<br />
</span><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;net.blogjava.java_he.</span> <span style="color: #000000">*</span> <span style="color: #000000">;<br />
</span><span style="color: #008000">/**</span> <span style="color: #008000"><br />
&nbsp;*<br />
&nbsp;*&nbsp;</span> <span style="color: #808080">@author</span> <span style="color: #008000">&nbsp;hecm<br />
&nbsp;</span> <span style="color: #008000">*/</span> <span style="color: #000000"><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;Test&nbsp;{<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[])<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HelloService&nbsp;hs&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">new</span> <span style="color: #000000">&nbsp;HelloService();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSProvider&nbsp;ws&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;hs.getWSProviderPort();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(ws.sayHi(</span> <span style="color: #000000">"</span> <span style="color: #000000">hechangmin</span> <span style="color: #000000">"</span> <span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ws.printSystemTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
<p><br />
运行这个测试类：<br />
Hi,hechangmin<br />
<br />
输出了。顺利完成！<br />
<br />
一点个人经验，你发布的地址最好写成可配置。还有就是wsdl 中会严格按照你指定的url来访问，比如你指定的127.0.0.1 那么你用本机IP的时候也许并不能顺利访问。<br />
<br />
</p>
<div class="postDesc">posted on 2008-07-08 02:59 <a href="http://www.blogjava.net/JAVA-HE/">-274&#176;C</a> 阅读(880) <a href="http://www.blogjava.net/JAVA-HE/archive/2008/07/08/213203.html#Post">评论(1)</a> &nbsp;<a href="http://www.blogjava.net/JAVA-HE/admin/EditPosts.aspx?postid=213203">编辑</a> &nbsp;<a href="http://www.blogjava.net/JAVA-HE/AddToFavorite.aspx?id=213203">收藏</a> 所属分类: <a href="http://www.blogjava.net/JAVA-HE/category/19826.html">JAVA</a> 、<a href="http://www.blogjava.net/JAVA-HE/category/19891.html">JSP</a> </div>
<img height="1" src="http://www.blogjava.net/JAVA-HE/aggbug/213203.html?webview=1" width="1"  alt="" /> <!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description rdf:about="http://www.blogjava.net/JAVA-HE/archive/2008/07/08/213203.html" dc:identifier="http://www.blogjava.net/JAVA-HE/archive/2008/07/08/213203.html" dc:title="实战 JDK 6.0 自带web service " trackback:ping="http://www.blogjava.net/JAVA-HE/services/trackbacks/213203.aspx"  />
</rdf:RDF>
--><script type="text/javascript">
//<![cdata[ Sys.WebForms.PageRequestManager._initialize('AjaxHolder$scriptmanager1', document.getElementById('Form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tAjaxHolder$UpdatePanel1'], [], [], 90);
//]]&gt;
</script>
<div id="AjaxHolder_UpdatePanel1"><a name="pagedcomment"></a><!--done--><br />
</div>
<img src ="http://www.blogjava.net/conans/aggbug/213463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-07-08 23:02 <a href="http://www.blogjava.net/conans/articles/213463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>