今天整理了一下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了,详细代码可以参考附件
相关资源:XFire 和spring完整集成实例