[Java] Xfire开发WebService

简介:

         XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率。

       XFire是codeHaus组织提供的一个开源框架,它构建了POJOSOA之间的桥梁,主要特性就是支持将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:



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值