CXF的WebService传递复杂对象Map

leoooooo_ 2016-10-26 10:41:41
用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);
}
}
...全文
198 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,655

社区成员

发帖
与我相关
我的任务
社区描述
Web开发应用服务器相关讨论专区
社区管理员
  • 应用服务器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