首页 > 代码库 > 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中的类型转换