CXF、AXIS2、XFire 客户端的几种调用方法 一、CXF 客户端 服务接口类 @WebService public interface TestService { public String sayHi(String s); @XmlJavaTypeAdapter(StringStringMapAdapter.class) public Map getMap(@XmlJavaTypeAdapter(StringStringMapAdapter.class) Map map); public List getList(List list); public User getUser(User user); } 说明:由于Web服务中不支持直接传Map参数,所以这里我们要写一个XML与Java的类型适配器,实现Java与XML类型的编组与解组。 Map 类型的适配器类: @XmlType(name = "StringStringMap") @XmlAccessorType(XmlAccessType.FIELD) public class StringStringMap { @XmlElement(nillable = false, name = "entry") List entries=new ArrayList(); public List getEntries() { return entries; } @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "IdentifiedString") static class StringStringEntry { @XmlElement(required = true, nillable = false) String id; String value; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } } public class StringStringMapAdapter extends XmlAdapter>{ @Override public StringStringMap marshal(Map v) throws Exception { StringStringMap map=new StringStringMap(); for(Map.Entry e:v.entrySet()){ StringStringMap.StringStringEntry sse=new StringStringMap.StringStringEntry(); sse.setId(e.getKey()); sse.setValue(e.getValue()); map.getEntries().add(sse); } return map; } @Override public Map unmarshal(StringStringMap v) throws Exception { Map map = new HashMap(); for (StringStringMap.StringStringEntry e : v.getEntries()) { map.put(e.getId(), e.getValue()); }...