XFire整合webservice

在网上找了很多关于XFire整合webservice相关的文章,发现都不齐全,让人学起来很费解,下面我给大家详细的讲解一下步骤,让初学者很容易掌握使用;

一、服务端编写

1、在Myeclipse中新建web project,我取名为XFireServer,这个自己随便取,在webRoot中的web-info的lib中导入XFire整合webservice相关jar包,在我的资源库中直接下载使用:http://download.csdn.net/detail/harderxin/8665367

我使用的XFire版本为1.2.6

2、配置web.xml文件,添加XFireServlet

<?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">

	<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>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

3、定义我们需要发布服务的接口及实现类,例如我的接口如下:

package com.xin.service;

import com.xin.bean.User;

/**
 * 定义发布服务的接口
 * @author Lucene
 *
 */
public interface IHelloService {
	//跟人说hello
	public String sayHello(String name);
	//得到用户信息
	public User gerUser(User user);
}

定义我们的实现类:

package com.xin.service;

import com.xin.bean.User;

/**
 * 定义接口的实现类
 * @author Lucene
 *
 */
public class HelloService implements IHelloService {

	public User gerUser(User user) {
		User newUser=new User();
		newUser.setId("new:"+user.getId());
		newUser.setName("new:"+user.getName());
		return newUser;
	}

	public String sayHello(String name) {
		return "hello:"+name;
	}

}

里面用到的实体对象User,定义出来:

package com.xin.bean;

//实体
public class User {
	private String id;
	private String name;

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

4、在src目录下新建META-INF文件夹,然后在里面新建xfire文件夹,将services.xml文件放入其中,services.xml文件如下:

<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
	<service>
		<!-- 服务名称 -->
		<name>HelloService</name>
		<!-- 接口的类名称 全路径-->
		<serviceClass>com.xin.service.IHelloService</serviceClass>
		<!-- 实现类名称 全路径-->
		<implementationClass>com.xin.service.HelloService</implementationClass>
		<!-- webservice的命名空间,可以随便取名字 -->
		<namespace>http://com.xin.service/webservice/hello</namespace>
	</service>
</beans>
</span>

欧了,服务端差不多了,将我们的系统部署在Tomcat服务器中,在浏览器中输入webservice地址:

webservice地址的确定:当我们的services.xml文件配置好之后,WebService的地址也就确定了,地址为http://主机地址:端口号/工程名/在web.xml文件中配置的XFire的Servlet的mapping的模式/在services.xml文件中配置的name节点值

,我这个系统里面的webservice地址为:http://localhost:8080/XFireServer/services/HelloService,其实也可以输入:

http://localhost:8080/XFireServer/services/HelloService?wsdl,出现如下页面,则表示我们的webservice部署成功:

好了,下面我们可以开始编写客户端了:

第一种情况:客户端应用程序与webservice在同一应用程序中

package com.xin.test;

import java.net.MalformedURLException;

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.xin.bean.User;
import com.xin.service.IHelloService;

/**
 * 测试本地客户端调用,此应用程序与webservice在同一应用程序中
 * webservice地址的确定:
 * services.xml文件配置好之后,WebService的地址也就确定了,地址为http://主机地址:端口号/工程名/在web.xml文件中配置的
 * XFire的Servlet的mapping的模式/在services.xml文件中配置的name节点值
 * 浏览器中输入:http://localhost:8080/XFireServer/services/HelloService?wsdl
 * @author Lucene
 *
 */
public class Client {
	public static void main(String[] args) throws MalformedURLException {
		Service service=new ObjectServiceFactory().create(IHelloService.class);
		XFireProxyFactory factory=new XFireProxyFactory(XFireFactory.newInstance().getXFire());
		String url="http://localhost:8080/XFireServer/services/HelloService";
		IHelloService helloService=(IHelloService) factory.create(service, url);
		System.out.println(helloService.sayHello("wuxin"));
		User user=new User();
		user.setId("001");
		user.setName("mary");
		String userId=helloService.gerUser(user).getId();
		String userName=helloService.gerUser(user).getName();
		System.out.println("userId:"+userId+",userName:"+userName);

	}
}

测试结果:

hello:wuxin

userId:new:001,userName:new:mary

第二种情况:客户端应用程序与webservice不在同一应用程序中,例如我们在myeclipse中再建立一个java项目:

XFireClient,新建lib目录,同样导入我们上面xfire的jar包,将其添加到项目中

在src目录下新建build.properties文件:

src.dir=.

lib.dir=D\:/MyEclipse 8.6/XFireClient/lib

wsdl.dir=http\://localhost\:8080/XFireServer/services/HelloService?wsdl

同样在src目录下新建build.xml文件,其中的相关目录引用了上面的build.properties文件:

<?xml version="1.0" encoding="UTF-8"?>
<project name="WebService" basedir="." default="gen-webservice">
	<property file="build.properties">
	</property>
	<path id="project-classpath">
		<fileset dir="${lib.dir}">
			<include name="**/*.jar" />
		</fileset>
	</path>

