CXF--處理複雜型別

BtWangZhi發表於2017-10-28

把不能支援的型別轉化為能支援
1 將Map型別的資料轉為能支援的型別。
服務端:

@WebService
public interface HelloService {
    @XmlJavaTypeAdapter(MapAdapter.class)
    public Map<Integer, List<User>> getMap();
}

@WebService
public class HelloServiceImpl implements HelloService{  
    //測試返回Map
    public Map<Integer,List<User>> getMap(){
        Map<Integer,List<User>> map=new HashMap<Integer,List<User>>();
        List<User> lstUser=new ArrayList<User>();
        lstUser.add(new User(1, "1", "1"));
        lstUser.add(new User(2, "2", "2"));
        map.put(1, lstUser);
        return map;
    }
}

介面卡:

/**
 * 適配中心
 * @author Tang
 *
 */
public class MapAdapter extends XmlAdapter<MyUser[], Map<Integer, List<User>>>{

    /**
     * 適配轉換MyUser[] v-》 Map<Integer, List<User>>
     */
    @Override
    public Map<Integer, List<User>> unmarshal(MyUser[] v) throws Exception {
        Map<Integer, List<User>> map=new HashMap<Integer,List<User>>();
        for(int i=0;i<v.length;i++){
            MyUser u=v[i];
            map.put(u.getKey(), u.getValue());
        }
        return map;
    }

    /**
     * Map<Integer, List<User>> -> MyUser[]
     */
    @Override
    public MyUser[] marshal(Map<Integer, List<User>> v) throws Exception {
        MyUser[] mapUser=new MyUser[v.size()];
        int i=0;
        for(Integer key:v.keySet()){
            mapUser[i]=new MyUser();
            mapUser[i].setKey(key);
            mapUser[i].setValue(v.get(key));
            i++;
        }
        return mapUser;
    }
}

重新生成客戶端的程式碼後執行:
這裡寫圖片描述

相關文章