luckystar +
send mail to luckystar sina weibo
关于订阅 luckystar's blog » Project »
分类:
标签:

List和Map都没有实现序列化接口,不能在网络上传输数据。 因此Axis2的service方法中也不能返回List和Map,否则会报类型转换异常。 其实有一种变通的方式可以实现这个目的,那就是使用Json。 在service方法中返回List或Map对应的JSON字符串,客户端进行解析得到List或Map。 如下: service类:

package com.axis2.webservice;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
 
public class TestService {
     
    // 返回集合或Map等可以通过返回Json字符串
    // 在客户端解析得到List或Map
    public String getListString() {
        List<String> strList = new ArrayList<String>();
        strList.add("hello");
        strList.add("world");
        strList.add("!!!");
        JSONArray jsonArray = JSONArray.fromObject(strList);
        System.out.println(jsonArray.toString());
        return jsonArray.toString();
    }
     
    public String getMapString() {
        Person p1 = new Person();
        p1.setAge(10);
        p1.setName("儿童");
         
        Person p2 = new Person();
        p2.setAge(20);
        p2.setName("成年");
         
        Map<String,Person> map = new HashMap<String,Person>();
        map.put("p1", p1);
        map.put("p2", p2);
         
        JSONObject jsonObj = JSONObject.fromObject(map);
        return jsonObj.toString();
    }
}

客户端调用:

package com.axis2.webservice;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
 
import javax.xml.namespace.QName;
 
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
 
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
 
public class TestServiceTest {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        RPCServiceClient serviceClient;
        try {
            serviceClient = new RPCServiceClient();
            Options options = serviceClient.getOptions();
            options.setTo(new EndpointReference("http://127.0.0.1:8080/axis2-ws/services/testService"));
             
            // Service返回集合字符串,客户端通过Json转换得到List
            qName = new QName("http://webservice.axis2.com","getListString");
            String jsonStr = (String) serviceClient.invokeBlocking(qName, new Object[]{}, new Class[]{String.class})[0];
            JSONArray jsonArray = JSONArray.fromObject(jsonStr);
            for (int i=0;i<jsonArray.size();i++) {
                Object value = jsonArray.get(i);
                System.out.println(value);
            }
            System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
             
            // Service段返回Map字符串,客户端通过JSON解析得到Map
            qName = new QName("http://webservice.axis2.com","getMapString");
            jsonStr = (String) serviceClient.invokeBlocking(qName, new Object[]{}, new Class[]{String.class})[0];
            System.out.println(jsonStr);
            JSONObject jsonObj = JSONObject.fromObject(jsonStr);
            Map<String,Object> map = jsonObj;
            Iterator<String> its = map.keySet().iterator();
            while (its.hasNext()) {
                String key = its.next();
                Object value = map.get(key);
//              System.out.println("key:" + key + ",value:" + value);
                Person p = (Person) JSONObject.toBean((JSONObject)value,Person.class);
                System.out.println(p);
            }
        } catch (AxisFault e) {
            e.printStackTrace();
        }
    }
 
}
作者:qincidong
出处:http://qincidong.github.io/blog/2015/02/10/axis2-webservice-return-list-map.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
分类: 标签:
友荐云推荐