遇到cxf本身不能处理的数据,如cxf不能本身处理Map对象,遇到这种状况须要开发工程师本身写代码处理 1.@XmlJavaTypeAdapter:该注解修饰不能处理的类型,该注解jDK自带的,经过value指定一个转换器: //@XmlJavaTypeAdapter:该注解jDK自带的,经过value指定一个转换器 @XmlJavaTypeAdapter(value=FKXMLAdapter.class)Map<String, Cat> getAllCats(); FKXMLAdapter类是咱们本身定义的. Map<String, Cat>是cxf不能处理的类型. 2.FKXMLAdapter的代码以下 FKXMLAdapter继承XmlAdapter,用StringCat模拟Map<String, Cat> /** * @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<String, Cat> * 实现集成的方法达到StringCat,Map<String, Cat>之间的相互转换 */ public class FKXMLAdapter extends XmlAdapter<StringCat, Map<String, Cat>> { @Override public Map<String, Cat> unmarshal(StringCat v) throws Exception { Map<String, Cat> map = new HashMap<String, Cat>(); for (Entry entry : v.getEntries()) { System.out.println(entry.getKey()); map.put(entry.getKey(), entry.getValue()); } return map; } @Override public StringCat marshal(Map<String, Cat> 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<Entry> entries = new ArrayList<Entry>(); public List<Entry> getEntries() { return entries; } public void setEntries(List<Entry> entries) { this.entries = entries; } }