	<target name="gen-webservice">
		<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="project-classpath" />
		<wsgen outputDirectory="${src.dir}" wsdl="${wsdl.dir}" package="com.xin.client" overwrite="true" />
	</target>
</project>

我们这里使用ant工具通过http://localhost:8080/XFireServer/services/HelloService?wsdl文件来生成我们的客户端代码,一般myeclipse中都会集成了ant工具,我们在build.xml中右键run as-->ant build就可以了,它就会在我们客户端的src目录下自动生成如下所示的代码:

上面这些代码都是通过ant工具自动生成出来的哦!

编写我们的客户端测试代码:

package com.xin.test;

import com.xin.bean.ObjectFactory;
import com.xin.bean.User;
import com.xin.client.HelloServiceClient;
import com.xin.client.HelloServicePortType;

/**
 * 客户端测试代码
 * @author Lucene
 *
 */
public class Test {
	public static void main(String[] args) {
		HelloServiceClient service=new HelloServiceClient();
		HelloServicePortType portType=service.getHelloServiceHttpPort();
		System.out.println(portType.sayHello("张三"));

		ObjectFactory factory=new ObjectFactory();
		User user=factory.createUser();
		user.setName(factory.createUserName("李四"));
		System.out.println(portType.gerUser(user).getName().getValue());
	}
}

记住我们的服务端是不能停的,测试输出:

hello:张三

new:李四

上面就是一个详细的通过xfire整合webservice的过程,其中的原理以及xfire的源代码实现希望大家能够自己去探索,程序员就应该要有钻研精神,不仅仅只是学会了用别人的框架,而应该去了解其原理,包括ant工具生成的代码类是什么意思,都应该要去了解,加深对xfire的理解!!

完整代码下载地址,我的资源库:

时间: 2024-10-12 13:37:16

XFire整合webservice的相关文章

XFire创建WebService实例

XFire创建WebService实例应用 XFire使得在JavaEE应用中发布Web服务变得轻而易举.和其他Web服务引擎相比, XFire的配置非常简单,可以非常容易地和Spring集成. 下载地址:http://xfire.codehaus.org/Download. 一. 使用XFire发布WebService    1. 创建service接口 package com.test.service; import com.test.service.bean.User; public in

Xfire实现webservice时,对象传递规则及解析简析

Xfire实现webservice,传递对象解析的话,要分两种情况处理:1.基本类型对象:2.复杂对象 其实,在客户端直接传递数组,如String[] int[]等这些无法通过配置具体类型来通知xfire的,都需要封装到一个新的自定义对象中来传递 1.基本数据对象 包括基本数据类型,还有其常用类String  Integer等,也有list或者map里包装的是基本类型或者自定义对象中属性都为基本类型的话, 是不需要配置xfire客户端就可以解析到服务端返回的数据 2.对于传递复杂的数据,比如Li

Spring集成XFire开发WebService

Spring是目前最流行的JavaEE Framework,但是使用Spring的Spring-WS开发WebService却十分繁琐.XFire是一个简化WebService开发的开源项目,通过Spring和XFire的结合可以大大简化基于Spring Framework的应用中的WebService开发. Spring和XFire可以通过多种方式结合,下文介绍的是笔者常用的一种简单而实用的方法.所用的Spring版本为2.0,XFire版本为1.2.6 1.配置XFire Servlet 在

xfire构建webservice项目步骤以及使用

简单搭建xfire开源软件的webservice开发及其步骤: 1.创建好一个web工程,引入xfire下的jar包,注意lib下的和xfire-all.jar 2.定义接口: Java代码   package com.iteye.webservice; public interface IHelloService { public String sayHelleWorld(String inputStr); }3.接口实现: Java代码   package com.iteye.webserv

xfire实现webservice客户端之测试关注点

日前的工作接触到很多系统间的Webservice调用,这里想谈谈基于spring+xfire实现的webservice的客户端踩过的一些坑,需要测试关注的点. xFire的配置项 在spring中实现ws的client的客户端还是相对比较容易的,只需要编写一个和webservice接口一致的接口类即可.在xml的配置中需要关注下面几个参数: http.timeout : 响应超时,即服务端接收到ws请求,但在处理请求时,长时间没有返回,超时 http.connection.timeout : 连

XFire创建WebService服务端和客户端

感谢这篇博客http://clq9761.iteye.com/blog/1261963的分享. 可能是环境搭建的原因,按照资料有些地方没有成功,于是自己改了一部分,写了下面的demo 1.服务端 1.1.新建web工程,复制需要的jar包到lib文件夹 1.2.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/

MyEclipse下XFire开发Webservice实例

XFire Java SOAP框架概述 (摘自:http://tech.it168.com/j/e/2006-10-28/200610281432707.shtml )     MyEclipse Web Services是建立在XFire Java SOAP框架和工具基础上的, XFire是一款开源的Java SOAP框架.它拥有一个轻量级的信息处理模块,通过STAX来与SOAP信息相结合.提供了一个工作在Web Services下的简单API,支持POJO和schema开发. XFire支持

从xfire谈WebService接口化编程

前段时间有博友在看我的博文<WebService入门案例>后,发邮件问我关于WebService 接口在java中的开发,以及在实际生产环境中的应用.想想自己入职也有一段时间了,似乎也该总结一下自己对于接口化开发的认识,以及如何利用java开发一些可以供其他应用程序使用的web服务. 其实最开始对Web服务的认识还是在课堂上,老师反复地在讲SOAP协议,其实也不懂究竟是什么意思,无缘无故就在大脑中形成了条件反射,SOAP协议的中文意思就是简单对象访问协议:而且,更加巧合的是自己在求职面试时就被

codeHaus XFire实现WebService开发

XFire简介 XFire是codeHaus组织提供的一个开源框架,它构建了POJO和SOA之间的桥梁,主要特性就是支持将POJO通过非常简单的方式发布成Web服务,这种处理方式不仅充分发挥了POJO的作用,简化了Java应用转化为Web服务的步骤和过程,也直接降低了SOA的实现难度,为企业转向SOA架构提供了一种简单可行的方式. XFire在2007年后已停止更新.正式更名为Apache CXF,亦可以说是XFire2.0.XFire - XFire安装包:XFire框架目前最后的一个版本是1