﻿<?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-走好脚下的路,让别人去说吧!-随笔分类-Java技术-WebService</title><link>http://www.blogjava.net/human2008/category/28762.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 11 Jan 2008 09:28:18 GMT</lastBuildDate><pubDate>Fri, 11 Jan 2008 09:28:18 GMT</pubDate><ttl>60</ttl><item><title>Java －－ 在Eclipse上使用XFire开发WebService </title><link>http://www.blogjava.net/human2008/archive/2008/01/11/174493.html</link><dc:creator>灵!</dc:creator><author>灵!</author><pubDate>Fri, 11 Jan 2008 01:31:00 GMT</pubDate><guid>http://www.blogjava.net/human2008/archive/2008/01/11/174493.html</guid><wfw:comment>http://www.blogjava.net/human2008/comments/174493.html</wfw:comment><comments>http://www.blogjava.net/human2008/archive/2008/01/11/174493.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/human2008/comments/commentRss/174493.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/human2008/services/trackbacks/174493.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 终于，使用Java完成了一个WebService的例子，其中的一个非常小的问题，折腾了我将近一天的时间。下面给出步骤，说明在Java平台上如何开发WebService。<br />
<br />
&nbsp;&nbsp;&nbsp; 采用的工具：Eclipse3.1.2 + Tomcat5.5 + XFire1.1 。使用XFire开发WebService应该说非常的容易，只需要按照下面例子的步骤来做：<br />
<br />
（1）在Eclipse中新建一个dynamic Web Project ，假设名为XFireZhuweiTest。<br />
<br />
（2）导入XFire用户库。该库中应包含xfire-1.1目录下的xfire-all-1.1.jar文件，以及<strong>xfire-1.1\lib</strong>目录下的所有文件。<br />
<br />
（3）将上述的XFire用户库中的所有文件拷贝到XFireZhuweiTest项目的<strong>WebContent\WEB-INF\lib</strong>目录下。<br />
<br />
（4）修改<strong>WebContent\WEB-INF\web.xml</strong>配置文件的内容，下面是修改后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">&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;<br />
&lt;web-app&nbsp;id="WebApp_ID"&nbsp;version="2.4"&nbsp;xmlns="http://java.sun.com/xml/ns/j2ee"&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&nbsp;xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee&nbsp;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;display-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;XFireZhuweiTest&lt;/display-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;welcome-file-list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;welcome-file&gt;default.html&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;welcome-file&gt;default.htm&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;welcome-file&gt;default.jsp&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/welcome-file-list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.codehaus.xfire.transport.http.XFireConfigurableServlet<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/servlet&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;/servlet/XFireServlet<span style="color: red">/*&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/servlet-mapping&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;/services/*&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&lt;/web-app&gt;<br />
</span></div>
<p>&nbsp;&nbsp;&nbsp; web.xml中添加的servlet映射表明，所有匹配&#8220;/services/*&#8221;的url请求全部交给org.codehaus.xfire.transport.http.XFireConfigurableServlet来处理。<br />
<br />
（5）编写需要发布为WebService的Java类，这个例子中是一个非常简单的MathService.java。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">package&nbsp;com.zhuweisky.xfireDemo;<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MathService&nbsp;<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;Add(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a&nbsp;,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;b)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;a</span><span style="color: #000000">+</span><span style="color: #000000">b&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<p>（6）在<strong>WebContent\META-INF</strong>目录下新建<strong>xfire文件夹</strong>，然后在xfire目录下添加一个XFire使用的配置文件services.xml，该配置文件中的内容反映了要将哪些java类发布为web服务。本例中的services.xml内容如下：<br />
<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #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 />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">beans&nbsp;xmlns</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">http://xfire.codehaus.org/config/1.0</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">service</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">MathService</span><span style="color: #000000">&lt;/</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&gt;</span><span style="color: #000000">http:</span><span style="color: #008000">//</span><span style="color: #008000">com.zhuweisky.xfireDemo/MathService&lt;/namespace&gt;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">serviceClass</span><span style="color: #000000">&gt;</span><span style="color: #000000">com.zhuweisky.xfireDemo.MathService</span><span style="color: #000000">&lt;/</span><span style="color: #000000">serviceClass</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">service</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">beans</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span></div>
<br />
&nbsp;&nbsp;&nbsp; XFire会借助Spring来解析services.xml，从中提取需要发布为WebService的配置信息。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;很多文章介绍到这里就完了，然而当我按照他们所说的启动WebService&nbsp;，然后通过<a href="http://localhost:8080/XFireZhuweiTest/services/MathService?wsdl">http://localhost:8080/XFireZhuweiTest/services/MathService?wsdl</a>&nbsp;来访问服务描述时，却抛出了异常，说services.xml文件不存在－－<br />
&#8220;org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [META-INF/xfire/services.xml]; nested exception is java.io.FileNotFoundException: class path resource [META-INF/xfire/services.xml] cannot be opened because it does not exist&#8221;。&nbsp;&nbsp; <br />
<br />
（7）非常关键的一点，就是这个小难题花费了我将近一天的时间。<br />
&nbsp;&nbsp;&nbsp; 在<strong>WebContent\WEB-INF</strong>目录下新建<strong>classes</strong>文件夹，然后需要将<strong>WebContent</strong>下的整个<strong>META-INF</strong>文件夹剪切到新建的classes文件夹下。<br />
&nbsp;&nbsp;&nbsp; 到这里，项目的完整目录结构如下：<br />
<br />
<img height="336" alt="" src="http://www.cnblogs.com/images/cnblogs_com/zhuweisky/xfireTest.JPG" width="232" border="0" /><br />
<br />
（8）在Package Explorer中选中XFireZhuweiTest项目，右键-&gt;Run As -&gt;Run On Server，关联到你机器上的TomCat，然后会启动Tomcat，以启动web服务。（注意，在进行此步骤之前，请先停止TomCat）&nbsp;
<p>（9）在IE中输入 <a href="http://localhost:8080/XFireZhuweiTest/services/MathService?wsdl">http://localhost:8080/XFireZhuweiTest/services/MathService?wsdl</a>&nbsp;会得到正确的web服务描述文档。</p>
<p>（10）测试刚发布的webService。我使用C#动态调用Web服务：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span><span style="color: #008000">C#</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:8080/XFireZhuweiTest/services/MathService</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">object</span><span style="color: #000000">[]&nbsp;args&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">{</span><span style="color: #000000">1</span><span style="color: #000000">,</span><span style="color: #000000">2</span><span style="color: #000000">}&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ESFramework.WebService.WebServiceHelper.InvokeWebService(url&nbsp;,</span><span style="color: #000000">"</span><span style="color: #000000">Add</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;,args)&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(result.ToString());</span></div>
<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;（关于C#动态调用Web服务，请参见<a href="http://zhuweisky.cnblogs.com/archive/2005/12/07/292472.html">这里</a>）<br />
<br />
&nbsp;&nbsp;&nbsp; 执行后，弹出对话框，显示结果是3。 <br />
</p>
<img src ="http://www.blogjava.net/human2008/aggbug/174493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/human2008/" target="_blank">灵!</a> 2008-01-11 09:31 <a href="http://www.blogjava.net/human2008/archive/2008/01/11/174493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>