package com.wxl.app.fz; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; public class Address implements Serializable { private static final long serialVersionUID = -8352904000821895111L; private Integer id; private String address; private String city; private String province; private String country; private String postalCode; private String[] array; private List<Integer> list; private Map<Integer,InnerClass> map; private boolean isExist; private InnerClass innC; public static class InnerClass implements Serializable { private static final long serialVersionUID = -7263412221199319151L; private String innerName = "static InnerClass"; public InnerClass() { } public InnerClass(String innerName) { super(); this.innerName = innerName; } public String getInnerName() { return innerName; } public void setInnerName(String innerName) { this.innerName = innerName; } } public Address() { list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); map = new HashMap<Integer,InnerClass>(); map.put(1,new InnerClass("A")); map.put(2,new InnerClass("B")); map.put(3,new InnerClass("C")); innC = new InnerClass("服务端:Address.InnerClass"); } @Override public String toString() { return "Address [address=" + address + ",array=" + Arrays.toString(array) + ",city=" + city + ",country=" + country + ",id=" + id + ",innC=" + innC + ",isExist=" + isExist + ",list=" + list + ",map=" + map + ",postalCode=" + postalCode + ",province=" + province + "]"; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getPostalCode() { return postalCode; } public void setPostalCode(String postalCode) { this.postalCode = postalCode; } public String[] getArray() { return array; } public void setArray(String[] array) { this.array = array; } public List<Integer> getList() { return list; } public void setList(List<Integer> list) { this.list = list; } public Map<Integer,InnerClass> getMap() { return map; } public void setMap(Map<Integer,InnerClass> map) { this.map = map; } public boolean isExist() { return isExist; } public void setExist(boolean isExist) { this.isExist = isExist; } public InnerClass getInnC() { return innC; } public void setInnC(InnerClass innC) { this.innC = innC; } }
package com.wxl.app.fz; import java.util.List; import java.util.Map; public interface AddressManager { public List<Address> getAddressList(); public List<Address> setAddressList(List<Address> list); public Map<Integer,Address> getAddressMap(); public Map<Integer,Address> setAddressMap(Map<Integer,Address> map); }
package com.wxl.app.fz; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class AddressManagerImpl implements AddressManager { private int requestCount = 0; public List<Address> getAddressList() { requestCount++; Sy@R_404[email protected]("requestCount = " + requestCount); List<Address> list = new ArrayList<Address>(); Address address = new Address(); address.setId(1); address.setAddress("HaiDian"); address.setArray(new String[] { "1","2","3" }); address.setCity("BeiJing"); address.setCountry("China"); address.setExist(false); address.setPostalCode("10081"); address.setProvince("BeiJing"); list.add(address); address = new Address(); address.setId(1); address.setAddress("ChaoYang"); address.setArray(new String[] { "A","B","C" }); address.setCity("BeiJing"); address.setCountry("China"); address.setExist(true); address.setPostalCode("10081"); address.setProvince("BeiJing"); list.add(address); return list; } public List<Address> setAddressList(List<Address> list) { requestCount++; Sy@R_404[email protected]("requestCount = " + requestCount); return list; } public Map<Integer,Address> getAddressMap() { requestCount++; Sy@R_404[email protected]("requestCount = " + requestCount); Map<Integer,Address> map = new HashMap<Integer,Address>(); Address address = new Address(); address.setId(1); address.setAddress("HaiDian"); address.setArray(new String[] { "1","3" }); address.setCity("BeiJing"); address.setCountry("China"); address.setExist(false); address.setPostalCode("10081"); address.setProvince("BeiJing"); map.put(address.getId(),address); address = new Address(); address.setId(1); address.setAddress("ChaoYang"); address.setArray(new String[] { "A","C" }); address.setCity("BeiJing"); address.setCountry("China"); address.setExist(true); address.setPostalCode("10081"); address.setProvince("BeiJing"); map.put(address.getId(),address); return map; } public Map<Integer,Address> map) { requestCount++; Sy@R_404[email protected]("requestCount = " + requestCount); return map; } }
AddressManager.aegis.xml
<mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xfire.codehaus.org/schemas/1.0/mapping.xsd"> <mapping> <method name="getAddressList"> <return-type componentType="com.wxl.app.fz.Address" /> </method> <method name="setAddressList"> <parameter index="0" componentType="com.wxl.app.fz.Address" /> <return-type componentType="com.wxl.app.fz.Address" /> </method> <method name="getAddressMap"> <return-type componentType="com.wxl.app.fz.Address" /> </method> <method name="setAddressMap"> <parameter index="0" componentType="com.wxl.app.fz.Address" /> <return-type componentType="com.wxl.app.fz.Address" /> </method> </mapping> </mappings>
package com.wxl.app.fz; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory; public class AddressClient { private static String url = "http://localhost:8080/book/services/AddressService"; private static String namespace = "http://test/AddressService"; public static void getAddressList() throws MalformedURLException { Service serviceModel = new ObjectServiceFactory().create(AddressManager.class,null,namespace,null); XFireProxyFactory proxy = new XFireProxyFactory(); AddressManager service = (AddressManager) proxy.create(serviceModel,url); List<Address> list = service.getAddressList(); Sy@R_404[email protected]("list size: " + list.size()); for (int i = 0; i < list.size(); i++) { Sy@R_404[email protected](list.get(i)); } } public static void setAddressList() throws MalformedURLException { Service serviceModel = new ObjectServiceFactory().create(AddressManager.class); XFireProxyFactory proxy = new XFireProxyFactory(); AddressManager service = (AddressManager) proxy.create(serviceModel,url); List<Address> list = new ArrayList<Address>(); Address address = new Address(); address.setId(1); address.setAddress("HaiDian"); address.setArray(new String[] { "1","C" }); address.setCity("BeiJing"); address.setCountry("China"); address.setExist(true); address.setPostalCode("10081"); address.setProvince("BeiJing"); list.add(address); List<Address> result = service.setAddressList(list); Sy@R_404[email protected]("list size: " + result.size()); for (int i = 0; i < result.size(); i++) { Sy@R_404[email protected](result.get(i)); } } public static void getAddressMap() throws MalformedURLException { Service serviceModel = new ObjectServiceFactory().create(AddressManager.class,url); Map<Integer,Address> map = service.getAddressMap(); Sy@R_404[email protected]("Map size: " + map.size()); Sy@R_404[email protected](map); } public static void main(String[] args) throws MalformedURLException { getAddressList(); Sy@R_404[email protected]("==================="); setAddressList(); } }
services.xml
<service> <name>AddressService</name> <namespace>http://test/AddressService</namespace> <serviceClass>com.wxl.app.fz.AddressManager</serviceClass> <implementationClass>com.wxl.app.fz.AddressManagerImpl</implementationClass> </service>
关键的问题在于:
1、一定要使用ObjectServiceFactory的create(Class clazz,String name,String namespace,Map properties)方法,传递namespace参数。这个参数和services.xml中的namespace参数要一致。
2、一定要配置XXX.aegis.xml文件。虽然在参数和返回为集合时,在使用泛型的情况下,可以不用配置此文件,但是只要参数和返回值直接或间接的包括了Map,那么此map就在调用时就会为空。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。