`
wwwzhouhui
  • 浏览: 358978 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

webservices学习之xfire

阅读更多
今天整理了一下webservices xfire框架东东,下面当代码写出来,学习学习
1.项目用MYECLIPSE 建立,其中MYECLIPSE 中有自己的JAR xfire
  activation-1.1.jar,commons-attributes-api-2.1.jar,commons-beanutils-1.7.0.jar,commons-codec-1.3.jar,commons-logging-1.0.4.jar,jaxen-1.1-beta-9.jar,jaxws-api-2.0.jar,jdom-1.0.jar,jsr173_api-1.0.jar,mail-1.4.jar,saaj-api-1.3.jar,saaj-impl-1.3.jar,spring-1.2.6.jar,stax-api-1.0.1.jar,wsdl4j-1.6.1.jar,wstx-asl-3.2.0.jar,xbean-2.2.0.jar,
xbean-spring-2.8.jar,xfire-aegis-1.2.6.jar,xfire-annotations-1.2.6.jar,xfire-core-1.2.6.jar,xfire-java5-1.2.6.jar,xfire-jaxws-1.2.6.jar,xfire-jsr181-api-1.0-M1.jar,xfire-spring-1.2.6.jar

2.服务端代码
  服务端接口IBasic.java
 
package com.xfire;


import java.util.List;
import java.util.Map;

/***********************************************************************   
 *   
 *   IBasic.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   May 22, 2009   10:32:42 AM   
 *   @revision         $Id:     *   
 ***********************************************************************/
public interface IBasic {
	 /**   
     * 测试字符串   
     * @return   
     */   
    public String hello();    
   
    /**   
     * 取一辆汽车   测试对象传递   
     * @return   
     */   
    public Car getCar();    
    /**
     *   取得list 数据
     * @return
     */
    public List<String> getList();
    
    /**
     * 取得map 数据
     * @return
     */
    public Map<String,String> getMap();
    
    /**
     *  保存数据
     * @param map
     */
    public void setMap(Map<String,Car> map);
    
    
    /**
     *  保存数据 javabean
     * @param Car
     */
    public void setCar(Car car);
    
    /** 保存数据 list
     * 
     * @param list
     */
    public void setList(List<String> list);
    
    
    /** 保存数据 map
     * 
     * @param map
     */
    public void setMap2(Map<String,String> map);
    
    /** 保存数据 map
     * 
     * @param map
     */
    public void setList2(List<Car> list);
    
    
}


JAVA BEAN 代码 Car.java
package com.xfire;

import java.io.Serializable;

/***********************************************************************   
 *   
 *   Car.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   May 22, 2009   10:32:16 AM   
 *   @revision         $Id:     *   
 ***********************************************************************/
public class Car implements Serializable {
	public Car(){
		
	}
	private String color;
	private String length;
	private String name;
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public String getLength() {
		return length;
	}
	public void setLength(String length) {
		this.length = length;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}


服务端实现类 BasicService.java
package com.xfire;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/***********************************************************************   
 *   
 *   BasicService.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   May 22, 2009   10:33:21 AM   
 *   @revision         $Id:     *   
 ***********************************************************************/
public class BasicService implements IBasic {
	/**
	 * 取一辆汽车 测试对象传递
	 * 
	 * @return
	 */
	public Car getCar() {
		Car car = new Car();
		car.setColor("RED红色");
		car.setLength("2400");
		car.setName("HAHACHE");
		return car;
	}

	/**
	 * 测试字符串
	 * 
	 * @return
	 */
	public String hello() {
		return "hello zhouhui";
	}

	/**
	 * 取得list 数据
	 * 
	 * @return
	 */
	public List<String> getList() {
		List<String> list = new ArrayList<String>();
		list.add("1");
		list.add("2");
		list.add("3");
		return list;
	}

	/**
	 * 取得map 数据
	 * 
	 * @return
	 */
	public Map<String, String> getMap() {
		Map<String, String> map = new HashMap<String, String>();
		if (map.isEmpty()) {
			map.put("1", "zhouhui1");
			map.put("2", "zhouhui2");
			map.put("3", "zhouhui3");
		}
		return map;
	}

	/**
	 * 保存数据
	 * 
	 * @param map
	 */
	public void setMap(Map<String, Car> map) {
		for (Map.Entry<String, Car> item : map.entrySet()) {
			System.out.println("mapkey: " + item.getKey());
			System.out.println("mapvalue: " + item.getValue().getColor());
			System.out.println("mapvalue: " + item.getValue().getName());
		}
	}
	
	 /**
     *  保存数据
     * @param map
     */
    public void setCar(Car car){
    	System.out.println("car: " + car.getColor());
    	System.out.println("car: " + car.getLength());
    	System.out.println("car: " + car.getName());
    }
    
    /** 保存数据 list
     * 
     * @param list
     */
    public void setList(List<String> list){
    	for (String s:list){
    		System.out.println("list: " + s);
    	}
    }
    
    /** 保存数据 map
     * 
     * @param map
     */
    public void setMap2(Map<String,String> map){
    	for (Map.Entry<String, String> item:map.entrySet()){
    		System.out.println("mapkey: " + item.getKey());
    		System.out.println("mapvalue: " + item.getValue());
    	}
    }
    
    /** 保存数据 map
     * 
     * @param map
     */
    public void setList2(List<Car> list){
    	for (Car c:list){
    		System.out.println("color: " + c.getColor());
    		System.out.println("name: " + c.getName());
    		System.out.println("length: " + c.getLength());
    	}
    }
}


客户端测试代码
testClient.java
package com.xfire;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
/*******************************************************************************
 * 
 * testClient.java
 * 
 * @copyright Copyright: 2009-2012
 * @creator 周辉<br/>
 * @create-time May 22, 2009 10:34:14 AM
 * @revision $Id: *
 ******************************************************************************/
public class testClient {
	public static void main(String[] args) {
		Service srvcModel = new ObjectServiceFactory()
				.create(IBasic.class);
		XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
				.newInstance().getXFire());

		String helloWorldURL = "http://localhost:8081/xfire/services/HelloService";
		try {
			IBasic basic = (IBasic) factory.create(srvcModel,
					helloWorldURL);
			 // 客户端调用服务端list 数据
	        List<String> list =basic.getList();
	        for (String s :list){
	        	 System.out.println("list: " + s);    
	        }
	        System.out.println("Hello: " + basic.hello());    
	        System.out.println("car: " + basic.getCar().getName()); 
	        // 客户端调用服务端MAP 数据
	        Map<String,String> map =basic.getMap();
	        for(Map.Entry<String,String> item:map.entrySet()){
	        	System.out.println("mapkey: " +item.getKey()); 
	        	System.out.println("mapvalue: " +item.getValue());    
	        }
//	        // 客户端向服务端发送数据
//	        Map<String,Car> map2 = new HashMap<String,Car>();
//	        if(map2.isEmpty()){
//	        	Car c = new Car();
//	        	c.setColor("red");
//	        	c.setLength("111");
//	        	c.setName("zhouhui");
//	        	map2.put("1", c);
//	        	map2.put("2", c);
//	        	map2.put("3", c);
//	        }
//	        basic.setMap(map2);
	        
	        //客户端向服务端发送数据 javabean
	        Car c = new Car();
	        c.setColor("red");
        	c.setLength("111");
        	c.setName("zhouhui");
        	basic.setCar(c);
        	
        	//客户端向服务端发送数据 list
        	List<String> list4= new ArrayList<String>();
        	list4.add("zhouhui1");
        	list4.add("zhouhui4");
        	list4.add("zhouhui2");
        	list4.add("zhouhui5");
        	basic.setList(list);
        	
        	//客户端向服务端发送数据 map
        	Map<String,String> map4= new HashMap<String,String>();
        	map4.put("1", "test1");
        	map4.put("2", "test2");
        	map4.put("3", "test3");
        	map4.put("4", "test4");
        	basic.setMap2(map4);
        	
        	////客户端向服务端发送数据 list javabean
        	List<Car> list5= new ArrayList<Car>();
        	for (int i=0;i<4;i++){
        		Car c2= new Car();
        		c2.setColor("red");
        		c2.setLength(i+"");
        		c2.setName("zhouhui"+i);
        		list5.add(c2);
        	}
        	basic.setList2(list5);
        	
//	        // 客户端向服务端发送数据
	        Map<String,Car> map2 = new HashMap<String,Car>();
            for (int i=0;i<4;i++){
            	Car c24= new Car();
            	c24.setColor("red");
            	c24.setLength(i+"");
            	c24.setName("zhouhui"+i);
            	map2.put(i+"", c24);
            }
	        basic.setMap(map2);

		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}
}


其中用到MAP 传递JAVABEAN,所以要用到IBasic.aegis.xml
XXX.aegis.xml,其中IBasic 实现服务端接口名称
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
<mapping>
        <method name="setCar">
            <parameter componentType="com.xfire.Car"/>
        </method>
        <method name="setMap">
            <parameter index="0" keyType="java.lang.String" componentType="com.xfire.Car"/>
        </method>
        <method name="setList2">
            <parameter index="0" componentType="com.xfire.Car"/>
        </method>
</mapping>
</mappings>

需要传递服务端代码 <method name="setCar">setCar 对以接口方法名称
parameter 是借口中传递的参数 index 是参数的第几个位置 componentType 参数传递的类型

下面还有一个XML暴露接口和实现类的XML 文件
services.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
       <name>HelloService</name>
        <serviceClass>com.xfire.IBasic</serviceClass>
       <implementationClass>com.xfire.BasicService</implementationClass>
    </service>
    <!--
    <service>
       <name>FileService</name>
        <serviceClass>test.IFileTransport</serviceClass>
       <implementationClass>test.FileTransportimpl</implementationClass>
        <scope>request</scope>
        <properties>
        	<propertie key="mtom-enabled">true</propertie>
        </properties>
    </service>
      -->
</beans>

其中name是发布该接口调用的名,serviceClass 是服务端暴露的接口
implementationClass是接口的实现类

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>
    <load-on-startup>0</load-on-startup>
  </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>


好了可以发布程序了,用MYeclipse 发布TOMCAT 启动TOMCAT
客户端口运行testClient 调用服务端数据,同时发送客户端数据写入服务端,服务端控制台可以打印出记录。
一切OK了,详细代码可以参考附件
分享到:
评论
1 楼 renguistyle 2010-03-15  
  Service srvcModel = new ObjectServiceFactory()  
                .create(IBasic.class);  
这样就对服务端产生依赖了。

相关推荐

Global site tag (gtag.js) - Google Analytics