1、CXF的获取
1、传递List、Map、数组、自定义对象
Address.java
package com.knowology.object;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class Address implements Serializable{
private static final long serialVersionUID = 1L;
//需要向webservice传递的对象,其中属性也要支持序列化
private String address;
private String city;
private String country;
private String[] array;
private List<Integer> list;
private boolean isExit;
public Address(){
list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
}
setter、getter省略...
}
server-config.wsdd
<service name="AddressManager" provider="java:RPC">
<parameter name="allowedMethods" value="*" />
<parameter name="className" value="com.knowology.object.AddressManager"/>
<!-- 定义AddressManager中使用的JavaBean的数据类型 -->
<beanMapping qname="myNSD:Address" xmlns:myNSD="urn:AddressBeanManager" languageSpecificType="java:com.knowology.object.Address"/>
</service>
ObjectClient.java
package com.knowology.object;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
public class ObjectClient {
public static void main(String[] args) {
getWSList();
getWSMap();
}
public static void getWSList(){
String url = "http://localhost:8080/axis/services/AddressManager";
Service service = new Service();
try {
Call call = (Call)service.createCall();
QName qName = new QName("urn:AddressBeanManager","Address");//在ws中查找Address(JavaBean)类型
//找到JavaBean的描述,将此类型JavaBean在call中进行设置(序列化、反序列化)
call.registerTypeMapping(Address.class, qName, new BeanSerializerFactory(Address.class, qName), new BeanDeserializerFactory(Address.class,qName));
call.setTargetEndpointAddress
(url);
call.setOperationName(new QName("AddressManager", "getAddressList"));
call.setReturnClass(ArrayList.class);
Object[] obj = null;
ArrayList<Address> list = (ArrayList<Address>)call.invoke(obj);
System.out.println(list.size()+"n");
for(Address address:list){
System.out.println(address.getAddress());
System.out.println(address.getCity());
System.out.println(address.getCountry());
System.out.println(address.getArray());
System.out.println(address.isExit());
System.out.println(address.getList()+"n");
}
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void getWSMap(){
String url = "http://localhost:8080/axis/services/AddressManager";
Service service = new Service();
try {
Call call = (Call)service.createCall();
QName qName = new QName("urn:AddressBeanManager","Address");//在ws中查找Address(JavaBean)类型
//找到JavaBean的描述,将此类型JavaBean在call中进行设置(序列化、反序列化)
call.registerTypeMapping(Address.class, qName, new BeanSerializerFactory(Address.class, qName), new BeanDeserializerFactory(Address.class,qName));
call.setTargetEndpointAddress
(url);
call.setOperationName(new QName("AddressManager", "getAddressMap"));
call.setReturnClass(HashMap.class);
Object[] obj = null;
Map<Integer,Address> map = (HashMap<Integer,Address>)call.invoke(obj);
System.out.println("n"+map.size()+"n");
for(Iterator<Integer> it = map.keySet().iterator();it.hasNext();){
Integer integer = it.next();
Address address
=map.get(integer);
System.out.println("t"+address.getAddress());
System.out.println("t"+address.getCity());
System.out.println("t"+address.getCountry());
System.out.println("t"+address.getArray());
System.out.println("t"+address.isExit());
System.out.println("t"+address.getList()+"n");
}
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}