您的位置:首页 > 其它

使用XFire开发WebServices服务端

2010-12-17 17:13 393 查看
关于XFire的集合映射:这里使用了JDK5.0提供的
新特性中的泛型机制 ,所以不需要<InterfaceName>.aegis.xml
文件

如果您使用的是JDK4
,那么就需要配置<InterfaceName>.aegis.xml
文件,相关资料请找Google老师

交待一下我的开发环境:MyEclipse6.5Tomcat-6.0.10
JDK1.5.0_08XFire-1.2.6

如果对WebServics还不是很了解,请参阅我之前写过的一篇文章——What is WebServices

MyEclipse6.5自身便提供了对XFire的支持,所以我们可以直接创建一个Web Service Project

创建步骤——略。网上有很多,希望勤快的您能够自行查阅

下面展示的是WebServices服务端的全部代码代码已亲测,全部通过

其中包含了使用XFire处理简单对象的传递、对象的传递、List的传递



首先是web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 	<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>
<!-- XFireServlet拦截了所有关于/services/*的请求,即只在这个URI下开放WebService服务 -->
<!-- 所以对外系统开放的SebService的URL基本上都是【http://127.0.0.1:端口/项目/services/服务名】的形式 -->
<!-- 当我们将该WebService项目部署到Tomcat上之后,打开浏览器,然后输入http://127.0.0.1:8080/XFire_demo/services/XFireServer?wsdl -->
<!-- 其中XFireServer是services.xml中<service>标签的<name>元素所定义的内容,而问号后面的wsdl参数表示查看该Web服务的WSDL(Web服务描述语言)文件 -->


然后是services.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 该文件用于将我们写的一般的Java类暴露成WebService -->
<!-- This file should be placed in your classpath at "META-INF/xfire/services.xml" -->
<!-- 这是XFire官网上说的,即services.xml文件需要保存在classpath下面的/META-INF/xfire/目录中 -->
<!-- 但MyEclipse却在项目中建立了一个WebService文件夹来保存services.xml文件 -->
<!-- 其实MyEclipse已帮我们映射好了位置,它会自动将该文件存放在WEB-INF/classes/META-INF/xfire/目录下 -->
<beans xmlns="http://xfire.codehaus.org/config/1.0">
	<!-- service标签和它所包含的XML内容为发布成Web服务的POJO提供完整的描述 -->
	<!-- ★★注意★★在使用XFire与Spring2.0集成时,正常情况下,控制台会报告异常 -->
	<!-- ★★注意★★此时把xmlns="http://xfire.codehaus.org/config/1.0"写到<service>标签里面,即可 -->
	<!-- ★★注意★★<beans><service xmlns="http://xfire.codehaus.org/config/1.0">...<servcie><beans> -->
	<service>
		<!-- Web服务被发布时所采用的唯一名称,即我们的WebServices服务对外提供的名字 -->
		<!-- 该名字可以是任何的合法名字,它将会被客户端程序和其它需要调用我们的服务的组件用到 -->
		<!-- 并且,服务准备好(比如发布到Tomcat上)以后,可以在浏览器中使用该名字来查看WSDL -->
		<!-- The name element is required -->
		<name>XFireServer</name>
		
		<!-- Web服务发布时所使用的命名空间 -->
		<!-- The namespace element is optional -->
		<namespace>http://www.jadyer.com/XFireDemo</namespace>
		
		<!-- 指定所要提供WebServices服务的Java类的名字,包括包名和类名 -->
		<!-- 这里我们指定的是HelloService接口 -->
		<!-- 如果我们的Java类没有实现任何接口,那么这里就可以直接指定Java类的名字 -->
		<!-- The serviceClass element is required -->
		<serviceClass>com.jadyer.server.HelloService</serviceClass>
		
		<!-- 指定当WebServices服务被调用时,服务端用来处理请求的接口的Java实现类,包括包名和类名 -->
		<!-- 这是一个可选元素,如果<serviceClass>指定的是一个接口,那么就必须在这里指定相应的实现类 -->
		<!-- The implementationClass element is optional -->
		<implementationClass>com.jadyer.server.HelloServiceImpl</implementationClass>
	</service>
</beans>


接着是暴露成Web服务的接口类

package com.jadyer.server;
import java.util.List;
import com.jadyer.model.Person;
import com.jadyer.model.User;
/**
 * 暴露成web服务的接口类
 */
public interface HelloService {
	public String sayHello(String name); //简单对象的传递
	public Person getPerson(User u); //对象的传递
	public List<Person> getPersonList(Integer age, String name); //List的传递
}


然后是暴露成Web服务的接口的实现类

package com.jadyer.server;
import java.util.ArrayList;
import java.util.List;
import com.jadyer.model.Person;
import com.jadyer.model.User;
/**
 * 暴露成web服务的接口的实现类
 * @see 该类必须显式或隐式的提供一个public的无参的【即默认的】构造函数
 * @see 否则XFire将无法初始化该类
 */
public class HelloServiceImpl implements HelloService {
	
	//Default constructor
	public HelloServiceImpl(){}
	public String sayHello(String name) {
		if(null==name){
			return "Hello,World";
		}else{
			return "Hello," + name;
		}
	}
	public Person getPerson(User u) {
		Person p = new Person();
		p.setAge(24);
		p.setName(u.getName());
		return p;
	}
	public List<Person> getPersonList(Integer age, String name) {
		Person p = new Person();
		p.setAge(age);
		p.setName(name);
		List<Person> list = new ArrayList<Person>();
		list.add(p);
		return list;
	}
}


最后再把两个POJO类补充上

package com.jadyer.model;
public class User {
	private String name;
	/*-- getter和setter略 --*/
}
/**
 * 两个POJO类
 */
package com.jadyer.model;
public class Person {
	private Integer age;
	private String name;
	/*-- getter和setter略 --*/
}




关于相应的客户端的开发,请参考我的下一篇文章——在XFire中创建WebService客户端的三种常用方式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: