﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-疯狂-随笔分类-webservice</title><link>http://www.blogjava.net/freeman1984/category/38743.html</link><description>         
        STANDING ON THE SHOULDERS OF GIANTS</description><language>zh-cn</language><lastBuildDate>Tue, 28 May 2013 00:37:08 GMT</lastBuildDate><pubDate>Tue, 28 May 2013 00:37:08 GMT</pubDate><ttl>60</ttl><item><title>我应该采用哪一种 WSDL 样式？（转载）</title><link>http://www.blogjava.net/freeman1984/archive/2013/05/27/399821.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Mon, 27 May 2013 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2013/05/27/399821.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/399821.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2013/05/27/399821.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/399821.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/399821.html</trackback:ping><description><![CDATA[<p>转自IBM java dev<br />------------------<br />Web 服务是通过 WSDL 文档来描述的。WSDL 绑定描述了如何把服务绑定到消息传递协议（特别是 SOAP 消息传递协议）。WSDL SOAP 绑定可以是 RPC 样式的绑定，也可以是文档样式的绑定。同样，SOAP 绑定可以有编码的用法，也可以有文字的用法。这给我们提供了四种样式/用法模型：</p>
<ol><li>RPC/编码</li><li>RPC/文字</li><li>文档/编码</li><li>文档/文字</li></ol>
<p>除了这些样式之外，还有一种样式也很常见，它称为文档/文字包装的样式，算上这一种，在创建 WSDL 文件时您就有了五种绑定样式可以从中选择。您应该选择哪一种呢？</p>
<p>对于本文的讨论，让我们从 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing1">清单1</a>中的 Java 方法开始，并且对其应用 JAX-RPC Java-to-WSDL 规则 </p><a name="listing1"><strong>清单</strong> </a><a name="listing1"><strong>1. Java 方法</strong> </a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">public void myMethod(int x);
</pre></td></tr></tbody></table><br />
<p><a name="0"><span class="atitle">RPC/编码</span></a></p>
<p>采用 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing1">清单1</a>中的方法并且使用您喜欢的 Java-to-WSDL 工具来运行它，指定您想让它生成 RPC/编码的 WSDL。您最后应该得到如 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing2">清单2</a>所示的 WSDL 片断。 </p><a name="listing2"><strong>清单</strong> </a><a name="listing2"><strong>2. 用于 myMethod 的 RPC/编码的 WSDL</strong> </a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;message name="myMethodRequest"&gt;
    &lt;part name="x" type="xsd:int"/&gt;
&lt;/message&gt;
&lt;message name="empty"/&gt;
&lt;portType name="PT"&gt;
    &lt;operation name="myMethod"&gt;
        &lt;input message="myMethodRequest"/&gt;
        &lt;output message="empty"/&gt;
    &lt;/operation&gt;
&lt;/portType&gt;
&lt;binding .../&gt;  
&lt;!-- I won't bother with the details, just assume it's RPC/encoded. --&gt;
</pre></td></tr></tbody></table><br />
<p>现在用&#8220;5&#8221;作为参数 <code>x </code>的值来调用此方法。我们将发送一个与 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing3">清单3</a>类似的 SOAP 消息。 </p><a name="listing3"><strong>清单</strong> </a><a name="listing3"><strong>3. 用于 myMethod 的 RPC/编码的 SOAP 消息</strong> </a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;soap:envelope&gt;
    &lt;soap:body&gt;
        &lt;myMethod&gt;
            &lt;x xsi:type="xsd:int"&gt;5&lt;/x&gt;
        &lt;/myMethod&gt;
    &lt;/soap:body&gt;
&lt;/soap:envelope&gt;
</pre></td></tr></tbody></table><br />
<div class="ibm-container ibm-alt-header dw-container-sidebar">
<h2>关于前缀和名称空间的注意事项</h2>
<div class="ibm-container-body">
<p>为了简单起见，在本文的大部分 XML 示例中，我省略了名称空间和前缀。不过，我还是使用了少数前缀，您可以假定它们是用下列名称空间进行定义的。</p>
<p>
<ul><li>xmlns:xsd="http://www.w3.org/2001/XMLSchema"</li><li>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"</li><li>xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"</li></ul>
<p>&nbsp;</p></div></div>
<p>对于这个 RPC/编码的示例中的 WSDL 和 SOAP 消息，有许多需要注意的事项：</p>
<p><a name="IDAGE2AC"><span class="smalltitle">优点</span></a></p>
<ul><li>WSDL 基本达到了尽可能地简单易懂的要求。</li><li>操作名出现在消息中，这样接收者就可以很轻松地把消息发送到方法的实现。</li></ul>
<p><a name="IDAQE2AC"><span class="smalltitle">缺点</span></a></p>
<ul><li>类型编码信息（比如 <code>xsi:type="xsd:int"</code> ）通常就是降低吞吐量性能的开销。 </li><li>您不能简单地检验此消息的有效性，因为只有 <code>&lt;x xsi:type="xsd:int"&gt;5&lt;/x&gt;</code> 行包含在 Schema 中定义的内容；其余的 <code>soap:body</code> 内容都来自 WSDL 定义。 </li></ul>
<p>有没有一种方法能够保留这些优点而消除其中的缺点呢？或许有。让我们来看一看 RPC/文字的样式。</p>
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#ibm-pcon">回页首</a></p>
<p><a name="1"><span class="atitle">RPC/文字</span></a></p>
<p>用于我们的方法的 RPC/文字的 WSDL 看起来与 RPC/编码的 WSDL 几乎一样（请参见 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing4">清单4</a>）。只是绑定的用法由 <em>编码</em>改为 <em>文字</em>。仅此而已。 </p><a name="listing4"><strong>清单</strong> </a><br /><a name="N10123"><strong>4. 用于 myMethod 的 RPC/文字的 WSDL</strong></a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;message name="myMethodRequest"&gt;
    &lt;part name="x" type="xsd:int"/&gt;
&lt;/message&gt;
&lt;message name="empty"/&gt;
&lt;portType name="PT"&gt;
    &lt;operation name="myMethod"&gt;
        &lt;input message="myMethodRequest"/&gt;
        &lt;output message="empty"/&gt;
    &lt;/operation&gt;
&lt;/portType&gt;
&lt;binding .../&gt;  
&lt;!-- I won't bother with the details, just assume it's RPC/
        <strong>literal</strong>. --&gt;
      </pre></td></tr></tbody></table><br />
<p>RPC/文字的 SOAP 消息又是怎样的呢（请参见 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing5">清单</a> <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing5">5</a>）？这里的更改要多一点。去掉了类型编码。 </p><a name="listing5"><strong>清单</strong> </a><a name="listing5"><strong>5. </strong></a><a name="listing4"><strong>用于 myMethod 的</strong> </a><br /><a name="N10150"><strong>RPC/文字的 SOAP 消息</strong></a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;soap:envelope&gt;
    &lt;soap:body&gt;
        &lt;myMethod&gt;
            &lt;x&gt;5&lt;/x&gt;
        &lt;/myMethod&gt;
    &lt;/soap:body&gt;
&lt;/soap:envelope&gt;
</pre></td></tr></tbody></table><br />
<p>下面是这种方法的优点和缺点：</p>
<p><a name="IDAXG2AC"><span class="smalltitle">优点</span></a></p>
<ul><li>WSDL 还是基本达到了尽可能地简单易懂的要求。</li><li>操作名仍然出现在消息中。</li><li>去掉了类型编码。</li></ul>
<p><a name="IDACH2AC"><span class="smalltitle">缺点</span></a></p>
<ul><li>您仍然不能简单地检验此消息的有效性，因为只有 <code>&lt;x xsi:type="xsd:int"&gt;5&lt;/x&gt;</code> 行包含在 Schema 中定义的内容；其余的 <code>soap:body</code> 内容都来自 WSDL 定义。 </li></ul>
<p>文档样式如何呢？它们能够帮助克服这些困难吗？</p>
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#ibm-pcon">回页首</a></p>
<p><a name="2"><span class="atitle">文档</span></a></p>
<p>我不知道有谁懂得这种方法的真正含义。我也不知道这种方法的任何实现。它将可能从 WSDL 的后续版本中消失。所以我们还是讨论别的吧。</p>
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#ibm-pcon">回页首</a></p>
<p><a name="3"><span class="atitle">文档</span></a></p>
<p>文档/文字的 WSDL 对 RPC/文字的 WSDL 作了一些更改。它们之间的不同之处显示在 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing6">清单6</a>中。 </p><br /><a name="N101AA"><strong>清单6. 用于 myMethod 的文档/文字的 WSDL</strong></a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">        <strong>&lt;types&gt;
    &lt;schema&gt;
        &lt;element name="xElement" type="xsd:int"/&gt;
    &lt;/schema&gt;
