复杂的数据对象
List
Map
数组
自定义对象---这个我们在前面已经说过了。
1、javabean的使用--必须是可序列化的类
public class Address implements Seriazable {
private String address;
private String city;
private String country;
private String[] array;
private List<Integer> list;
private boolean isExist;
public Address() {
list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
}
//setter getter 方法
}
编写服务类
public class AddressManager { //ws的服务类
//定制不同服务方法
public List<Address> getAddress() {
List<Address> returnlist = new ArrayList<Address>();
Address address = new Address();
address.setAddress("天津");
address.setCity("南开区");
address.setCountry("中国");
address.setExist(false);
address.setArray(new String[] {“a", "b", "c"});
return returnlist;
}
//在添加另外一个方法
public Map<Integer, Address> getAddressMap() {
Map<Integer, Address> map = new HashMap<Integer, Address>();
Address address = new Address();
address.setAddress("天津");
address.setCity("南开区");
address.setCountry("中国");
address.setExist(false);
address.setArray(new String[] {“a", "b", "c"});
map.put(1, address);
return map;
}
//编写server-config.wsdd的配置项目
<service name="AddressManager" provider="java:RPC">
<parameter name="className" value="com.object.ws.AddressManager" />
<parameter name="allowMethods" value="*" />
<!--定义AddressManager所使用的JavaBean的数据类型 -->
<beanMapping qname="myNSD:Address" xmlns:myNSD="urn:AddressManager" languageSpecificType="java:com.objectws.Address"/>
</service>
//客户端测试代码
String url = "http://localhost:8080/axis/services/AddressManager";
Service service = new Service();
try {
Call call = (Call) service.createCall();
QName qn = new QName("urn:AddressManager", "Address");//在ws查找Address(javabean的类型)
//找到javaBean的描述,将此类型javaBean,在call中进行设置(序列化,反序列化)
call.registerTypeMapping(Address.class, qn, new BeanSerializerFactory(Address.class, qn), new BeanDeserializerFactory(Address.class, qn));
//设置连接
call.setTargetEndpointAddress(new URL(url));
call.setOperationName(new QName("AddressManage", "getAddress"));
//设置返回结果的类型
call.setReturnClass(ArrayList.class);
Object[] ss = null; //无参
ArrayList<Address> list = (ArrayList<Address>) call.invoke(ss); //
} catch ( Exception e ) {
e.printStackTrace();
}
这里注意在我们的自定义类中还有自定义类,这个时候我们还是需要配置一个<beanMapping>就可以了。
而且这些类必须要进行序列化。