[webservice] CXF 处理Map 类型数据

利用Apache CXF处理Map类型数据。

项目结构图:

1.接口类:

package com.xwolf.cxf.dao;

import java.util.List;
import java.util.Map;
import javax.jws.WebService;

import com.xwolf.cxf.pojo.User;


@WebService
public interface IHelloWS {
    
    public String getName(String name );
    
    public User getUser();
    
    public List<User> getUserList();
    
    public Map<String, User> getUserMap();

}

2 ,接口实现类:

package com.xwolf.cxf.dao.impl;

import java.util.List;
import java.util.Map;

import javax.jws.WebService;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

import com.xwolf.cxf.dao.IHelloWS;
import com.xwolf.cxf.pojo.User;
import com.xwolf.cxf.util.MapOfUser;
import com.xwolf.cxf.util.UserService;

@WebService
public class HelloWSImpl implements IHelloWS {

    @Override
    public String getName(String name) {
        return "Hello,CXF: getName():"+ name+",你好 !";
    }

    @Override
    public User getUser() {
        
        User user =new User(21, "彭天吧", 6453.43);
        return user;
    }

    @Override
    public List<User> getUserList() {
        return UserService.getUserList();
    }
    
    /**
     * 加上XmlJavaTypeAdapter注解,用封装的类处理
     */
    @Override
    @XmlJavaTypeAdapter(value=MapOfUser.class)
    public Map<String, User> getUserMap() {
        
        return UserService.getUserMap();
    }

}

3.User实体类:

package com.xwolf.cxf.pojo;

/**
 * USER实体类
 * @author Administrator
 *
 */
public class User {
    
    private Integer id ;
    private String name ;
    private Double saraly;
   // 构造器,get和set方法省略
}

UserMap:

package com.xwolf.cxf.pojo;

import java.util.ArrayList;
import java.util.List;

/**
 * 封装Map为普通实体类
 * @author xwolf
 * @Date 2015-05-30  10:24  
 *
 */
public class UserMap {
    
    public static class EntryMap{
        
        private String key;
        private User value ;
        public EntryMap(){
            
        }
        public EntryMap(String key2, User user2) {
            this.key=key2;
            this.value=user2;
        }
        public String getKey() {
            return key;
        }
        public void setKey(String key) {
            this.key = key;
        }
        public User getValue() {
            return value;
        }
        public void setValue(User user) {
            this.value = user;
        }
        
        
    }
    
    private List<EntryMap>  entryMaps = new ArrayList<UserMap.EntryMap>();

    public List<EntryMap> getEntryMaps() {
        return entryMaps;
    }

    public void setEntryMaps(List<EntryMap> entryMaps) {
        this.entryMaps = entryMaps;
    }
    
    

}

4. MapOfUser:

package com.xwolf.cxf.util;

import java.util.HashMap;
import java.util.Map;

import javax.xml.bind.annotation.adapters.XmlAdapter;

import com.xwolf.cxf.pojo.User;
import com.xwolf.cxf.pojo.UserMap;
import com.xwolf.cxf.pojo.UserMap.EntryMap;

/**
 * map转化为为普通实体类的处理方法
 * 
 * @author xwolf
 * @Date 2015-05-30 10:26AM
 *
 */
public class MapOfUser extends XmlAdapter<UserMap, Map<String, User>> {

    @Override
    public Map<String, User> unmarshal(UserMap v) throws Exception {
        
               Map<String,User> mapUser = new HashMap<String, User>();
               for (EntryMap map :v.getEntryMaps()){
                   mapUser.put(map.getKey(), map.getValue());
               }
        return  mapUser;
    }

    @Override
    public UserMap marshal(Map<String, User> v) throws Exception {
        UserMap userMap = new UserMap();
        for(String key: v.keySet()) {
        userMap.getEntryMaps().add(new EntryMap(key,v.get(key)));
        }
        
        return userMap;
    }
    
    

}

UserService:

package com.xwolf.cxf.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.xwolf.cxf.pojo.User;
import com.xwolf.cxf.pojo.UserMap;
import com.xwolf.cxf.pojo.UserMap.EntryMap;
/**
 * 数据构造 模拟数据库
 * @author Administrator
 *
 */
public class UserService {
    
    /**
     * List类型数据
     * @return
     */
    public static List<User> getUserList(){
        
        List<User> list = new ArrayList<User>();
        list.add(new User(1,"Jhon", 234.32));
        list.add(new User(10,"纳兰性德",432.32));
        list.add(new User(32, "Rollia",8543.32));
        list.add(new User(54, "Yellow", 690.32));
        
        return list ;
    }
    
    /**
     * 封装Map数据
     * @return
     */
    public static Map<String, User> getUserMap(){
        
        Map<String, User> map = new HashMap<String, User>();
        
        map.put("1", new User(1, "测试", 232.432));
        map.put("21", new User(12,"黑狗身上白",4324D));
        map.put("23", new User(13,"白狗身上肿",(double) 432443f));
        map.put("21", new User(14,"上白",5435.54));
        
        return map;
    }

}

TestWS:

package com.xwolf.cxf.test;

import javax.xml.ws.Endpoint;

import com.xwolf.cxf.dao.impl.HelloWSImpl;

/**
 * 发布webservice 
 * @author xwolf
 *
 */
public class TestWS {
    
    public static void main(String[] args) {
        
        Endpoint.publish("http://localhost:8989/Web/service", new HelloWSImpl());
        System.out.println("发布成功");
        
    }

}

 

参考:

处理Map、非javabean式的复合类等CXF无法自动转化的类型 (3)

posted @ 2015-05-30 11:48  snow__wolf  阅读(249)  评论(0)    收藏  举报