简介:
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
二、开发service(服务端)
开发之前请先下载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来处理;
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>XFireWebService</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<span style="color:#000099;"><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></span>
</web-app>
5. 编写需要发布为WebService的Java接口和实现类,这个例子中是一个非常简单的XFireServiceInterface.java 和XFireService.java;
接口:XFireServiceInterface.java
<span style="color:#000000;">package com.webservice;
/**
* 功能描述:XFire服务接口
* @author By_吥悔
*/
public interface XFireServiceInterface {
public String print();
public int sum(int x, int y);
}</span>
实现类:XFireService.java
<span style="color:#000000;">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;
}
}</span>
6. 在WebContent\META-INF目录下新建xfire文件夹,然后在xfire目录下添加一个XFire使用的配置文件services.xml,该配置文件中的内容反映了要将哪些java类发布为web服务。本例中的services.xml内容如下,XFire会借助Spring来解析services.xml,从中提取需要发布为WebService的配置信息;
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>XFireService</name>
<namespace>http://com.webservice/XFireService</namespace>
<serviceClass>com.webservice.XFireService</serviceClass>
</service>
</beans>
7. 很多文章介绍到这里就完了,然而当我按照他们所说的启动WebService,然后通过http://localhost:8080/XFireWebService/services/XFireService?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
8. 在WebContent\WEB-INF目录下新建classes文件夹,然后需要将WebContent下的整个META-INF文件夹剪切到新建的classes文件夹下。
到这里,项目的完整目录结构如下:
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: