用XFire发布WebService

WebService的概念就不多说了,直接进入主题:如何用XFire发布WebService。比较流行的发布WebService的框架有XFire、CXF、AXIS等等。到目前为止接触过的有XFire和CXF,所以想写个例子,以备以后不时之需。

要使用XFire,首先需要去下载XFire的Jar包,然后新建一个Web工程,将XFire的jar包放在lib目录中,全部引入。在web.xml文件中加入XFire的Servlet,代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<welcome-file-list>
		<welcome-file>index.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>/services</url-pattern>
	</servlet-mapping>
</web-app>

接口很简单,就是一个返回字符串的方法。在WebService的方法中,建议输入参数和返回参数都设为String类型,设置为对象类型的话还得做转换,比较麻烦。在我所做过的项目的WebService中,不管是我提供服务还是我去调用别人的服务,输入参数和返回参数都是String类型的。

public interface IXFireService {
 public String sayHello(String name);
}

接下来提供一个接口的实现类,代码如下:

package cn.com.huixin.webservice.impl;

public class XFireServiceImpl implements IXFireService {

	public String sayHello(String name) {
		return name + " say: Hello!";
	}

}

代码比较简单,就不再赘述了。接口和实现类准备好后,就该XFire的配置文件了,在这个文件中将上述的接口和实现类加入配置之后,才能将其作为WebService发布出去。按照XFire的约定,要在工程的classes目录中建一个名为META-INF的文件夹,在这个文件夹中建一个xfire的文件夹,在该文件夹中建一个名为services.xml的配置文件。所以在工程的src\META-INF\xfire路径下建这样一个文件,Eclipse编译之后,就会在classes\META-INF\xfire目录中出现services.xml文件。services.xml文件的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
	<service>
		<name>xfireService</name>
		<namespace>
			http://www.huixin.com.cn/webservice/helloworld
		</namespace>
		<serviceClass>cn.com.huixin.webservice.IXFireService</serviceClass>
		<implementationClass>
			cn.com.huixin.webservice.impl.XFireServiceImpl
		</implementationClass>
	</service>
</beans>

其中,name节点指明了WebService的地址,namespace指明了WebService的命名空间,命名空间可以随便取,我查了一下,网上也没说明白命名空间的具体作用。serviceClass节点指明了WebService的接口,包括这个接口的包名。implementationClass节点是WebService接口的实现类的完整路径名。这个文h件配置好之后,WebService的地址也就确定了,地址为http://主机地址:端口号/工程名/在web.xml文件中配置的XFire的Servlet的mapping的模式/在services.xml文件中配置的name节点值。以我这个例子来说,主机就是localhost,端口号是tomcat的默认端口号8080,工程名是webservice,在web.xml文件中配置的XFireConfigurableServlet的mapping模式是services,在services.xml文件中配置的name节点的值是xfireService,所以我的这个WebService的地址就是:http://localhost:8080/webservice/services/xfireService。将工程启动起来,在IE浏览器中访问http://localhost:8080/webservice/services/xfireService?wsdl这个WebService的wsdl地址,如果出现类似下边的xml文件格式的画面,就说明WebService发布成功了:

WebService发布成功之后,就可以写客户端来访问这个Web服务了。下来介绍如何使用XFire来编写客户端访问这个WebService。

新建一个java工程,将XFire的Jar包引入。我们使用的这种方式有一个缺点,就是在客户端必须知道WebService的接口,所以现将WebService的接口IXFireService复制过来,然后新建一个java类,名字为XFireClient,代码如下:

package cn.com.huixin.webservice;

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;

public class XFireClient {

	public static void main(String[] args) {
		Service serviceModel = new ObjectServiceFactory().create(IXFireService.class);

		XFire xfire = XFireFactory.newInstance().getXFire();
		XFireProxyFactory factory = new XFireProxyFactory(xfire);
		String serviceUrl = "http://localhost:8080/webservice/services/xfireService";
		IXFireService client = null;
		try {
			client = (IXFireService) factory.create(serviceModel, serviceUrl);
		} catch (Exception e) {
			System.out.println("Client call webservice has exception: " + e.toString());
		}

		String retvalue = client.sayHello("andrew Lau");

		System.out.println(retvalue);
	}

}

其中的serviceUrl就是我们发布的WebService的地址,注意此处后边不需要“?wsdl”,IXFireService就是WebService的接口。

在此后的博文中我会介绍不需要引入WebService接口来调用WebService的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.xfire.core.client; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory; import com.xfire.core.entity.UserInfo; import com.xfire.core.service.IUserInfoService; /** *@author jilongliang *@Date 2012-3-5 * */ public class UserInfoClient { public static void main(String[] args) { getServiceList(); setServiceList(); } static String url = "http://localhost:8081/xfire/services/UserInfo"; /** * */ public static void getServiceList() { Service service = new ObjectServiceFactory() .create(IUserInfoService.class); try { IUserInfoService iAddressService = (IUserInfoService) new XFireProxyFactory() .create(service, url); List list = (ArrayList) iAddressService .getAddressList(); System.out.println("一共多少条数据:" + list.size()); for (Iterator iter = list.iterator(); iter.hasNext();) { UserInfo a = iter.next(); System.out.println(a); } } catch (MalformedURLException e) { e.printStackTrace(); } } public static void setServiceList() { Service service = new ObjectServiceFactory() .create(IUserInfoService.class); try { IUserInfoService iAddressService = (IUserInfoService) new XFireProxyFactory() .create(service, url); List listAdd = new ArrayList(); UserInfo address = new UserInfo(); address.setIdentifier(1); address.setCountry("中國"); address.setProivice("廣東省"); address.setCity("陽江"); address.setAddress("廣東陽春"); address.setPostCode("1111111"); address.setExist(false); address.setArrary(new String[] { "22", "23", "24" }); listAdd.add(address); address.setIdentifier(2); address.setCountry("中國"); address.setProivice("廣東省"); address.setCity("陽江"); address.setAddress(

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值