首页 > 代码库 > CXF中的类型转换
CXF中的类型转换
在WebService中消息的传递可以是原生数据类型、String、List、Set等,但是对于Map型的数据类型就需要通过相应的转换才能传递。
实例:
@WebService
public interface Helloworld {
public String sayHello(String name);
public List<Cat> getCatByUserName(User user);
public @XmlJavaTypeAdapter(value = http://www.mamicode.com/Adapter.class)Map<String,Cat> getCat();
} //该WebService 中含有map类型数据的传递,侧需要通过@XmlJavaTypeAdapter 注解接口来实现,其中value表示我们自定义的转换类,定义的转换类需要继承XmlAdapter<?,#>其中?表示我们转换之后的类型,#表示原类型
package util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import bean.Cat;
public class Adapter extends XmlAdapter<MyMap, Map<String,Cat>> {
@Override
public Map<String, Cat> unmarshal(MyMap v) throws Exception { // 复写方法 :转换回来
Map<String,Cat> map=new HashMap<String,Cat>();
List<bean.Entry> list=v.getList();
for(bean.Entry entry:list)
{
map.put(entry.getNum(), entry.getCat());
}
return map;
}
@Override
public MyMap marshal(Map<String, Cat> v) throws Exception { // 复写方法 :转换过去
MyMap myMap=new MyMap();
List<bean.Entry> list=new ArrayList<bean.Entry>();
bean.Entry entry=null;
Set<java.util.Map.Entry<String,Cat>> set=v.entrySet();
for(Iterator<java.util.Map.Entry<String,Cat>> iter=set.iterator();iter.hasNext();)
{
java.util.Map.Entry<String,Cat> t=iter.next();
entry=new bean.Entry();
entry.setNum(t.getKey());
entry.setCat(t.getValue());
list.add(entry);
}
myMap.setList(list);
return myMap;
}
}
public class Cat {
private int id;
private String name;
private String password;
//省略setter、getter
}
public class Entry {
private String num;
private Cat cat;
//省略setter、getter
}
public class MyMap {
private List<Entry> list;
//省略setter、getter
}
CXF中的类型转换