&lt;/types&gt;</strong>
&lt;message name="myMethodRequest"&gt;
    &lt;part name="x" 
        <strong>element="xElement"</strong>/&gt;
&lt;/message&gt;
&lt;message name="empty"/&gt;
&lt;portType name="PT"&gt;
    &lt;operation name="myMethod"&gt;
        &lt;input message="myMethodRequest"/&gt;
        &lt;output message="empty"/&gt;
    &lt;/operation&gt;
&lt;/portType&gt;
&lt;binding .../&gt;  
&lt;!-- I won't bother with the details, just assume it's 
        <strong>document</strong>/literal. --&gt;
      </pre></td></tr></tbody></table><br />
<p>而现在的 SOAP 应该如 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing7">清单</a> <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing7">7</a>所示： </p><br /><a name="N101C8"><strong>清单7. 用于 myMethod 的文档/文字的 SOAP 消息</strong></a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;soap:envelope&gt;
    &lt;soap:body&gt;
        &lt;xElement&gt;5&lt;/xElement&gt;
    &lt;/soap:body&gt;
&lt;/soap:envelope&gt;
</pre></td></tr></tbody></table><br />
<div class="ibm-container ibm-alt-header dw-container-sidebar">
<h2>关于消息组成部分的注意事项</h2>
<div class="ibm-container-body">
<p>我本来可以只更改绑定，就像我从 RPC/编码转到 RPC/所做的那样。它将是合法的 WSDL。然而，WS-I 基本概要（WS-I Basic Profile）（请参见 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#7">参考资料</a>）规定文档/文字的消息的组成部分引用元素而不是类型，所以我遵循了 WS-I（并且此处使用元素部分可以很好地把我们带到关于文档/文字包装的样式的讨论）。 </p></div></div>
<p>下面是这种方法的优点和缺点：</p>
<p><a name="IDA1Z2AC"><span class="smalltitle">优点</span></a></p>
<ul><li>没有编码信息</li><li>您可以在最后用任何 XML 检验器检验此消息的有效性。 <code>soap:body</code> （ <code>&lt;xElement&gt;5&lt;/xElement&gt;</code> ）中每项内容都定义在 Schema 中。 </li></ul>
<p><a name="IDAO02AC"><span class="smalltitle">缺点</span></a></p>
<ul><li>WSDL 变得有些复杂。不过，这是一个非常小的缺点，因为 WSDL 并没有打算由人来读取。</li><li>SOAP 消息中缺少操作名。而如果没有操作名，发送就可能比较困难，并且有时变得不可能。</li></ul>
<p>文档/文字的样式看起来似乎只是重新安排了 RPC/文字的模型的优点和缺点。您可以检验消息的有效性，但是您失去了操作名。有没有一种方法可以改进这一点呢？有的。它就是文档/文字包装的样式。</p>
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#ibm-pcon">回页首</a></p>
<p><a name="N10218"><span class="atitle">文档</span></a></p>
<p>在我说明文档/文字包装的样式的含义之前，让我给您展示 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing8">清单</a> <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing8">8</a>和 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing9">清单9</a>中的 WSDL 和 SOAP 消息。 </p><br /><a name="N1022D"><strong>清单8. 用于 myMethod 的文档/文字包装的 WSDL</strong></a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;types&gt;
    &lt;schema&gt;
        
        <strong>&lt;element name="myMethod"/&gt;
            &lt;complexType&gt;
                &lt;sequence&gt;
                    &lt;element name="x" type="xsd:int"/&gt;
                &lt;/sequence&gt;
            &lt;/complexType&gt;
        &lt;/element&gt;</strong>
    &lt;/schema&gt;
&lt;/types&gt;
&lt;message name="myMethodRequest"&gt;
    &lt;part name="
        <strong>parameters</strong>" element="
        <strong>myMethod</strong>"/&gt;
&lt;/message&gt;
&lt;message name="empty"/&gt;
&lt;portType name="PT"&gt;
    &lt;operation name="myMethod"&gt;
        &lt;input message="myMethodRequest"/&gt;
        &lt;output message="empty"/&gt;
    &lt;/operation&gt;
&lt;/portType&gt;
&lt;binding .../&gt;  
&lt;!-- I won't bother with the details, just assume it's document/literal. --&gt;
      </pre></td></tr></tbody></table><br />
<p>WSDL Schema 现在把参数放在包装中（请参见 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing9">清单9</a>）。 </p><br /><a name="N10247"><strong>清单:9. 用于 myMethod 的文档/文字包装的 SOAP 消息</strong></a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;soap:envelope&gt;
    &lt;soap:body&gt;
        &lt;myMethod&gt;
            &lt;x&gt;5&lt;/x&gt;
        &lt;/myMethod&gt;
    &lt;/soap:body&gt;
&lt;/soap:envelope&gt;</pre></td></tr></tbody></table><br />
<p>注意到此 SOAP 消息看起来非常类似于 RPC/文字的 SOAP 消息。您可能会说，它看起来与 RPC/文字的 SOAP 消息是完全一样的，不过，这两种消息之间存在着微妙的区别。在 RPC/文字的 SOAP 消息中， <code>&lt;soap:body&gt;</code> 的 <code>&lt;myMethod&gt;</code> 子句是操作的名称。在文档/文字包装的 SOAP 消息中， <code>&lt;myMethod&gt;</code> 子句是单个输入消息的组成部分引用的元素的名称。因此，包装的样式具有这样的一个特征，输入元素的名称与操作的名称是相同的。此样式是把操作名放入 SOAP 消息的一种巧妙方式。 </p>
<p>文档/文字包装的样式的特征有：</p>
<ul><li>输入消息只有一个组成部分。</li><li>该部分就是一个元素。</li><li>该元素有与操作相同的名称。</li><li>该元素的复杂类型没有属性。</li></ul>
<p>下面是这种方法的优点和缺点：</p>
<p><a name="IDA522AC"><span class="smalltitle">优点</span></a></p>
<ul><li>没有编码信息。</li><li>出现在 soap:body 中的每项内容都是由 Schema 定义的，所以您现在可以很容易地检验此消息的有效性。</li><li>方法名又出现在 SOAP 消息中。</li></ul>
<p><a name="IDAK32AC"><span class="smalltitle">缺点</span></a></p>
<ul><li>WSDL 甚至更复杂，但是这仍然是一个非常小的缺点。</li></ul>
<p>如您所见，文档/文字包装的样式还是有一些缺点，不过与优点比起来，它们都显得无足轻重。</p>
<div class="ibm-container ibm-alt-header dw-container-sidebar">
<h2>RPC/文字包装的样式?</h2>
<div class="ibm-container-body">
<p>从 WSDL 的角度来看，没有理由只是把把包装的样式和文档/文字绑定联系在一起。它可以很容易地应用于 RPC/文字绑定。但是这样做是相当不明智的。SOAP 将包含操作的一个 <code>myMethod</code> 元素和元素名称的子 <code>myMethod</code> 元素。另外，即使它是一个合法的 WSDL，RPC/文字元素部分也不遵循 WS-I。 </p></div></div>
<p><a name="IDAG42AC"><span class="smalltitle">文档/文字的样式在哪里定义</span></a></p>
<p><br />这种包装的样式来源于 Microsoft。没有定义这种样式的规范；所以虽然这种样式是一个好的东西，但不幸的是，为了与 Microsoft 和其他公司的实现进行互操作，现在惟一的选择就是根据 Microsoft WSDL 的输出来猜测它是如何工作的。文档/文字包装的样式也实现在 IBM WebSphere SDK for Web Services 中（请参见 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#7">参考资料</a>）。在这个示例中，样式是相当明显的；但是也存在个别情况，在这些情况中，由于缺少定义而导致需要操作的适当事项不够特别清晰。我们希望看到的最理想的情况就是将来能有像 Web 服务互操作组织（Web Services Interoperability Organization）这样的独立团体来帮助对此进行稳定化和标准化。 </p>
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#ibm-pcon">回页首</a></p>
<p><a name="N102C3"><span class="atitle">为什么不始终采用文档/文字包装的样式</span></a></p>
<p>至此，本文已经给了您这样的一个印象，文档/文字包装的样式是最好的方法。而实际的情况往往确实如此。不过，仍然存在着一些情况，在这些情况下，您最好是换一种别的样式。</p>
<p><a name="IDA142AC"><span class="smalltitle">采用文档/文字非包装的样式的理由</span></a></p>
<p><br />如果您已经重载了操作，就不能采用文档/文字包装的样式。 </p>
<p>想象一下，除了我们一直在使用的方法之外，还有另一种方法，请参见 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing10">清单10</a>。 </p><br /><a name="N102DE"><strong>清单10. 用于文档/文字包装的问题方法</strong></a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">public void myMethod(int x);
        <strong>public void myMethod(int x, String y);</strong>
      </pre></td></tr></tbody></table><br />
