您的位置:首页 > 其它

WebService处理Map

2016-05-02 23:48 246 查看
摘要: WebService处理Map

遇到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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: