XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率。
XFire是codeHaus组织提供的一个开源框架,它构建了POJO和SOA之间的桥梁,主要特性就是支持将POJO通过非常简单的方式发布成Web服务,这种处理方式不仅充分发挥了POJO的作用,简化了Java应用转化为Web服务的步骤和过程,也直接降低了SOA的实
现难度,为企业转向SOA架构提供了一种简单可行的方式。运行环境: Tomcat 6.0,,jdk 1.6
开发工具:Eclipse
开发之前请先下载xfire-distribution-1.2.6.zip压缩包,并解压!
网盘下载连接:百度云盘
1. 在Eclipse中新建一个Dynamic Web Project项目,自定义命名,我命名为XFireWebService;
2. 导入XFire用户库,该库中应包含xfire-1.2.6目录下的xfire-all-1.2.6.jar文件,以及xfire-1.26\lib目录下的所有jar文件;
3. 将上述的XFire用户库中的所有文件拷贝到XFireWebService项目的WebContent\WEB-INF\lib目录下;
4. 修改WebContent\WEB-INF\web.xml配置文件的内容,下面是修改后web.xml(蓝色部分),web.xml中添加的servlet映射表明,所有匹配“/services/*”的url请求全部交给org.codehaus.xfire.transport.http.XFireConfigurableServlet来处理;
XFireWebService
index.jsp
XFireServlet
org.codehaus.xfire.transport.http.XFireConfigurableServlet
XFireServlet
/servlet/XFireServlet/*
XFireServlet
/services/*
接口:XFireServiceInterface.java
package com.webservice;
/**
* 功能描述:XFire服务接口
* @author By_吥悔
*/
public interface XFireServiceInterface {
public String print();
public int sum(int x, int y);
}
package com.webservice;
/**
* 功能描述:XFire服务接口的实现类
* @author By_吥悔
*/
public class XFireService implements XFireServiceInterface {
public String print() {
return "This is XFireService 服务测试成功!";
}
public int sum(int x, int y) {
return x + y;
}
}
6. 在WebContent\META-INF目录下新建xfire文件夹,然后在xfire目录下添加一个XFire使用的配置文件services.xml,该配置文件中的内容反映了要将哪些java类发布为web服务。本例中的services.xml内容如下,XFire会借助Spring来解析services.xml,从中提取需要发布为WebService的配置信息;
XFireService
http://com.webservice/XFireService
com.webservice.XFireService
7. 很多文章介绍到这里就完了,然而当我按照他们所说的启动WebService,然后通过http://localhost:8080/XFireWebService/services/XFireService?wsdl来访问服务描述时,却抛出了异常,说services.xml文件不存在9. 修改完成,然后再次启动Tomcat, 在IE中输入http://localhost:8080/XFireWebService/services/XFireService?wsdl会得到正确的web服务描述文档如下;
10. 测试刚发布的XFire WebService:
测试类:XfireWebServiceClient.java
package com.webservice.client;
import java.net.MalformedURLException;
import org.codehaus.xfire.XFire;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import com.webservice.XFireServiceInterface;
/**
* 功能描述:XFire服务测试端
* @author By_吥悔
*/
public class XfireWebServiceClient {
public static void main(String[] args) {
Service serviceModel = new ObjectServiceFactory().create(XFireServiceInterface.class);
XFire xfire = XFireFactory.newInstance().getXFire();
XFireProxyFactory factory = new XFireProxyFactory(xfire);
String serviceUrl = "http://localhost:8080/XFireWebService/services/XFireService";
XFireServiceInterface client = null;
try {
client = (XFireServiceInterface) factory.create(serviceModel, serviceUrl);
} catch (MalformedURLException e) {
System.err.println( "Client call webservice has exception: " + e.toString());
}
String result1 = client.print();
int result2 = client.sum(6, 6);
System.err.println(result1 + " : " + result2);
}
}
打印结果:
--------------------------------------------------------------------------------------------------------------------
一花一世界,一叶一菩提。
我自落叶飘零,寻梦旅途繁忙!
Author: