XFire实战

XFire开发web service

 

环境介绍

1.JDK6

2.myeclipse6.0.1

3.tomcat5.5

4.xfire1.2.6

 

开发步骤

(一)服务器端开发

1 在myeclipse下建立web service project ,命名为webservice;

2 在src文件夹下建立三个包,包名如下:

   com.hust.dm.beans

   com.hust.dm.services

   com.hust.dm.servicesImpl

3 在beans包下新建类Book,代码如下:

package com.hust.dm.beans;

public class Book {
	private String name;
	private String isbn;
	private String auther;
	private String year;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getIsbn() {
		return isbn;
	}
	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}
	public String getAuther() {
		return auther;
	}
	public void setAuther(String auther) {
		this.auther = auther;
	}
	public String getYear() {
		return year;
	}
	public void setYear(String year) {
		this.year = year;
	}
}

 4 在services包下新建立服务接口类BookManager,代码如下:

package com.hust.dm.services;

import java.util.List;

import com.hust.dm.beans.Book;

public interface BookManager {
	public Book getBook();
	public void setBook(Book book);
	public List<Book> getBooks();
}

 5 在servicesImpl包下新建对应服务接口的实现类BookManagerImpl,代码如下:

package com.hust.dm.servicesImpl;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.hust.dm.beans.Book;
import com.hust.dm.services.BookManager;

public class BookManagerImpl implements BookManager {
	private Book book = null;

	public Book getBook() {
		// TODO Auto-generated method stub
		if(book == null) {
			book = new Book();
			book.setAuther("raindrop");
			book.setIsbn("450001");
			book.setName("《IT世界》");
			book.setYear("2000");
		}
		return book;
	}

	public List<Book> getBooks() {
		// TODO Auto-generated method stub
		List<Book> list = new ArrayList<Book>();
		Book book = new Book();
		book.setAuther("raindrop");
		book.setIsbn("450001");
		book.setName("《IT世界》");
		book.setYear("2000");
		
		Book book1 = new Book();
		book1.setAuther("ychao");
		book1.setIsbn("450002");
		book1.setName("《遗失的美好》");
		book1.setYear("2001");
		list.add(book);
		list.add(book1);
		return list;
	}

	public void setBook(Book book) {
		// TODO Auto-generated method stub
		System.out.println("[" + getTime() + "]: book reset !");
		this.book = book;
	}
	public String getTime() {
		SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd kk:mm:ss");
		Date date = new Date();
		return sdf.format(date);
	}
}

  6 新建web service

 选中webservice工程-->右击-->new-->other-->web service,弹出的第一个窗口默认即可,第二个需输入所建service的名字(BookManager)、服务接口(com.hust.dm.services.BookManager)、服务实现类(com.hust.dm.services.BookManagerImpl)、紧跟的两个选项可以采用默认的设置。

   7 将工程部署至tomcat服务器中:直接将webservice依Myeclipse Server Application方式运行,选择配置的tomcat5即可。

8 打开浏览器输入http://localhost:8080/webservice/services/BookManager?wsdl检查服务是否发布成功,显示wsdl文件说明发布成功。

 

(二)客户端开发

a、通过服务器端的beans接口类编写客户端调用代码

   要求:客户端能够得到服务器端的beans接口类

我们可以新建java project,将webservice project下的com.hust.dm.services和com.hust.dm.beans包拷贝到新建的工程下,简单起见,我们直接在webservic 工程下编写客户端调用代码。

1 在src文件夹下新建test.client包

2 在test.clients包下新建调用类BookManagerClient,代码如下: 

package test.clients;

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.hust.dm.beans.Book;
import com.hust.dm.services.BookManager;


