构建web服务端(参考http://blog.csdn.net/sxqem/archive/2006/06/05/774327.aspx)
1.在eclipse中新建名为xfireTest的dynamic Web Project项目2.导入XFire用户库到WebContent/WEB-INF/lib目录下。该库中应包含xfire-1.1目录下的xfire-all-1.1.jar文件,以及xfire-1.1/lib目录下的所有文件
3.修改WebContent/WEB-INF/web.xml配置文件的内容,下面是修改后web.xml (红色部分为修改内容):
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name> xfireTest</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>XFireServlet</servlet-name> <servlet-class> org.codehaus.xfire.transport.http.XFireConfigurableServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/servlet/XFireServlet/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app> |
4.编写需要发布为web service的Java类,这个例子中编写了一个简单的Hello.java,代码如下:
package com.life; public class Hello { |
5.在WebContent/META-INF目录下新建xfire文件夹,然后在xfire目录下添加一个XFire使用的配置文件services.xml,该配置文件中的内容反映了要将哪些java类发布为web服务。本例中的services.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?> |
XFire会借助Spring来解析services.xml从中提取需要发布为WebService的配置信息。
很多文章介绍到这里就完了,然而当按照他们所说的启动WebService ,然后通过http://localhost:8080/xfireTest/services/Hello?wsdl 来访问服务描述时,却抛出了异常,说services.xml文件不存在
“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”.
6.以上的问题的解决方案:在WebContent/WEB-INF目录下新建classes文件夹,然后需要将WebContent下的整个META-INF文件夹剪切到新建的classes文件夹下。
至此,服务器端的构建已完成,下面是eclipse下的项目文件结构图:
客户端的构建
说明:本客户端使用xfire针对eclipse开发的插件(还可使用ant生成客户端,请参考其他材料),下载和使用说明参见:http://xfire.codehaus.org/Eclipse+Plugin
1.在eclipse中新建一个名为helloClient的java object。
2.使用xfire插件调用服务器端的wsdl(web服务描述语言)文档生成客户端可调用的java类(步骤参见官网说明)。
3.新建一个名为Client的客户端类。其代码如下:
package life.com.hello; public class Client { |
4.如果这个时候运行,你可能会遇见以下报错信息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/httpclient/methods/RequestEntity |
这是由于缺少apache的commons httpclient库文件.添加进去再试,又报错
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException |
这是由于缺少apache的commons codec库文件,添加进去再试,成功显示如下
发件人 备用 |
客户端项目文件结构图:
转载于:https://blog.51cto.com/cainiaobo/941965