WebService处理Map

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

遇到cxf自己不能处理的数据,如cxf不能自己处理Map对象,遇到这种情况需要开发工程师自己写代码处理
1.@XmlJavaTypeAdapter:该注解修饰不能处理的类型,该注解jDK自带的,通过value指定一个转换器:
        //@XmlJavaTypeAdapter:该注解jDK自带的,通过value指定一个转换器
	@XmlJavaTypeAdapter(value=FKXMLAdapter.class)Map getAllCats();
	FKXMLAdapter类是我们自己定义的.
	Map是cxf不能处理的类型.
	
2.FKXMLAdapter的代码如下
        FKXMLAdapter继承XmlAdapter,用StringCat模拟Map
       /**
 * @author xp
 * @Title: FKXMLAdapter.java
 * @Package com.xp.cn.ws.adapter
 * @Description: TODO
 * @date 2016年5月1日 下午5:56:56
 * @version V1.0  
 */
package com.xp.cn.ws.adapter;

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

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

import com.xp.cn.bean.Cat;
import com.xp.cn.bean.StringCat;
import com.xp.cn.bean.StringCat.Entry;

/**
 * @author xp
 * @ClassName: FKXMLAdapter
 * @Description: TODO
 * @date 2016年5月1日 下午5:56:56
 * ValueType:能解决的类型  自定义为StringCat
 * BoundType:不能解决的类型  Map
 * 实现集成的方法达到StringCat,Map之间的相互转换
 */
public class FKXMLAdapter extends XmlAdapter> 
{

	@Override
	public Map unmarshal(StringCat v) throws Exception 
	{
		Map map = new HashMap();
		for (Entry entry : v.getEntries()) 
		{
			System.out.println(entry.getKey());
			map.put(entry.getKey(), entry.getValue());
		}
		return map;
	}

	@Override
	public StringCat marshal(Map v) throws Exception 
	{
		StringCat stringcat = new StringCat();
		for (String key : v.keySet()) 
		{
			stringcat.getEntries().add(new Entry("", v.get(key)));
		}
		return stringcat;
	}

}
        
3.StringCat的代码如下:
    /**
 * @author xp
 * @Title: StringCat.java
 * @Package com.xp.cn.ws.bean
 * @Description: TODO
 * @date 2016年5月1日 下午5:59:48
 * @version V1.0  
 */
package com.xp.cn.bean;

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

/**
 * @author xp
 * @ClassName: StringCat
 * @Description: TODO
 * @date 2016年5月1日 下午5:59:48
 * Entry封装了Map信息
 */

public class StringCat 
{
	public static class Entry
	{
		private String key;
		private Cat value;
		
		public Entry() {
		}

		public Entry(String key, Cat value) {
			this.key = key;
			this.value = value;
		}

		public String getKey() 
		{
			return key;
		}
		
		public void setKey(String key) 
		{
			this.key = key;
		}
		
		public Cat getValue() 
		{
			return value;
		}
		
		public void setValue(Cat value) 
		{
			this.value = value;
		}
	}
	
	private List entries = new ArrayList();

	public List getEntries() 
	{
		return entries;
	}

	public void setEntries(List entries) 
	{
		this.entries = entries;
	}
	
}


转载于:https://my.oschina.net/u/2253438/blog/668741

你可能感兴趣的:(WebService处理Map)