1、概述
      本例试图通过web service完成人员档案查询功能。
      涉及到相关技术:JAVA XFIRE DOM4J 
		
				
2、相关代码
      2.1 服务器端
            
		
				1
				 package
				 com.howelltech.xfire;
				package
				 com.howelltech.xfire;
				2
				
						 
						
				
				3
				
						 
						 public
				 
				interface
				 IFileService
				
				public
				 
				interface
				 IFileService 
				
						 {
				
				
						{
						4
						
								 public
						 String getFile(String studentName);
    
						public
						 String getFile(String studentName);
						5
						
								 }
}
				
				
						
				
				6
				
						 
				
		 
		
		
				 1
				 package
				 com.howelltech.xfire;
				package
				 com.howelltech.xfire;
				 2
				
						 
						
				
				 3
				
						 import
				 java.util.HashMap;
				
				import
				 java.util.HashMap;
				 4
				
						 import
				 java.util.Map;
				
				import
				 java.util.Map;
				 5
				
						 
						
				
				 6
				
						 
						 public
				 
				class
				 FileService 
				implements
				 IFileService
				
				public
				 
				class
				 FileService 
				implements
				 IFileService 
				
						 {
				
				
						{
						 7
						
								 
								 public
						 FileService()
    
						public
						 FileService() 
						
								 {}
						
						
								{}
						
						
								
						
						 8
						
								 
								
						
						 9
						
								 
								 public
						 String getFile(String studentName)
    
						public
						 String getFile(String studentName) 
						
								 {
						
						
								{
								10
								
										 Map map 
								=
								 
								new
								 HashMap();
        Map map 
								=
								 
								new
								 HashMap();
								11
								
										 map.put(
								"
								name
								"
								, 
								"
								jack
								"
								);
        map.put(
								"
								name
								"
								, 
								"
								jack
								"
								);
								12
								
										 map.put(
								"
								sex
								"
								, 
								"
								male
								"
								);
        map.put(
								"
								sex
								"
								, 
								"
								male
								"
								);
								13
								
										 map.put(
								"
								age
								"
								, 
								"
								18
								"
								);
        map.put(
								"
								age
								"
								, 
								"
								18
								"
								);
								14
								
										 
										 if
								(studentName.equalsIgnoreCase(
								"
								jack
								"
								))
        
								if
								(studentName.equalsIgnoreCase(
								"
								jack
								"
								)) 
								
										 {
								
								
										{
										15
										
												 return
										 (
										new
										 Map2Xml().createDocument(map)).asXML();
            
										return
										 (
										new
										 Map2Xml().createDocument(map)).asXML();
										16
										
												 
												 }
								
								 
								else
        }
								
								 
								else
								 
								
										 {
								
								
										{
										17
										
												 return
										 
										""
										;
            
										return
										 
										""
										;
										18
										
												 }
        }
								
								
										
								
								19
								
										 }
    }
						
						
								
						
						20
						
								 }
}
				
				
						
				
				21
				
						 
				
		 
		
		
				 1
				 package
				 com.howelltech.xfire;
				package
				 com.howelltech.xfire;
				 2
				
						 
						
				
				 3
				
						 import
				 java.io.IOException;
				
				import
				 java.io.IOException;
				 4
				
						 import
				 java.io.UnsupportedEncodingException;
				
				import
				 java.io.UnsupportedEncodingException;
				 5
				
						 import
				 java.util.HashMap;
				
				import
				 java.util.HashMap;
				 6
				
						 import
				 java.util.Iterator;
				
				import
				 java.util.Iterator;
				 7
				
						 import
				 java.util.Map;
				
				import
				 java.util.Map;
				 8
				
						 import
				 java.util.Set;
				
				import
				 java.util.Set;
				 9
				
						 
						
				
				10
				
						 import
				 org.dom4j.Document;
				
				import
				 org.dom4j.Document;
				11
				
						 import
				 org.dom4j.DocumentException;
				
				import
				 org.dom4j.DocumentException;
				12
				
						 import
				 org.dom4j.DocumentHelper;
				
				import
				 org.dom4j.DocumentHelper;
				13
				
						 import
				 org.dom4j.Element;
				
				import
				 org.dom4j.Element;
				14
				
						 import
				 org.dom4j.io.OutputFormat;
				
				import
				 org.dom4j.io.OutputFormat;
				15
				
						 import
				 org.dom4j.io.XMLWriter;
				
				import
				 org.dom4j.io.XMLWriter;
				16
				
						 
						
				
				17
				
						 
						 public
				 
				class
				 Map2Xml
				
				public
				 
				class
				 Map2Xml 
				
						 {
				
				
						{
						18
						
								 
								 public
						 Document createDocument(Map map)
    
						public
						 Document createDocument(Map map) 
						
								 {
						
						
								{
								19
								
										 Document document 
								=
								 DocumentHelper.createDocument();
        Document document 
								=
								 DocumentHelper.createDocument();
								20
								
										 Element root 
								=
								 document.addElement(
								"
								root
								"
								);
        Element root 
								=
								 document.addElement(
								"
								root
								"
								);
								21
								
										 
										
								
								22
								
										 Set set 
								=
								 map.keySet();
        Set set 
								=
								 map.keySet();
								23
								
										 
										 for
								 (Iterator iter 
								=
								 set.iterator(); iter.hasNext();)
        
								for
								 (Iterator iter 
								=
								 set.iterator(); iter.hasNext();) 
								
										 {
								
								
										{
										24
										
												 String key 
										=
										 iter.next().toString();
            String key 
										=
										 iter.next().toString();
										25
										
												 Element el 
										=
										 root.addElement(key).addText(map.get(key).toString());
            Element el 
										=
										 root.addElement(key).addText(map.get(key).toString());
										26
										
												 }
        }
								
								
										
								
								27
								
										 return
								 document;
        
								return
								 document;
								28
								
										 }
    }
						
						
								
						
						29
						
								 
								
						
						30
						
								 
								 public
						 Map parseXml(String xml)
    
						public
						 Map parseXml(String xml) 
						
								 {
						
						
								{
								31
								
										 Map map 
								=
								 
								new
								 HashMap();
        Map map 
								=
								 
								new
								 HashMap();
								32
								
										 
										 try
        
								try
								 
								
										 {
								
								
										{
										33
										
												 Document document 
										=
										 DocumentHelper.parseText(xml);
            Document document 
										=
										 DocumentHelper.parseText(xml);
										34
										
												 Element root 
										=
										 document.getRootElement();
            Element root 
										=
										 document.getRootElement();
										35
										
												 
												 for
										 ( Iterator i 
										=
										 root.elementIterator(); i.hasNext(); )
            
										for
										 ( Iterator i 
										=
										 root.elementIterator(); i.hasNext(); ) 
										
												 {
										
										
												{
												36
												
														 Element el 
												=
												 (Element) i.next();
                Element el 
												=
												 (Element) i.next();
												37
												
														 map.put(el.getName(), el.getText());
                map.put(el.getName(), el.getText());
												38
												
														 }
            }
										
										
												
										
										39
										
												 
												 }
								
								 
								catch
								 (DocumentException e)
        }
								
								 
								catch
								 (DocumentException e) 
								
										 {
								
								
										{
										40
										
												 e.printStackTrace();
            e.printStackTrace();
										41
										
												 }
        }
								
								
										
								
								42
								
										 return
								 map;
        
								return
								 map;
								43
								
										 }
    }
						
						
								
						
						44
						
								 }
}
				
				
						
				
				45
				
						 
				
		 
		      2.2 客户端
		 
		
				 1
				 package
				 com.howelltech.xfire;
				package
				 com.howelltech.xfire;
				 2
				
						 
						
				
				 3
				
						 import
				 java.io.IOException;
				
				import
				 java.io.IOException;
				 4
				
						 import
				 java.net.MalformedURLException;
				
				import
				 java.net.MalformedURLException;
				 5
				
						 import
				 java.util.HashMap;
				
				import
				 java.util.HashMap;
				 6
				
						 import
				 java.util.Iterator;
				
				import
				 java.util.Iterator;
				 7
				
						 import
				 java.util.Map;
				
				import
				 java.util.Map;
				 8
				
						 import
				 java.util.Set;
				
				import
				 java.util.Set;
				 9
				
						 
						
				
				10
				
						 import
				 javax.servlet.ServletException;
				
				import
				 javax.servlet.ServletException;
				11
				
						 import
				 javax.servlet.http.HttpServlet;
				
				import
				 javax.servlet.http.HttpServlet;
				12
				
						 import
				 javax.servlet.http.HttpServletRequest;
				
				import
				 javax.servlet.http.HttpServletRequest;
				13
				
						 import
				 javax.servlet.http.HttpServletResponse;
				
				import
				 javax.servlet.http.HttpServletResponse;
				14
				
						 
						
				
				15
				
						 import
				 org.codehaus.xfire.XFire;
				
				import
				 org.codehaus.xfire.XFire;
				16
				
						 import
				 org.codehaus.xfire.XFireFactory;
				
				import
				 org.codehaus.xfire.XFireFactory;
				17
				
						 import
				 org.codehaus.xfire.client.XFireProxyFactory;
				
				import
				 org.codehaus.xfire.client.XFireProxyFactory;
				18
				
						 import
				 org.codehaus.xfire.service.Service;
				
				import
				 org.codehaus.xfire.service.Service;
				19
				
						 import
				 org.codehaus.xfire.service.binding.ObjectServiceFactory;
				
				import
				 org.codehaus.xfire.service.binding.ObjectServiceFactory;
				20
				
						 
						
				
				21
				
						 
						 public
				 
				class
				 Client4FileService 
				extends
				 HttpServlet
				
				public
				 
				class
				 Client4FileService 
				extends
				 HttpServlet 
				
						 {
				
				
						{
						22
						
								 
								
						
						23
						
								 protected
						 
						void
						 doGet(HttpServletRequest req, HttpServletResponse resp)
    
						protected
						 
						void
						 doGet(HttpServletRequest req, HttpServletResponse resp)
						24
						
								 
								 throws
						 ServletException, IOException
            
						throws
						 ServletException, IOException 
						
								 {
						
						
								{
								25
								
										 String name 
								=
								 req.getParameter(
								"
								name
								"
								);
        String name 
								=
								 req.getParameter(
								"
								name
								"
								);
								26
								
										 String defName 
								=
								 
								"
								jack
								"
								;
        String defName 
								=
								 
								"
								jack
								"
								;
								27
								
										 
										
								
								28
								
										 
										 if
								 (
								null
								 
								!=
								 name)
        
								if
								 (
								null
								 
								!=
								 name) 
								
										 {
								
								
										{
										29
										
												 defName 
										=
										 name;
            defName 
										=
										 name;
										30
										
												 }
        }
								
								
										
								
								31
								
										 String responseGot 
								=
								 
								""
								;
        String responseGot 
								=
								 
								""
								;
								32
								
										 Map map 
								=
								 
								new
								 HashMap();
        Map map 
								=
								 
								new
								 HashMap();
								33
								
										 
										 try
        
								try
								 
								
										 {
								
								
										{
										34
										
												 responseGot 
										=
										 callWebService(defName);
            responseGot 
										=
										 callWebService(defName);
										35
										
												 map 
										=
										 
										new
										 Map2Xml().parseXml(responseGot);
            map 
										=
										 
										new
										 Map2Xml().parseXml(responseGot);
										36
										
												 
												 }
								
								 
								catch
								 (Exception e)
        }
								
								 
								catch
								 (Exception e) 
								
										 {
								
								
										{
										37
										
												 e.printStackTrace();
            e.printStackTrace();
										38
										
												 }
        }
								
								
										
								
								39
								
										 resp.setContentType(
								"
								text/html
								"
								);
        resp.setContentType(
								"
								text/html
								"
								);
								40
								
										 java.io.PrintWriter out 
								=
								 resp.getWriter();
        java.io.PrintWriter out 
								=
								 resp.getWriter();
								41
								
										 out.println(
								"
								<html>
								"
								);
        out.println(
								"
								<html>
								"
								);
								42
								
										 out.println(
								"
								<head><title>学生档案信息</title></head><body>
								"
								);
        out.println(
								"
								<head><title>学生档案信息</title></head><body>
								"
								);
								43
								
										 out.println(
								"
								<h2>学生档案信息</h2>
								"
								);
        out.println(
								"
								<h2>学生档案信息</h2>
								"
								);
								44
								
										 out.println(
								"
								<B>Service Request</B>
								"
								 
								+
								 
								"
								<br>
								"
								 
								+
								 
								"
								Transfer funds - 
								"
        out.println(
								"
								<B>Service Request</B>
								"
								 
								+
								 
								"
								<br>
								"
								 
								+
								 
								"
								Transfer funds - 
								"
								
										
								
								45
								
										 +
								 
								"
								<TABLE>
								"
								);
                
								+
								 
								"
								<TABLE>
								"
								);
								46
								
										 Set set 
								=
								 map.keySet();
        Set set 
								=
								 map.keySet();
								47
								
										 
										 for
								 (Iterator iter 
								=
								 set.iterator(); iter.hasNext();)
        
								for
								 (Iterator iter 
								=
								 set.iterator(); iter.hasNext();) 
								
										 {
								
								
										{
										48
										
												 String key 
										=
										 (String) iter.next();
            String key 
										=
										 (String) iter.next();
										49
										
												 out.println(
										"
										<TR><TD>
										"
										 
										+
										 key 
										+
										 
										"
										: </TD><TD>
										"
										 
										+
										 map.get(key)
            out.println(
										"
										<TR><TD>
										"
										 
										+
										 key 
										+
										 
										"
										: </TD><TD>
										"
										 
										+
										 map.get(key)
										50
										
												 +
										 
										"
										</TD></TR>
										"
										);
                    
										+
										 
										"
										</TD></TR>
										"
										);
										51
										
												 }
        }
								
								
										
								
								52
								
										 out.println(
								"
								</TABLE>
								"
								);
        out.println(
								"
								</TABLE>
								"
								);
								53
								
										 out.println(
								"
								<br>
								"
								 
								+
								 
								"
								<B>Response Received</B>
								"
								 
								+
								 
								"
								<br>
								"
								 
								+
								 responseGot);
        out.println(
								"
								<br>
								"
								 
								+
								 
								"
								<B>Response Received</B>
								"
								 
								+
								 
								"
								<br>
								"
								 
								+
								 responseGot);
								54
								
										 out.println(
								"
								</body></html>
								"
								);
        out.println(
								"
								</body></html>
								"
								);
								55
								
										 }
    }
						
						
								
						
						56
						
								 
								
						
						57
						
								 
								 /**/
						
								/*
    
						/**/
						
								/*
								
										
								
								58
								
										 * call the web service
     * call the web service
								59
								
										 *
     * 
								60
								
										 */
     
								*/
						
						
								
						
						61
						
								 
								 public
						 String callWebService(String name) 
						throws
						 Exception
    
						public
						 String callWebService(String name) 
						throws
						 Exception 
						
								 {
						
						
								{
								62
								
										 
										
								
								63
								
										 //
								 create a metadata of the service
        
								//
								 create a metadata of the service
								
										
								
								64
								
										 Service serviceModel 
								=
								 
								new
								 ObjectServiceFactory()
								
								        Service serviceModel 
								=
								 
								new
								 ObjectServiceFactory()
								65
								
										 .create(IFileService.
								class
								);
                .create(IFileService.
								class
								);
								66
								
										 
										
								
								67
								
										 //
								 create a proxy for the deployed service
        
								//
								 create a proxy for the deployed service
								
										
								
								68
								
										 XFire xfire 
								=
								 XFireFactory.newInstance().getXFire();
								
								        XFire xfire 
								=
								 XFireFactory.newInstance().getXFire();
								69
								
										 XFireProxyFactory factory 
								=
								 
								new
								 XFireProxyFactory(xfire);
        XFireProxyFactory factory 
								=
								 
								new
								 XFireProxyFactory(xfire);
								70
								
										 //
								 String serviceUrl = "xfire.local:
								//
								file" ;
        
								//
								 String serviceUrl = "xfire.local:
								//
								file" ;
								
										
								
								71
								
										 String serviceUrl 
								=
								 
								"
								http://localhost:8080/xfire/services/file
								"
								;
								
								        String serviceUrl 
								=
								 
								"
								http://localhost:8080/xfire/services/file
								"
								;
								72
								
										 IFileService client 
								=
								 
								null
								;
        IFileService client 
								=
								 
								null
								;
								73
								
										 
										 try
        
								try
								 
								
										 {
								
								
										{
										74
										
												 client 
										=
										 (IFileService) factory.create(serviceModel, serviceUrl);
            client 
										=
										 (IFileService) factory.create(serviceModel, serviceUrl);
										75
										
												 
												 }
								
								 
								catch
								 (MalformedURLException e)
        }
								
								 
								catch
								 (MalformedURLException e) 
								
										 {
								
								
										{
										76
										
												 e.printStackTrace();
            e.printStackTrace();
										77
										
												 }
        }
								
								
										
								
								78
								
										 
										
								
								79
								
										 //
								 invoke the service
        
								//
								 invoke the service
								
										
								
								80
								
										 String serviceResponse 
								=
								 
								""
								;
								
								        String serviceResponse 
								=
								 
								""
								;
								81
								
										 
										 try
        
								try
								 
								
										 {
								
								
										{
										82
										
												 serviceResponse 
										=
										 client.getFile(name);
            serviceResponse 
										=
										 client.getFile(name);
										83
										
												 
												 }
								
								 
								catch
								 (Exception e)
        }
								
								 
								catch
								 (Exception e) 
								
										 {
								
								
										{
										84
										
												 e.printStackTrace();
            e.printStackTrace();
										85
										
												 }
        }
								
								
										
								
								86
								
										 
										
								
								87
								
										 return
								 serviceResponse;
        
								return
								 serviceResponse;
								88
								
										 }
    }
						
						
								
						
						89
						
								 
								
						
						90
						
								 
								 /**/
						
								/*
    
						/**/
						
								/*
								
										
								
								91
								
										 * doPost():
     * doPost():
								92
								
										 */
     
								*/
						
						
								
						
						93
						
								 protected
						 
						void
						 doPost(HttpServletRequest req, HttpServletResponse resp)
    
						protected
						 
						void
						 doPost(HttpServletRequest req, HttpServletResponse resp)
						94
						
								 
								 throws
						 ServletException, IOException
            
						throws
						 ServletException, IOException 
						
								 {
						
						
								{
								95
								
										 doGet(req, resp);
        doGet(req, resp);
								96
								
										 }
    }
						
						
								
						
						97
						
								 }
}
				
				
						
				
				98
				
						 
				
		 
		      2.3 配置文件
		
				 1
				 <?
				xml version="1.0" encoding="ISO-8859-1"
				?>
				<?
				xml version="1.0" encoding="ISO-8859-1"
				?>
				
						
				
				 2
				
						 
						
				
				 3
				
						 <!
				DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"
				>
				
				<!
				DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"
				>
				
						
				
				 4
				
						 
						
				
				 5
				
						 <
				web-app
				>
				
				<
				web-app
				>
				
						
				
				 6
				
						 <
				servlet
				>
    
				<
				servlet
				>
				
						
				
				 7
				
						 <
				servlet-name
				>
				XFireServlet
				</
				servlet-name
				>
        
				<
				servlet-name
				>
				XFireServlet
				</
				servlet-name
				>
				
						
				
				 8
				
						 <
				display-name
				>
				XFire Servlet
				</
				display-name
				>
        
				<
				display-name
				>
				XFire Servlet
				</
				display-name
				>
				        
				 9
				
						 <
				servlet-class
				>
				org.codehaus.xfire.transport.http.XFireConfigurableServlet
				</
				servlet-class
				>
        
				<
				servlet-class
				>
				org.codehaus.xfire.transport.http.XFireConfigurableServlet
				</
				servlet-class
				>
				
						
				
				10
				
						 </
				servlet
				>
    
				</
				servlet
				>
				
						
				
				11
				
						 <
				servlet
				>
    
				<
				servlet
				>
				
						
				
				12
				
						 <
				servlet-name
				>
				WsClient
				</
				servlet-name
				>
        
				<
				servlet-name
				>
				WsClient
				</
				servlet-name
				>
				
						
				
				13
				
						 <
				display-name
				>
				WsClientServlet
				</
				display-name
				>
        
				<
				display-name
				>
				WsClientServlet
				</
				display-name
				>
				
						
				
				14
				
						 <
				description
				></
				description
				>
        
				<
				description
				></
				description
				>
				
						
				
				15
				
						 <
				servlet-class
				>
				com.howelltech.xfire.Client4FileService
				</
				servlet-class
				>
        
				<
				servlet-class
				>
				com.howelltech.xfire.Client4FileService
				</
				servlet-class
				>
				
						
				
				16
				
						 </
				servlet
				>
    
				</
				servlet
				>
				
						
				
				17
				
						 
    
				18
				
						 <
				servlet-mapping
				>
    
				<
				servlet-mapping
				>
				
						
				
				19
				
						 <
				servlet-name
				>
				XFireServlet
				</
				servlet-name
				>
        
				<
				servlet-name
				>
				XFireServlet
				</
				servlet-name
				>
				        
				20
				
						 <
				url-pattern
				>
				/servlet/XFireServlet/*
				</
				url-pattern
				>
        
				<
				url-pattern
				>
				/servlet/XFireServlet/*
				</
				url-pattern
				>
				    
				21
				
						 </
				servlet-mapping
				>
    
				</
				servlet-mapping
				>
				        
				22
				
						 <
				servlet-mapping
				>
    
				<
				servlet-mapping
				>
				        
				23
				
						 <
				servlet-name
				>
				XFireServlet
				</
				servlet-name
				>
        
				<
				servlet-name
				>
				XFireServlet
				</
				servlet-name
				>
				        
				24
				
						 <
				url-pattern
				>
				/services/*
				</
				url-pattern
				>
        
				<
				url-pattern
				>
				/services/*
				</
				url-pattern
				>
				    
				25
				
						 </
				servlet-mapping
				>
    
				</
				servlet-mapping
				>
				
						
				
				26
				
						 <
				servlet-mapping
				>
    
				<
				servlet-mapping
				>
				
						
				
				27
				
						 <
				servlet-name
				>
				WsClient
				</
				servlet-name
				>
        
				<
				servlet-name
				>
				WsClient
				</
				servlet-name
				>
				
						
				
				28
				
						 <
				url-pattern
				>
				/ws
				</
				url-pattern
				>
        
				<
				url-pattern
				>
				/ws
				</
				url-pattern
				>
				
						
				
				29
				
						 </
				servlet-mapping
				>
    
				</
				servlet-mapping
				>
				
						
				
				30
				
						 
						
				
				31
				
						 </
				web-app
				>
				
				</
				web-app
				>
		 
		services.xml
		
				1
				 <
				beans 
				xmlns
				="http://xfire.codehaus.org/config/1.0"
				>
				<
				beans 
				xmlns
				="http://xfire.codehaus.org/config/1.0"
				>
				    
				2
				
						 <
				service
				>
    
				<
				service
				>
				    
				3
				
						 <
				name
				>
				file
				</
				name
				>
        
				<
				name
				>
				file
				</
				name
				>
				    
				4
				
						 <
				namespace
				>
				studentFile
				</
				namespace
				>
        
				<
				namespace
				>
				studentFile
				</
				namespace
				>
				    
				5
				
						 <
				serviceClass
				>
				com.howelltech.xfire.IFileService
				</
				serviceClass
				>
        
				<
				serviceClass
				>
				com.howelltech.xfire.IFileService
				</
				serviceClass
				>
				    
				6
				
						 <
				implementationClass
				>
				com.howelltech.xfire.FileService
				</
				implementationClass
				>
        
				<
				implementationClass
				>
				com.howelltech.xfire.FileService
				</
				implementationClass
				>
				  
				7
				
						 </
				service
				>
    
				</
				service
				>
				    
				8
				
						 </
				beans
				>
				
				</
				beans
				>
				
						
				
				9
				
						 
				
		 
		
				
3、部署相关
      3.1 类库
            java类库,xfire类库,dom4j类库
      3.2 目录结构
            WEB-INF
            --- web.xml
            --- lib
            --- classes
                --- com.howelltech.xfire.*.class
                --- META-INF
                      --- xfire
                           services.xml
      3.3 测试url
            http://localhost:8080/xfire/ws
4、总结
      感觉xfire实现web service还是挺容易的,不过实际项目中会遇到哪些问题,还有待以后的验证。下次继续思考客户端与服务器端交互问题,比如修改服务器端信息,传输文件、图片等数据。