public class BookManagerClient {
	public static void main(String[] args) {
		try {
			String url = "http://127.0.0.1:8080/webservice/services/BookManager";
			Service service = new ObjectServiceFactory().create(BookManager.class);
			BookManager bookManager = (BookManager)new XFireProxyFactory().create(service, url);
			
			System.out.println("得到的BOOK:");
			Book book = bookManager.getBook();
			System.out.println("BOOK:("+book.getIsbn()+" "+book.getName()+" "+book.getAuther()+" "+book.getYear()+")");
			System.out.println("得到的BOOK列表:");
			List<Book> list = bookManager.getBooks();
			for(int i=0; i<list.size(); ++i) {
				book = list.get(i);
				System.out.println("BOOK:("+book.getIsbn()+" "+book.getName()+" "+book.getAuther()+" "+book.getYear()+")");
			}
			System.out.println("重设服务器端BOOK...");
			Book resetBook = new Book();
			resetBook.setAuther("doubles");
			resetBook.setIsbn("450003");
			resetBook.setName("《青梅煮酒》");
			resetBook.setYear("2000");
			bookManager.setBook(resetBook);
			System.out.println("重设后的BOOK:");
			book = bookManager.getBook();
			System.out.println("BOOK:("+book.getIsbn()+" "+book.getName()+" "+book.getAuther()+" "+book.getYear()+")");
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}

  3 运行客户端代码,检查调用是否成功,调用成功将显示如下调用结果:

 

   得到的BOOK:
   BOOK:(450001 《IT世界》 raindrop 2000)
   得到的BOOK列表:
   BOOK:(450001 《IT世界》 raindrop 2000)
   BOOK:(450002 《遗失的美好》 ychao 2001)
   重设服务器端BOOK...
   重设后的BOOK:
   BOOK:(450003 《青梅煮酒》 doubles 2000)

 

b、通过myeclipse自带的xfire插件或ant工具产生客户端代码

    本文介绍使用ant工具产生客户端的调用代码。

    1 新建java project命名为webservice_invoke

    2 在webservice_invoke下建立如附件1所示文档结构

          lib: 包含xfire发布文件目录下的xfire-all-1.2.6.jar和lib文件夹下的所以jar文件

          build.xml为ant运行配置文件,文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project name="XFire-WsGen" basedir="." default="wsgen">  
  
     <path id="classpathId">  
  
         <fileset file="${basedir}/lib/*.jar"/>  
  
     </path>  
  
     <target name="clean" description="Prepare for clean build">
  
         <delete dir="${basedir}/client"/>  
  
         <mkdir dir="${basedir}/client"/>  
  
     </target>
     
     <target name="wsgen" depends="clean">  
  
         <taskdef name="WsGenTask" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="classpathId"/>  
  
         <WsGenTask outputDirectory="${basedir}/client" wsdl="http://localhost:9090/webservice/services/BookManager?wsdl" package="com.hust.dm.clients" overwrite="true"/>  

     </target>  
  
</project>

 

3 使用ant运行build.xml,运行结束后刷新client文件夹,将产生附件2所示的文档结构

4 将client文件夹下的所有内容拷贝到src文件夹下(文档结构如附件3所示),此时会提示出错,原因没有引入xfire所需的包,将第二步lib下的jar包引入build path即可。

5 在src下新建调用包ws.invoke.dm,并在该包下建立调用类BookManagerInvoker,代码如下:

package ws.invoke.dm;

import java.util.List;

import com.hust.dm.beans.ArrayOfBook;
import com.hust.dm.beans.Book;
import com.hust.dm.clients.BookManagerClient;
import com.hust.dm.clients.BookManagerPortType;

public class BookManagerInvoker {
	private BookManagerClient bmClient = null;
	private BookManagerPortType bmPT = null;
	//bean对象、集合产生工厂
	private com.hust.dm.beans.ObjectFactory beanOF = null;
	//远程调用方法参数和返回值产生工厂
	private com.hust.dm.services.ObjectFactory serviceOF = null;
	public BookManagerInvoker() {
		bmClient = new BookManagerClient();
		bmPT = bmClient.getBookManagerHttpPort();
		beanOF = new com.hust.dm.beans.ObjectFactory();
		serviceOF = new com.hust.dm.services.ObjectFactory();
	}
	public void getBook() {
		System.out.println("得到的BOOK:");
		Book book = bmPT.getBook();
		System.out.println("BOOK:("+book.getIsbn().getValue()+" "+book.getName().getValue()+" "+book.getAuther().getValue()+" "+book.getYear().getValue()+")");
	}
	public void getBooks() {
		System.out.println("得到的BOOK列表:");
		ArrayOfBook array = bmPT.getBooks();
		List<Book> list = array.getBook();
		for(Book book : list) {
			System.out.println("BOOK:("+book.getIsbn().getValue()+" "+book.getName().getValue()+" "+book.getAuther().getValue()+" "+book.getYear().getValue()+")");
		}
	}
	public void setBook(String isbn, String name, String auther, String year) {
		System.out.println("重设服务器端BOOK...");
		Book book = beanOF.createBook();
		book.setAuther(beanOF.createBookAuther(auther));
		book.setIsbn(beanOF.createBookIsbn(isbn));
		book.setName(beanOF.createBookName(name));
		book.setYear(beanOF.createBookYear(year));
		bmPT.setBook(book);
	}
	public static void main(String[] args) {
		BookManagerInvoker invoker = new BookManagerInvoker();
		invoker.getBook();
		invoker.setBook("450004", "《爱我中华》", "doubles", "2008");
		invoker.getBook();
		invoker.getBooks();
	}
}

 

6 运行BookManagerInvoker,检查调用是否成功。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值