用cxf写了一个webservice,测试的时候可以传入String,为了传入Map,写了转换类,在Myeclipse10上是可以传Map的,现在项目用的是2014,用maven搭建的,移植的时候发现不能传Map了,求大神指教,下面上图
配置文件
service
@WebService
@SOAPBinding(style=Style.RPC)
public interface TestService {
public String test(String s);
public String sendMap(@XmlJavaTypeAdapter(StringObjectMapAdapter.class) Map<String, Object> data);
}
实现类
@WebService
@SOAPBinding(style=Style.RPC)
public class TestServiceImpl implements TestService {
@Override
public String test(String s) {
return s;
}
@Override
public String sendMap(@XmlJavaTypeAdapter(StringObjectMapAdapter.class) Map data) {
return data.toString();
}
}
转换类和转换类型类
public class Data {
private List<Entry> list = new ArrayList<Entry>();
public void addEntry(String fieldName, Object fieldValue) {
Entry entry = new Entry();
entry.setKey(fieldName);
entry.setValue(fieldValue);
list.add(entry);
}
public List<Entry> getList() {
return list;
}
public void setList(List<Entry> list) {
this.list = list;
}
public static class Entry {
private String key;
private Object value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
}
public class StringObjectMapAdapter extends XmlAdapter<Data, Map<String, Object>> {
@Override
public Map<String, Object> unmarshal(Data data) throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
for (Data.Entry entry : data.getList()) {
map.put(entry.getKey(), entry.getValue());
}
return map;
}
@Override
public Data marshal(Map<String, Object> map) throws Exception {
Data data = new Data();
for (Map.Entry<String, Object> entry : map.entrySet()) {
data.addEntry(entry.getKey(), entry.getValue());
}
return data;
}
}
客户端测试类
public class ClientTest {
public static void main(String[] args) {
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
//webservice地址
String path = "http://127.0.0.1:8080/Demo/services/TestService?wsdl";
// 创建客户端连接
Client client = dcf.createClient(path);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy hcp = new HTTPClientPolicy();
hcp.setConnectionTimeout(2000);//连接超时
hcp.setReceiveTimeout(200000);//请求超时
http.setClient(hcp);
Object[] obj = null;
Map map = new HashMap();
map.put("a", "111");
try {
//将map序列化后调用接口方法
Data map1 = new StringObjectMapAdapter().marshal(map);
// obj = client.invoke("sendMap", map1);
obj = client.invoke("sendMap", map);
} catch (Exception e) {
}
String returnData = obj[0].toString();//返回的数据串
System.out.println(returnData);
}
}
http://www.cnblogs.com/hoojo/archive/2011/03/30/1999523.html