<div class="ibm-container ibm-alt-header dw-container-sidebar">
<h2>关于重载的操作的注意事项</h2>
<div class="ibm-container-body">
<p>WSDL 的下一个版本可能将不允许重载的操作。</p></div></div>
<p>WSDL 允许重载的操作。但是当您添加包装的样式到 WSDL 时，需要元素有与操作相同的名称，并且在 XML 中不能有两个名称相同的元素。所以您必须采用文档/文字非包装的样式或某种 RPC 样式。</p>
<p><a name="IDA252AC"><span class="smalltitle">采用 RPC/文字的样式的理由</span></a></p>
<p><br />由于文档/文字非包装的样式没有提供操作名，所以在有些情况下，您将需要采用某种 RPC 样式。比如说 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing11">清单11</a>中的一组方法。 </p><br /><a name="N10309"><strong>清单11. 用于文档/文字非包装的样式的问题方法</strong></a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">public void myMethod(int x);
public void myMethod(int x, String y);
        <strong>public void someOtherMethod(int x);</strong>
      </pre></td></tr></tbody></table><br />
<p>现在假定您的服务器接收到文档/文字的 SOAP 消息（您可以回过头在 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing7">清单</a> <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing7">7</a>中看一看它）。服务器应该发送哪一种方法呢？所有您能确切知道的就是，它一定不是 <code>myMethod(int x, String x)</code> ，因为消息只有一个参数，而这种方法需要两个参数。它可能是其他两种方法中的一种。采用文档/文字的样式，您没有办法知道是哪一种方法。 </p>
<p>假定服务器接收到一个 RPC/文字的消息（比如 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing5">清单5</a>中的），而不是文档/文字的消息。对于这种消息，服务器很容易决定把它发送到哪一种方法。您知道操作名是 <em>myMethod</em>，并且也知道只有一个参数，所以它必定是 <code>myMethod(int x)</code> 。 </p>
<p><a name="N10333"><span class="smalltitle">采用</span></a></p>
<p><br />采用 RPC/编码的理由有很多。其中两个主要的原因是： </p>
<ul><li>数据图形</li><li>多态性</li></ul><br />数据图形 <br />
<p>设想您有一个二进制树，其中的节点定义在 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing12">清单12</a>中。 </p><br /><a name="N10352"><strong>清单12. 二进制树节点 Schema</strong></a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;complexType name="Node"&gt;
    &lt;sequence&gt;
        &lt;element name="name" type="xsd:string"/&gt;
        &lt;element name="left" type="Node" xsd:nillable="true"/&gt;
        &lt;element name="right" type="Node" xsd:nillable="true"/&gt;
    &lt;/sequence&gt;
&lt;/complexType&gt;
</pre></td></tr></tbody></table><br />
<p>根据这种节点定义，我们可以构造一个树形结构，它的根节点 A 通过它左边和右边的的链接可以指向节点 B（请参见 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#figure1">图1</a>）。 </p><br /><img alt="编码的树" src="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/encodedtree.jpg" width="89" height="128" /> <br />
<p>发送数据图形的标准方式是使用 href 标记，它是 RPC/编码的样式（ <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing13">清单13</a>）的一部分。 </p><br /><a name="N1037A"><strong>清单:13. RPC/编码的二进制树</strong></a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;A&gt;
    &lt;name&gt;A&lt;/name&gt;
    &lt;left href="12345"/&gt;
    &lt;right href="12345"/&gt;
&lt;/A&gt;
&lt;B id="12345"&gt;
    &lt;name&gt;B&lt;/name&gt;
    &lt;left xsi:nil="true"/&gt;
    &lt;right xsi:nil="true"/&gt;
&lt;/B&gt;
</pre></td></tr></tbody></table><br />
<p>在任何文字的样式中，href 属性都是不可用的，这样图形链接就不再起作用了（ <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing14">清单14</a>和 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#figure2">图2</a>）。您仍然有一个根节点 A，它从左边指向一个节点 B，从右边指向另一个节点 B。这两个 B 节点是等同的，但它们不是相同的节点。是复制了数据而不是引用了两次数据。 </p><br /><a name="N1038F"><strong>14. 文字二进制树</strong></a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;A&gt;
    &lt;name&gt;A&lt;/name&gt;
    &lt;left&gt;
        &lt;name&gt;B&lt;/name&gt;
        &lt;left xsi:nil="true"/&gt;
        &lt;right xsi:nil="true"/&gt;
    &lt;/left&gt;
    &lt;right&gt;
        &lt;name&gt;B&lt;/name&gt;
        &lt;left xsi:nil="true"/&gt;
        &lt;right xsi:nil="true"/&gt;
    &lt;/right&gt;
&lt;/A&gt;</pre></td></tr></tbody></table><br /><br /><img alt="文字树" src="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/literaltree.jpg" width="194" height="128" /> <br />
<p>在文字样式中，您可以通过各种方法构造图形，但是却没有标准的方法；所以您做的任何事情很可能不能与网络中其他端点上的服务进行互操作。</p><strong>多态性</strong> <br />
<p>看一看 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing15">清单15</a>中使用多态性 Schema 的 WSDL。 </p><a name="listing15"><strong>清单</strong> </a><br /><a name="N103BF"><strong>15. 一个多态性 WSDL 的示例</strong></a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;types&gt;
  &lt;schema&gt;
    &lt;complexType name="animal"&gt;
      &lt;sequence&gt;
        &lt;element name="name" type="xsd:string"/&gt;
      &lt;/sequence&gt;
    &lt;/complexType&gt;
    &lt;complexType name="dog"&gt;
      &lt;complexContent mixed="false"&gt;
        &lt;extension base="animal"&gt;
          &lt;sequence&gt;
            &lt;element name="breed" type="xsd:string"/&gt;
          &lt;/sequence&gt;
        &lt;/extension&gt;
      &lt;/complexContent&gt;
    &lt;/complexType&gt;
  &lt;/schema&gt;
&lt;/types&gt;
&lt;message name="in"&gt;
  &lt;part name="trainee" type="animal"/&gt;
&lt;/message&gt;
&lt;message name="empty"/&gt;
&lt;portType name="AnimalTrainer"&gt;
  &lt;operation name="train"&gt;
    &lt;input message="in"/&gt;
    &lt;output message="empty"/&gt;
  &lt;/operation&gt;
