176142998

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  116 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks

下载XFrie
首先,去http://xfire.codehaus.org下载最新版本的XFire

搭建webservice工程环境
在eclipse里创建一个叫webservice的java工程,然后依次添加src-service、src-conf、src-test和src-util这几个Source Folder以及web这个Folder
目录结构及文件如下:

代码
  1. webservice   
  2.      src-service   
  3.          cn.hidetoishandsome.xfire.model   
  4.              Book.java   
  5.          cn.hidetoishandsome.xfire.service   
  6.              BookService.java   
  7.          cn.hidetoishandsome.xfire.service.impl   
  8.              BookServiceImpl.java   
  9.      src-conf   
  10.          META-INF   
  11.              xfire   
  12.                  services.xml   
  13.      src-test   
  14.          cn.hidetoishandsome.xfire.test   
  15.              BookServiceTest.java   
  16.      src-util   
  17.          cn.hidetoishandsome.xfire.util   
  18.              XfireClientFactory.java   
  19.      web   
  20.          WEB-INF   
  21.              lib   
  22.              web.xml   
  23.          index.html   

然后将解压后的xfire的lib目录下所有jar包和xfire-all-1.*.jar复制到WEB-INF/lib目录
web.xml内容如下:
代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"  
  3.          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  4.   
  5.     <servlet>  
  6.         <servlet-name>xfire</servlet-name>  
  7.         <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>  
  8.     </servlet>  
  9.   
  10.     <servlet-mapping>  
  11.         <servlet-name>xfire</servlet-name>  
  12.         <url-pattern>/services/*</url-pattern>  
  13.     </servlet-mapping>  
  14.   
  15. </web-app>  

 

写一个BookService
我们将创建一个从ISBM号得到Book的Title的简单查询Web服务
首先创建Book.java

代码
  1. package cn.hidetoishandsome.xfire.model;   
  2.   
  3. public class Book {   
  4.   
  5.     private String title;   
  6.   
  7.     private String isbn;   
  8.   
  9.     public String getIsbn() {   
  10.         return isbn;   
  11.      }   
  12.   
  13.     public void setIsbn(String isbn) {   
  14.         this.isbn = isbn;   
  15.      }   
  16.   
  17.     public String getTitle() {   
  18.         return title;   
  19.      }   
  20.   
  21.     public void setTitle(String title) {   
  22.         this.title = title;   
  23.      }   
  24.   
  25. }   

然后写一个BookService接口BookService.java
代码
  1. package cn.hidetoishandsome.xfire.service;   
  2.   
  3. import cn.hidetoishandsome.xfire.model.Book;   
  4.   
  5. public interface BookService {   
  6.      Book findBookByISBN(String isbn);   
  7. }   

然后是BookService的实现BookServiceImpl.java
代码
  1. package cn.hidetoishandsome.xfire.service.impl;   
  2.   
  3. import cn.hidetoishandsome.xfire.model.Book;   
  4. import cn.hidetoishandsome.xfire.service.BookService;   
  5.   
  6. public class BookServiceImpl implements BookService {   
  7.   
  8.     private Book book;   
  9.   
  10.     public BookServiceImpl() {   
  11.          book = new Book();   
  12.          book.setTitle("XFire Quick Start");   
  13.          book.setIsbn("123456");   
  14.      }   
  15.   
  16.     public Book findBookByISBN(String isbn) {   
  17.         if (isbn.equals(book.getIsbn()))   
  18.             return book;   
  19.         throw new RuntimeException("Can't find book");   
  20.      }   
  21.   
  22. }   

 

在services.xml中配置要发布的服务
在src-conf的META-INF/xfire目录创建services.xml

代码
  1. <beans xmlns="http://xfire.codehaus.org/config/1.0">  
  2.     <service>  
  3.         <name>BookService</name>  
  4.         <namespace>http://localhost:8080/xfire/services/BookService</namespace>  
  5.         <serviceClass>cn.hidetoishandsome.xfire.service.BookService</serviceClass>  
  6.         <implementationClass>cn.hidetoishandsome.xfire.service.impl.BookServiceImpl</implementationClass>  
  7.     </service>  
  8. </beans>  

其中name标签决定了我们创建的该服务的WSDL的URL为http://xx.xx.xx/xx/xx/BookService?wsdl

 

在Tomcat中发布
可以简单的修改Tomcat的server.xml来发布该Web服务,在<Host>标签中添加以下内容:

代码
  1. Context path="/webservice" docBase="D:\project\webservice\web" reloadable="true"/>   

现在打开浏览器访问http://localhost:8080/webservice/services/BookService?wsdl来看看生成的WSDL文档

 

客户端调用测试
我们将使用一个XfireClientFactory.java工具类来帮我们调用该Web服务:

代码
  1. package cn.hidetoishandsome.xfire.util;   
  2.   
  3. import java.net.MalformedURLException;   
  4.   
  5. import org.apache.commons.logging.Log;   
  6. import org.apache.commons.logging.LogFactory;   
  7. import org.codehaus.xfire.client.XFireProxyFactory;   
  8. import org.codehaus.xfire.service.Service;   
  9. import org.codehaus.xfire.service.binding.ObjectServiceFactory;   
  10. import org.springframework.util.Assert;   
  11.   
  12. public class XfireClientFactory {   
  13.     private static XFireProxyFactory serviceFactory = new XFireProxyFactory();   
  14.   
  15.     private static final Log log = LogFactory.getLog(XfireClientFactory.class);   
  16.   
  17.     private XfireClientFactory() {   
  18.      }   
  19.   
  20.     public static <T> T getClient(String serviceURL, Class<T> serviceClass) {   
  21.          Assert.notNull(serviceURL);   
  22.          Assert.notNull(serviceClass);   
  23.          Service serviceModel = new ObjectServiceFactory().create(serviceClass);   
  24.         try {   
  25.             return (T) serviceFactory.create(serviceModel, serviceURL);   
  26.          } catch (MalformedURLException e) {   
  27.              log.error(e.getMessage(), e);   
  28.             return null;   
  29.          }   
  30.      }   
  31.   
  32. }   

然后编写一个BookServiceTest.java来调用我们刚才发布的Web服务:
代码
  1. package cn.hidetoishandsome.xfire.test;   
  2.   
  3. import cn.hidetoishandsome.xfire.service.BookService;   
  4. import cn.hidetoishandsome.xfire.util.XfireClientFactory;   
  5.   
  6. public class BookServieTest {   
  7.   
  8.     public static void main(String[] args) {   
  9.          String serviceURL = "http://localhost:8080/webservice/services/BookService";   
  10.         try {   
  11.              BookService service = XfireClientFactory.getClient(serviceURL, BookService.class);   
  12.              System.out.println("Book with ISBN '123456': 《" + service.findBookByISBN("123456").getTitle() + "》");   
  13.          } catch (Exception e) {   
  14.              e.printStackTrace();   
  15.          }   
  16.   
  17.      }   
  18. }   

服务调用成功,Console打印内容如下:
代码
  1. Book with ISBN '123456': 《XFire Quick Start》   
posted on 2008-07-25 18:53 飞飞 阅读(311) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: