【WebService处理Map】2019独角兽企业重金招聘Python工程师标准>>>
文章图片
遇到cxf自己不能处理的数据,如cxf不能自己处理Map对象,遇到这种情况需要开发工程师自己写代码处理
1.@XmlJavaTypeAdapter:该注解修饰不能处理的类型,该注解jDK自带的,通过value指定一个转换器:
//@XmlJavaTypeAdapter:该注解jDK自带的,通过value指定一个转换器
@XmlJavaTypeAdapter(value=https://www.it610.com/article/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 = https://www.it610.com/article/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