&lt;/portType&gt;
</pre></td></tr></tbody></table><br />
<p>当您把一个 dog 的实例传送给 <em>train</em> 操作时，所生成的 SOAP 消息必须包含类型编码信息，这样接收终端才能知道它所接收的是 animal 的哪一个扩展（请参见 <a href="http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing16">清单16</a>）。这种类型编码信息可用在 RPC/编码的样式中。 </p><a name="listing16"><strong>清单</strong> </a><br /><a name="N103DA"><strong>16. 一个多态性 SOAP 消息</strong></a><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;soap:envelope&gt;
  &lt;soap:body&gt;
    &lt;train&gt;
      &lt;trainee xsi:type="Dog"&gt;
        &lt;name&gt;Bob&lt;/name&gt;
        &lt;breed&gt;Bloodhound&lt;/breed&gt;
      &lt;/trainee&gt;
    &lt;/train&gt;
  &lt;/soap:body&gt;
&lt;/soap:envelope&gt;</pre></td></tr></tbody></table><br />
<div class="ibm-alternate-rule">
<hr />
</div>
<p><a name="6"><span class="atitle">总结</span></a></p>
<p>有四种绑定样式（其实真正有五种，不过文档/编码的样式没有什么意义）。虽然每种样式都有自己的用武之地，但是在大多数情况下，最好的样式是文档/文字包装的样式。</p><img src ="http://www.blogjava.net/freeman1984/aggbug/399821.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2013-05-27 15:18 <a href="http://www.blogjava.net/freeman1984/archive/2013/05/27/399821.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webservice b/s (jax-ws 2.1)</title><link>http://www.blogjava.net/freeman1984/archive/2012/04/19/375252.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Thu, 19 Apr 2012 04:15:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2012/04/19/375252.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/375252.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2012/04/19/375252.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/375252.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/375252.html</trackback:ping><description><![CDATA[参考 <a href="http://alvinqq.iteye.com/blog/647649">http://alvinqq.iteye.com/blog/647649</a>&nbsp; <img src ="http://www.blogjava.net/freeman1984/aggbug/375252.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2012-04-19 12:15 <a href="http://www.blogjava.net/freeman1984/archive/2012/04/19/375252.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xmlrpc介绍和使用</title><link>http://www.blogjava.net/freeman1984/archive/2011/11/11/363526.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 11 Nov 2011 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/11/11/363526.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/363526.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/11/11/363526.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/363526.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/363526.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: xmlrpc介绍，并模拟blogjava的xml-rpc api写个例子。<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/freeman1984/archive/2011/11/11/363526.html'>阅读全文</a><img src ="http://www.blogjava.net/freeman1984/aggbug/363526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-11-11 14:58 <a href="http://www.blogjava.net/freeman1984/archive/2011/11/11/363526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>axis客户端简单实现</title><link>http://www.blogjava.net/freeman1984/archive/2010/10/09/334064.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Sat, 09 Oct 2010 03:12:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/10/09/334064.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/334064.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/10/09/334064.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/334064.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/334064.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp; Service service = new Service();<br />
&nbsp;&nbsp;&nbsp;Call call = (Call) service.createCall();<br />
&nbsp;&nbsp;&nbsp;call.setTargetEndpointAddress(new java.net.URL(&#8220;webservice的url&#8221;));<br />
&nbsp;&nbsp;&nbsp;call.setOperationName("service");<br />
&nbsp;&nbsp;&nbsp;call.addParameter("arg0", XMLType.XSD_STRING, ParameterMode.IN);<br />
&nbsp;&nbsp;&nbsp;call.addParameter("arg1", XMLType.XSD_STRING, ParameterMode.IN);<br />
&nbsp;&nbsp;&nbsp;call.addParameter("arg2", XMLType.XSD_STRING, ParameterMode.IN);<br />
&nbsp;&nbsp;&nbsp;call.addParameter("arg3", XMLType.XSD_STRING, ParameterMode.IN);<br />
&nbsp;&nbsp;&nbsp;call.setReturnType(XMLType.XSD_STRING);<br />
参数</p>
<p>&nbsp;&nbsp;&nbsp;String ret = (String) call.invoke(new Object[] {&#8220;arg0&#8221;&nbsp;,&#8220;arg1&#8221;,&#8220;arg2&#8221;,&#8220;arg3&#8221;});<br />
<br />
<br />
-----其中call.addParameter第一个参数要看wsdl里面的描述情况。</p>
<img src ="http://www.blogjava.net/freeman1984/aggbug/334064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-10-09 11:12 <a href="http://www.blogjava.net/freeman1984/archive/2010/10/09/334064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring cxf</title><link>http://www.blogjava.net/freeman1984/archive/2010/01/28/311098.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Thu, 28 Jan 2010 09:40:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/01/28/311098.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/311098.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/01/28/311098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/311098.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/311098.html</trackback:ping><description><![CDATA[<font style="background-color: #cce8cf">例子可照做<font style="background-color: #cce8cf"><a href="http://www.ibm.com/developerworks/cn/webservices/ws-pojo-springcxf/">http://www.ibm.com/developerworks/cn/webservices/ws-pojo-springcxf/</a></font><br />主要是jar包和jdk 要不一大堆错误就郁闷死了<br />jak 1.6 update04以上<br />jar包：<br /></font><br />
<p><font style="background-color: #cce8cf">以下的 jar 包是所有 CXF 项目所必需的：</font></p>
<p><font style="background-color: #cce8cf">cxf.jar <br />commons-logging.jar <br />geronimo-activation.jar (Or the Sun equivalent) <br />geronimo-annotation.jar (Or the Sun equivalent) <br />geronimo-javamail.jar (Or the Sun equivalent) <br />neethi.jar <br />jaxb-api.jar <br />jaxb-impl.jar <br />stax-api.jar <br />XmlSchema.jar <br />wstx-asl.jar <br />xml-resolver.jar </font></p>
<p>具体可见<font style="background-color: #cce8cf"><a href="http://blog.csdn.net/yyh30/archive/2008/09/19/2952145.aspx">http://blog.csdn.net/yyh30/archive/2008/09/19/2952145.aspx</a>或者<br /><a href="http://blog.csdn.net/sz_bdqn/article/details/6737931">http://blog.csdn.net/sz_bdqn/article/details/6737931</a><br /></font>no spring <a href="http://zzxanadu.iteye.com/blog/542249">http://zzxanadu.iteye.com/blog/542249</a><br /><font style="background-color: #cce8cf"><br /></font></p><img src ="http://www.blogjava.net/freeman1984/aggbug/311098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-01-28 17:40 <a href="http://www.blogjava.net/freeman1984/archive/2010/01/28/311098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAX-WS weService实例2</title><link>http://www.blogjava.net/freeman1984/archive/2010/01/26/310902.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Tue, 26 Jan 2010 14:09:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/01/26/310902.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/310902.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/01/26/310902.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/310902.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/310902.html</trackback:ping><description><![CDATA[上一篇http://www.blogjava.net/freeman1984/archive/2010/01/13/309387.html主要说了个jax ws cs 结构的用法 在b/s结构中的使用：<br />
环境：myeclipse 8.0，tomcat6.0 jdk 1.5+ <br />
1,首先new 一个web project <br />
2,添加必须的jar （bulid path）：<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/freeman1984/lib.jpg" border="0" /><br />
<br />
首先建立server端：<br />
如果客户端使用是不是用myeclipse自动生成，我们在这建立一个接口：<br />
@WebService<br />
public interface ServerJaxI {<br />
&nbsp;public List&lt;User&gt; getUser(User user);<br />
}<br />
当然@webServer 是必须的<br />
接下来是实现：<br />
<p>@javax.jws.WebService(targetNamespace = "http://server.com/", endpointInterface="com.server.ServerJaxI", serviceName = "ServerJaxService", portName = "ServerJaxPort")<br />
<font style="background-color: #cce8cf">@SOAPBinding(style=Style.RPC)</font><br />
public class ServerJax implements ServerJaxI{</p>
<p>&nbsp;public List&lt;User&gt; getUser(User user){<br />
&nbsp;&nbsp;System.out.println("get User:"+user.getName());<br />
&nbsp;&nbsp;return UserManager.getUsers();<br />
&nbsp;}<br />
}<br />
其中User：<br />
</p>
<p>public class User implements Serializable{</p>
<p>&nbsp;private static final long serialVersionUID = 1L;<br />
&nbsp;private String name;<br />
&nbsp;private String pwd;<br />
&nbsp;public String getName() {<br />
&nbsp;&nbsp;return name;<br />
&nbsp;}<br />
&nbsp;public void setName(String name) {<br />
&nbsp;&nbsp;this.name = name;<br />
&nbsp;}<br />
&nbsp;public String getPwd() {<br />
&nbsp;&nbsp;return pwd;<br />
&nbsp;}<br />
&nbsp;public void setPwd(String pwd) {<br />
&nbsp;&nbsp;this.pwd = pwd;<br />
&nbsp;}<br />
&nbsp;<br />
}<br />
UserManager：<br />
</p>
<p>public class UserManager {</p>
<p>&nbsp;private static List&lt;User&gt; users;<br />
&nbsp;static{<br />
&nbsp;&nbsp;users = new ArrayList&lt;User&gt;();<br />
&nbsp;&nbsp;for (int i = 0; i &lt; 10; i++) {<br />
&nbsp;&nbsp;&nbsp;User user = new User();<br />
&nbsp;&nbsp;&nbsp;user.setName("name_"+i);<br />
&nbsp;&nbsp;&nbsp;user.setPwd("pwd_"+i);<br />
&nbsp;&nbsp;&nbsp;users.add(user);<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;public static List&lt;User&gt; getUsers() {<br />
&nbsp;&nbsp;// TODO Auto-generated method stub<br />
&nbsp;&nbsp;return users;<br />
&nbsp;}</p>
<p>}</p>
然后我们使用myeclipse的根据bean生成webserver方法来产生配置文件：<br />
点击项目--》new webservice 选择根据javaclass 生成：<br />
然后就会看见 在web-info下多了sun-jaxws.xml<br />
内容：<br />
&lt;?xml version = "1.0"?&gt;<br />
&lt;endpoints version="2.0"<br />
&nbsp;xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"&gt;<br />
&nbsp;&lt;endpoint name="ServerJaxPort"<br />
&nbsp;&nbsp;implementation="com.server.ServerJax"<br />
&nbsp;&nbsp;url-pattern="/ServerJaxPort"&gt;<br />
&lt;/endpoint&gt;&lt;/endpoints&gt;<br />
web.xml也发成了改变：被添加了相应的支持这些类都在前面添加的jar里面 如果不添加就会出现com.sun.xml.ws.transport.http.servlet.WSServletContextListener不能找到的错误。<br />
&lt;servlet&gt;<br />
&nbsp; &nbsp;&lt;description&gt;JAX-WS endpoint - ServerJaxService&lt;/description&gt;<br />
&nbsp; &nbsp;&lt;display-name&gt;ServerJaxService&lt;/display-name&gt;<br />
&nbsp; &nbsp;&lt;servlet-name&gt;ServerJaxService&lt;/servlet-name&gt;<br />
&nbsp; &nbsp;&lt;servlet-class&gt;<br />
&nbsp; &nbsp;&nbsp;com.sun.xml.ws.transport.http.servlet.WSServlet<br />
&nbsp; &nbsp;&lt;/servlet-class&gt;<br />
&nbsp; &nbsp;&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />
&nbsp; &lt;/servlet&gt;<br />
&nbsp; &lt;servlet-mapping&gt;<br />
&nbsp; &nbsp;&lt;servlet-name&gt;ServerJaxService&lt;/servlet-name&gt;<br />
&nbsp; &nbsp;&lt;url-pattern&gt;/ServerJaxPort&lt;/url-pattern&gt;<br />
&nbsp; &lt;/servlet-mapping&gt;<br />
&nbsp; &lt;welcome-file-list&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />
&nbsp; &lt;/welcome-file-list&gt;<br />
&nbsp; &lt;listener&gt;<br />
&nbsp; &nbsp;&lt;listener-class&gt;<br />
&nbsp; &nbsp;&nbsp;com.sun.xml.ws.transport.http.servlet.WSServletContextListener<br />
&nbsp; &nbsp;&lt;/listener-class&gt;<br />
&nbsp; &lt;/listener&gt;&lt;/web-app&gt;<br />
ok。现在我们部署项目启动 通过以下链接访问：htttp://localhost:8080//pro/ServerJaxPort 其中ServerJaxPort 是在sun-jaxws.xml里面定义的url-pattern 这是我们就能看见<br />
我们发布的服务了：<br />
<br />
客户端：<br />
当然客户端可以通过myeclipse自动生成：我们采用不自动成的方式：也就是通过接口方式来获取（这也就是前面定义接口的原因），当然采取自动生成的方式话就不用定义接口：<br />
当然采用接口的方式：就需要接口需要的类：<br />
上面我们定义的接口：<br />
@WebService<br />
public interface ServerJaxI {<br />
&nbsp;public List&lt;User&gt; getUser(User user);<br />
}<br />
要调用这个接口就需要User 和这个接口类<br />
&nbsp;<br />
1，首先我们new 一个java project 将ServerJaxI 和User代码拷贝过来 包名相同：<br />
然后就是我们的客户端代码<br />
<p>public class Clientj {<br />
&nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;URL url = new URL("http://localhost:8080/jaxws/ServerJaxPort?wsdl");//wsdl 地址<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;QName qname = new QName("http://server.com/","ServerJaxService");&nbsp; //其中第一个参数为：namespaceURI 第二个为servername<br />
&nbsp;&nbsp;Service service = Service.create(url, qname);&nbsp; <br />
&nbsp;&nbsp;ServerJaxI s = service.getPort(ServerJaxI.class);&nbsp; <br />
&nbsp;&nbsp;User user = new User();<br />
&nbsp;&nbsp;user.setName("qiaobing");<br />
&nbsp;&nbsp;System.out.println(s.getUser(user).get(1).getName());<br />
&nbsp;&nbsp;} catch (MalformedURLException e) {<br />
&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;}<br />
运行就可以看见结果了。<br />
示例代码下载：<br />
//----------------------<br />
map讲不能得到支持 <br />
因此可以简单的封装下，（或者通过XmlAdapter&lt;ValueType, BoundType&gt;来封装）<br />
例如UserMap.java:</p>
<p>public class UserMap{</p>
<p>&nbsp;private HashMap&lt;String, User&gt; users;</p>
<p>&nbsp;public UserMap(){<br />
&nbsp;&nbsp;users = new HashMap&lt;String, User&gt;();<br />
&nbsp;}<br />
&nbsp;public HashMap&lt;String, User&gt; getUsers() {<br />
&nbsp;&nbsp;return users;<br />
&nbsp;}</p>
<p>&nbsp;public void setUsers(HashMap&lt;String, User&gt; users) {<br />
&nbsp;&nbsp;this.users = users;<br />
&nbsp;}<br />
&nbsp;public void put(String key,User user){<br />
&nbsp;&nbsp;users.put(key, user);<br />
&nbsp;}<br />
&nbsp;public User get(String key){<br />
&nbsp;&nbsp;return users.get(key);<br />
&nbsp;}<br />
}<br />
</p>
<p>这样就可以通过UserMap来传递map数据。<br />
服务端：<br />
<a href="/Files/freeman1984/jaxws.rar">/Files/freeman1984/jaxws.rar</a><br />
客户端：<br />
<a href="/Files/freeman1984/jaxwsclient.rar">/Files/freeman1984/jaxwsclient.rar</a></p>
<img src ="http://www.blogjava.net/freeman1984/aggbug/310902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-01-26 22:09 <a href="http://www.blogjava.net/freeman1984/archive/2010/01/26/310902.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHPRPC</title><link>http://www.blogjava.net/freeman1984/archive/2010/01/19/310095.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Tue, 19 Jan 2010 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/01/19/310095.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/310095.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/01/19/310095.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/310095.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/310095.html</trackback:ping><description><![CDATA[文出处：<a href="http://blog.chenlb.com/2009/02/phprpc-for-java-hello-world-demo.html">http://blog.chenlb.com/2009/02/phprpc-for-java-hello-world-demo.html</a><!-- google_ad_section_start -->
<div class="content">
<p>PHPRPC是面向服务的高性能远程过程调用协议。PHPRPC for java 是此协议的一种实现，详细请到官方看<a href="http://www.phprpc.org/zh_CN/" target="_blank">PHPRPC的介绍</a>&nbsp;，以其它rpc协议的性能对比请：<a href="http://www.javaeye.com/topic/333720" target="_blank">Java、PHPRPC、Hessian、Burlap、XML 序列化的效率对比</a>&nbsp;。我在这时只是试用下。</p>
<p>下载：<a href="http://www.phprpc.org/download/phprpc_3.0.2_java.zip" target="_blank">PHPRPC 3.0.2 for Java</a>&nbsp;, 解压到（如：f:/phprpc_3.0.2_for_java)，然后双击make.bat生成服务与客户端，生成phprpc.jar和phprpc_client.jar两个jar，把phprpc.jar放到web项目的WEB-INF/lib目录下。</p>
<p>先写个模拟业务接口：Hello.java接口与其实现MyHello.java</p>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.chenlb.phprpc; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">/** </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;业务接口 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;* </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;chenlb&nbsp;2009-2-22&nbsp;下午08:06:13 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">interface</span><span>&nbsp;Hello&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;say(String&nbsp;name); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">package com.chenlb.phprpc;
/**
* 业务接口
*
* @author chenlb 2009-2-22 下午08:06:13
*/
public interface Hello {
String say(String name);
}
</pre>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.chenlb.phprpc; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">/** </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;服务器的一个模拟任务 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;* </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;chenlb&nbsp;2009-2-22&nbsp;下午08:05:42 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;MyHello&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Hello&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;say(String&nbsp;name)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="string">"Hello&nbsp;"</span><span>+name; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">package com.chenlb.phprpc;
/**
* 服务器的一个模拟任务
*
* @author chenlb 2009-2-22 下午08:05:42
*/
public class MyHello implements Hello {
public String say(String name) {
return "Hello "+name;
}
}
</pre>
<p>然后发布业务（被远程调用的）：rpc.jsp</p>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>&lt;%@&nbsp;page&nbsp;</span><span class="keyword">import</span><span>=</span><span class="string">"com.chenlb.phprpc.*"</span><span>&nbsp;%&gt; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&lt;%@&nbsp;page&nbsp;</span><span class="keyword">import</span><span>=</span><span class="string">"org.phprpc.*"</span><span>&nbsp;%&gt; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&lt;% &nbsp;&nbsp;</span></li>
    <li class=""><span>Hello&nbsp;hello&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;MyHello(); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>PHPRPC_Server&nbsp;phprpc_server&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;PHPRPC_Server(); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>phprpc_server.add(hello); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>phprpc_server.start(request,&nbsp;response); &nbsp;&nbsp;</span></li>
    <li class=""><span>%&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">&lt;%@ page import="com.chenlb.phprpc.*" %&gt;
&lt;%@ page import="org.phprpc.*" %&gt;
&lt;%
Hello hello = new MyHello();
PHPRPC_Server phprpc_server = new PHPRPC_Server();
phprpc_server.add(hello);
phprpc_server.start(request, response);
%&gt;
</pre>
<p>当然要把Hello.class与Myhello.class放到web项目里，如WEB-INF/classes。</p>
<p>编写java客户端代码，试用：</p>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.chenlb.phprpc; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.phprpc.PHPRPC_Callback; &nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">import</span><span>&nbsp;org.phprpc.PHPRPC_Client; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;PhpRpcDemo&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PHPRPC_Client&nbsp;client&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;PHPRPC_Client(</span><span class="string">"http://localhost:8080/phprpc/rpc.jsp"</span><span>); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hello&nbsp;m&nbsp;=&nbsp;(Hello)&nbsp;client.useService(Hello.</span><span class="keyword">class</span><span>); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(m.say(</span><span class="string">"chenlb"</span><span>)); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//也可以以&nbsp;callback形式调用. </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.invoke(</span><span class="string">"say"</span><span>,&nbsp;</span><span class="keyword">new</span><span>&nbsp;Object[]&nbsp;{</span><span class="string">"other"</span><span>},&nbsp;</span><span class="keyword">new</span><span>&nbsp;PHPRPC_Callback()&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;handler(String&nbsp;result,&nbsp;Object[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"handler:"</span><span>); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(result); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"args:"</span><span>+args[</span><span class="number">0</span><span>]); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">package com.chenlb.phprpc;
import org.phprpc.PHPRPC_Callback;
import org.phprpc.PHPRPC_Client;
public class PhpRpcDemo {
public static void main(String[] args) {
PHPRPC_Client client = new PHPRPC_Client("http://localhost:8080/phprpc/rpc.jsp");
Hello m = (Hello) client.useService(Hello.class);
System.out.println(m.say("chenlb"));
//也可以以 callback形式调用.
client.invoke("say", new Object[] {"other"}, new PHPRPC_Callback() {
public void handler(String result, Object[] args) {
System.out.println("handler:");
System.out.println(result);
System.out.println("args:"+args[0]);
System.out.println();
}
});
}
}
</pre>
<p>示例了两种使用方式，输出结果为：</p>
<blockquote>
<p>Hello chenlb<br />
handler:<br />
Hello other<br />
args:other</p>
</blockquote>
<p>使用的确比较简单。可以在 <a href="http://phprpc.group.javaeye.com/" target="_blank">javaeye 群组</a>里与 PHPRPC 作者交流</p>
</div>
<img src ="http://www.blogjava.net/freeman1984/aggbug/310095.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-01-19 16:33 <a href="http://www.blogjava.net/freeman1984/archive/2010/01/19/310095.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAX-WS weService实例 c/s形式</title><link>http://www.blogjava.net/freeman1984/archive/2010/01/13/309387.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Wed, 13 Jan 2010 15:22:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/01/13/309387.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/309387.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/01/13/309387.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/309387.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/309387.html</trackback:ping><description><![CDATA[Java SE 6封装了JAX-WS(Java API for XML-Web Services)，而JAX-WS同时支持基于SOAP的Web服务和REST风格的Web服务，以下是个人写的一个实例：<br />
首先是服务端：<br />
&nbsp;&nbsp; 首先创建java项目或者web项目都可；<br />
&nbsp; &nbsp;首先编写service端接口，WebServerInterface（必须已接口形式发布）<br />
&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">@WebService(serviceName</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">testserver</span><span style="color: #000000">"</span><span style="color: #000000">,targetNamespace</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">http://testserver.com</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />@SOAPBinding(style&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;SOAPBinding.Style.RPC)<br />
<img id="Codehighlighter1_158_234_Open_Image" onclick="this.style.display='none'; Codehighlighter1_158_234_Open_Text.style.display='none'; Codehighlighter1_158_234_Closed_Image.style.display='inline'; Codehighlighter1_158_234_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_158_234_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_158_234_Closed_Text.style.display='none'; Codehighlighter1_158_234_Open_Image.style.display='inline'; Codehighlighter1_158_234_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;WebServerInterface&nbsp;</span><span id="Codehighlighter1_158_234_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_158_234_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@WebMethod<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;TestUser&nbsp;getAllTestUsersByUserName(String&nbsp;userName);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
&nbsp;TestUser.java<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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.server;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_43_428_Open_Image" onclick="this.style.display='none'; Codehighlighter1_43_428_Open_Text.style.display='none'; Codehighlighter1_43_428_Closed_Image.style.display='inline'; Codehighlighter1_43_428_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_43_428_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_43_428_Closed_Text.style.display='none'; Codehighlighter1_43_428_Open_Image.style.display='inline'; Codehighlighter1_43_428_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestUser&nbsp;</span><span id="Codehighlighter1_43_428_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_43_428_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;usetName;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;pwd;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_132_148_Open_Image" onclick="this.style.display='none'; Codehighlighter1_132_148_Open_Text.style.display='none'; Codehighlighter1_132_148_Closed_Image.style.display='inline'; Codehighlighter1_132_148_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_132_148_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_132_148_Closed_Text.style.display='none'; Codehighlighter1_132_148_Open_Image.style.display='inline'; Codehighlighter1_132_148_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;getId()&nbsp;</span><span id="Codehighlighter1_132_148_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_132_148_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;id;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_177_196_Open_Image" onclick="this.style.display='none'; Codehighlighter1_177_196_Open_Text.style.display='none'; Codehighlighter1_177_196_Closed_Image.style.display='inline'; Codehighlighter1_177_196_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_177_196_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_177_196_Closed_Text.style.display='none'; Codehighlighter1_177_196_Open_Image.style.display='inline'; Codehighlighter1_177_196_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;setId(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id)&nbsp;</span><span id="Codehighlighter1_177_196_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_177_196_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;id;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_227_249_Open_Image" onclick="this.style.display='none'; Codehighlighter1_227_249_Open_Text.style.display='none'; Codehighlighter1_227_249_Closed_Image.style.display='inline'; Codehighlighter1_227_249_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_227_249_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_227_249_Closed_Text.style.display='none'; Codehighlighter1_227_249_Open_Image.style.display='inline'; Codehighlighter1_227_249_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getUsetName()&nbsp;</span><span id="Codehighlighter1_227_249_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_227_249_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;usetName;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_293_324_Open_Image" onclick="this.style.display='none'; Codehighlighter1_293_324_Open_Text.style.display='none'; Codehighlighter1_293_324_Closed_Image.style.display='inline'; Codehighlighter1_293_324_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_293_324_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_293_324_Closed_Text.style.display='none'; Codehighlighter1_293_324_Open_Image.style.display='inline'; Codehighlighter1_293_324_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;setUsetName(String&nbsp;usetName)&nbsp;</span><span id="Codehighlighter1_293_324_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_293_324_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.usetName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;usetName;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_350_367_Open_Image" onclick="this.style.display='none'; Codehighlighter1_350_367_Open_Text.style.display='none'; Codehighlighter1_350_367_Closed_Image.style.display='inline'; Codehighlighter1_350_367_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_350_367_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_350_367_Closed_Text.style.display='none'; Codehighlighter1_350_367_Open_Image.style.display='inline'; Codehighlighter1_350_367_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getPwd()&nbsp;</span><span id="Codehighlighter1_350_367_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_350_367_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;pwd;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_401_422_Open_Image" onclick="this.style.display='none'; Codehighlighter1_401_422_Open_Text.style.display='none'; Codehighlighter1_401_422_Closed_Image.style.display='inline'; Codehighlighter1_401_422_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_401_422_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_401_422_Closed_Text.style.display='none'; Codehighlighter1_401_422_Open_Image.style.display='inline'; Codehighlighter1_401_422_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;setPwd(String&nbsp;pwd)&nbsp;</span><span id="Codehighlighter1_401_422_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_401_422_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.pwd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pwd;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
实现类：<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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">@WebService(endpointInterface</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.server.WebServerInterface</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_129_296_Open_Image" onclick="this.style.display='none'; Codehighlighter1_129_296_Open_Text.style.display='none'; Codehighlighter1_129_296_Closed_Image.style.display='inline'; Codehighlighter1_129_296_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_129_296_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_129_296_Closed_Text.style.display='none'; Codehighlighter1_129_296_Open_Image.style.display='inline'; Codehighlighter1_129_296_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;WebServerInterfaceImpl&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;WebServerInterface&nbsp;</span><span id="Codehighlighter1_129_296_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_129_296_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_203_293_Open_Image" onclick="this.style.display='none'; Codehighlighter1_203_293_Open_Text.style.display='none'; Codehighlighter1_203_293_Closed_Image.style.display='inline'; Codehighlighter1_203_293_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_203_293_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_203_293_Closed_Text.style.display='none'; Codehighlighter1_203_293_Open_Image.style.display='inline'; Codehighlighter1_203_293_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;TestUser&nbsp;getAllTestUsersByUserName(String&nbsp;userName)&nbsp;</span><span id="Codehighlighter1_203_293_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_203_293_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;TestUserManager.getUserByName(userName);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
接下来是TestUserManager.java(用户管理类)<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"><img id="Codehighlighter1_29_489_Open_Image" onclick="this.style.display='none'; Codehighlighter1_29_489_Open_Text.style.display='none'; Codehighlighter1_29_489_Closed_Image.style.display='inline'; Codehighlighter1_29_489_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_29_489_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_29_489_Closed_Text.style.display='none'; Codehighlighter1_29_489_Open_Image.style.display='inline'; Codehighlighter1_29_489_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestUserManager&nbsp;</span><span id="Codehighlighter1_29_489_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_29_489_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">TestUser</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;users;<br />
<img id="Codehighlighter1_76_301_Open_Image" onclick="this.style.display='none'; Codehighlighter1_76_301_Open_Text.style.display='none'; Codehighlighter1_76_301_Closed_Image.style.display='inline'; Codehighlighter1_76_301_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_76_301_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_76_301_Closed_Text.style.display='none'; Codehighlighter1_76_301_Open_Image.style.display='inline'; Codehighlighter1_76_301_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span id="Codehighlighter1_76_301_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_76_301_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">TestUser</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
<img id="Codehighlighter1_139_298_Open_Image" onclick="this.style.display='none'; Codehighlighter1_139_298_Open_Text.style.display='none'; Codehighlighter1_139_298_Closed_Image.style.display='inline'; Codehighlighter1_139_298_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_139_298_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_139_298_Closed_Text.style.display='none'; Codehighlighter1_139_298_Open_Image.style.display='inline'; Codehighlighter1_139_298_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;=</span><span style="color: #000000">10</span><span style="color: #000000">;i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span id="Codehighlighter1_139_298_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_139_298_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestUser&nbsp;testUser&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TestUser();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;testUser.setId(i);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;testUser.setUsetName(</span><span style="color: #000000">"</span><span style="color: #000000">userName_</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">i);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;testUser.setPwd(</span><span style="color: #000000">"</span><span style="color: #000000">pwd_</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">i);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users.add(testUser);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_359_487_Open_Image" onclick="this.style.display='none'; Codehighlighter1_359_487_Open_Text.style.display='none'; Codehighlighter1_359_487_Closed_Image.style.display='inline'; Codehighlighter1_359_487_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_359_487_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_359_487_Closed_Text.style.display='none'; Codehighlighter1_359_487_Open_Image.style.display='inline'; Codehighlighter1_359_487_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;TestUser&nbsp;getUserByName(String&nbsp;userName)</span><span id="Codehighlighter1_359_487_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_359_487_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_391_469_Open_Image" onclick="this.style.display='none'; Codehighlighter1_391_469_Open_Text.style.display='none'; Codehighlighter1_391_469_Closed_Image.style.display='inline'; Codehighlighter1_391_469_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_391_469_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_391_469_Closed_Text.style.display='none'; Codehighlighter1_391_469_Open_Image.style.display='inline'; Codehighlighter1_391_469_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(TestUser&nbsp;testUser:users)</span><span id="Codehighlighter1_391_469_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_391_469_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_439_465_Open_Image" onclick="this.style.display='none'; Codehighlighter1_439_465_Open_Text.style.display='none'; Codehighlighter1_439_465_Closed_Image.style.display='inline'; Codehighlighter1_439_465_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_439_465_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_439_465_Closed_Text.style.display='none'; Codehighlighter1_439_465_Open_Image.style.display='inline'; Codehighlighter1_439_465_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(testUser.getUsetName().equals(userName))</span><span id="Codehighlighter1_439_465_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_439_465_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&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;testUser;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
这样server就编写好了 然后就是发布server：当然如果是web项目的话可以通过servlet发布 当然要设置：<font color="#c60a00">load-on-startup</font> 为1 在tomcat启动时初始化发布<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"><img id="Codehighlighter1_39_133_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_133_Open_Text.style.display='none'; Codehighlighter1_39_133_Closed_Image.style.display='inline'; Codehighlighter1_39_133_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_39_133_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_39_133_Closed_Text.style.display='none'; Codehighlighter1_39_133_Open_Image.style.display='inline'; Codehighlighter1_39_133_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><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 id="Codehighlighter1_39_133_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_39_133_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Endpoint.publish(</span><span style="color: #000000">"</span><span style="color: #000000">http://127.0.0.1:10100/mywebserver</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WebServerInterfaceImpl());&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
运行后webserver就发布好了 可以同ie访问<br />
<br />
接下来是客户端的访问：<br />
客户端可以同eclipse通过wsdl的url来自动生成<br />
也可以自己实现<br />
例如：<br />
URL url = new URL("http://127.0.0.1:10100/mywebserver?wsdl");<br />
QName qname = new QName("<a href="http://service.myweb/%22,%22TimeServerImplService">http://service.myweb/","TimeServerImplService</a>");&nbsp;&nbsp;其中第一个参数为：namespaceURI 第二个为localPart<br />
Service service = Service.create(url, qname);&nbsp;&nbsp;<br />
WebServerInterface = service.getPort(WebServerInterface .class);&nbsp;&nbsp;<br />
然后就可以操作了<br />
<br />
代码下载：<br />
<a href="/Files/freeman1984/src_server.rar">/Files/freeman1984/src_server.rar</a>&nbsp;<a href="/Files/freeman1984/src_client.rar">/Files/freeman1984/src_client.rar</a><br />
<br />
 <img src ="http://www.blogjava.net/freeman1984/aggbug/309387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-01-13 23:22 <a href="http://www.blogjava.net/freeman1984/archive/2010/01/13/309387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>axis webService发布webservice和client的简单实现</title><link>http://www.blogjava.net/freeman1984/archive/2010/01/13/309340.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Wed, 13 Jan 2010 09:59:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/01/13/309340.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/309340.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/01/13/309340.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/309340.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/309340.html</trackback:ping><description><![CDATA[服务端：通过jws方式实现<br />
&nbsp; 首先加入axis所需的jar 配置web.xml:<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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1.0</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;encoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">web</span><span style="color: #000000">-</span><span style="color: #000000">app&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">WebApp_ID</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">2.4</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;xmlns</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">http://java.sun.com/xml/ns/j2ee</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;xmlns:xsi</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">http://www.w3.org/2001/XMLSchema-instance</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;xsi:schemaLocation</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">http://java.sun.com/xml/ns/j2ee&nbsp;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">display</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">vote</span><span style="color: #000000">&lt;/</span><span style="color: #000000">display</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&nbsp;Context&nbsp;Configuration&nbsp;locations&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;Spring&nbsp;XML&nbsp;files&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">display</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">Apache</span><span style="color: #000000">-</span><span style="color: #000000">Axis</span><span style="color: #000000">&lt;/</span><span style="color: #000000">display</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">listener</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">listener</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000">org.apache.axis.transport.http.AxisHTTPSessionListener</span><span style="color: #000000">&lt;/</span><span style="color: #000000">listener</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">listener</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">AxisServlet</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.axis.transport.http.AxisServlet<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">AdminServlet</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.axis.transport.http.AdminServlet<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">load</span><span style="color: #000000">-</span><span style="color: #000000">on</span><span style="color: #000000">-</span><span style="color: #000000">startup</span><span style="color: #000000">&gt;</span><span style="color: #000000">100</span><span style="color: #000000">&lt;/</span><span style="color: #000000">load</span><span style="color: #000000">-</span><span style="color: #000000">on</span><span style="color: #000000">-</span><span style="color: #000000">startup</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">SOAPMonitorService</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.axis.monitor.SOAPMonitorService<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">init</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">SOAPMonitorPort</span><span style="color: #000000">&lt;/</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">5001</span><span style="color: #000000">&lt;/</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">init</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">load</span><span style="color: #000000">-</span><span style="color: #000000">on</span><span style="color: #000000">-</span><span style="color: #000000">startup</span><span style="color: #000000">&gt;</span><span style="color: #000000">100</span><span style="color: #000000">&lt;/</span><span style="color: #000000">load</span><span style="color: #000000">-</span><span style="color: #000000">on</span><span style="color: #000000">-</span><span style="color: #000000">startup</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">AxisServlet</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">/</span><span style="color: #000000">AxisServlet</span><span style="color: #000000">&lt;/</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">AxisServlet</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;*</span><span style="color: #000000">.jws</span><span style="color: #000000">&lt;/</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">AxisServlet</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_1608_2242_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1608_2242_Open_Text.style.display='none'; Codehighlighter1_1608_2242_Closed_Image.style.display='inline'; Codehighlighter1_1608_2242_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1608_2242_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1608_2242_Closed_Text.style.display='none'; Codehighlighter1_1608_2242_Open_Image.style.display='inline'; Codehighlighter1_1608_2242_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;/</span><span style="color: #000000">services</span><span id="Codehighlighter1_1608_2242_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_1608_2242_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&lt;/url-pattern&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&lt;/servlet-mapping&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&lt;servlet-mapping&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;SOAPMonitorService&lt;/servlet-name&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;/SOAPMonitor&lt;/url-pattern&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&lt;/servlet-mapping&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&lt;servlet-mapping&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;AdminServlet&lt;/servlet-name&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;/servlet/AdminServlet&lt;/url-pattern&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&lt;/servlet-mapping&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&lt;session-config&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;session-timeout&gt;20&lt;/session-timeout&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/session-config&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&lt;mime-mapping&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&lt;extension&gt;wsdl&lt;/extension&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mime-type&gt;text/xml&lt;/mime-type&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&lt;/mime-mapping&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&lt;mime-mapping&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&lt;extension&gt;xsd&lt;/extension&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&lt;mime-type&gt;text/xml&lt;/mime-type&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&lt;/mime-mapping&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&lt;/web-app&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span></div>
</span><br />
将接口文件实例内容如下：Test.jws<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"><img id="Codehighlighter1_18_94_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_94_Open_Text.style.display='none'; Codehighlighter1_18_94_Closed_Image.style.display='inline'; Codehighlighter1_18_94_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_18_94_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_18_94_Closed_Text.style.display='none'; Codehighlighter1_18_94_Open_Image.style.display='inline'; Codehighlighter1_18_94_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><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;</span><span id="Codehighlighter1_18_94_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_18_94_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_63_92_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_92_Open_Text.style.display='none'; Codehighlighter1_63_92_Closed_Image.style.display='inline'; Codehighlighter1_63_92_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_63_92_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_63_92_Closed_Text.style.display='none'; Codehighlighter1_63_92_Open_Image.style.display='inline'; Codehighlighter1_63_92_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;doRequest(String&nbsp;request)</span><span id="Codehighlighter1_63_92_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_63_92_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">do<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
将次文件放在<font style="background-color: #cce8cf">WebRoot</font>下 即可。<br />
<br />
客户端，使用xfire实现<br />
&nbsp; 首先拿到wsdl的url：webserviceUrl<br />
通过&nbsp;<font style="background-color: #cce8cf">&nbsp;<font style="background-color: #cce8cf">webServiceClient</font> webServiceClient = new Client(new URL(webserviceUrl));创建客户端<br />
然后就可以通过<font style="background-color: #cce8cf">Object[] i = webServiceClient.invoke("webservers方法名", new Object[]{参数});来调用。<br />
<br />
</font><br />
<br />
</font><br />
<img src ="http://www.blogjava.net/freeman1984/aggbug/309340.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-01-13 17:59 <a href="http://www.blogjava.net/freeman1984/archive/2010/01/13/309340.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>