使用CXF开发WebService程序的总结(五):基于Map数据类型处理的的客户端和服务端代码的编写
2018-01-02 13:49
951 查看
1. 首先我们按照List或数组等处理方式来处理Map,看看效果
1.1 在服务端的接口中添加以下方法/** * 查询所有班级信息加上对应的学生列表 * * @return */ public Map<String, List<User>> findAllUsers();1.2 在实现类中模拟数据库访问实现
@Override public Map<String, List<User>> findAllUsers() { Map<String, List<User>> map = new HashMap<>(); List<User> users1 = new ArrayList<>(); users1.add(new User(1, "aa", 1)); users1.add(new User(2, "bb", 1)); map.put("1班", users1); List<User> users2 = new ArrayList<>(); users2.add(new User(3, "cc", 2)); map.put("2班", users2); return map; }1.3 发布 看结果
1.4 结论:CXF只支持String,基本数据类型,JavaBean类型,List集合,数组的转化,不支持Map及非JavaBean的类型的转换。
2. 解决CXF不能处理Map的方法
解决思路就是 将 Map通过适配器 转成 cxf可以处理的数据类型2.1 在服务端的接口中指定方法上添加注解 @XmlJavaTypeAdapter(value = MapAdapter.class),例如如下:
/** * 查询所有班级信息加上对应的学生列表 * * @return */ @XmlJavaTypeAdapter(value = MapAdapter.class) public Map<String, List<User>> findAllUsers();这里的 类MapAdapter 是 用来进行编排和编排的
2.2 创建和实现转换类
package com.lonely.adapter; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.bind.annotation.adapters.XmlAdapter; import com.lonely.pojo.MyClass; import com.lonely.poj 4000 o.User; public class MapAdapter extends XmlAdapter<MyClass[], Map<String, List<User>>> { @Override public Map<String, List<User>> unmarshal(MyClass[] v) throws Exception { Map<String, List<User>> map = new HashMap<>(); for (MyClass myClass : v) { map.put(myClass.getKey(), myClass.getValue()); } return map; } @Override public MyClass[] marshal(Map<String, List<User>> v) throws Exception { MyClass[] myClasses = new MyClass[v.size()]; int i = 0; for (String key : v.keySet()) { myClasses[i] = new MyClass(); myClasses[i].setKey(key); myClasses[i].setValue(v.get(key)); i++; } return myClasses; } }在这里用到了 MyClass[] ,MyClass是对我们的Map数据做得一个封装,里面实际上跟map一样。有key和value
2.3 自定义bean MyClass
package com.lonely.pojo; import java.util.List; /** * map转换的 自定义bean * * @author 15072 * */ public class MyClass { private String key; private List<User> value; public String getKey() { return key; } public void setKey(String key) { this.key = key; } public List<User> getValue() { return value; } public void setValue(List<User> value) { this.value = value; } public MyClass() { super(); // TODO Auto-generated constructor stub } public MyClass(String key, List<User> value) { super(); this.key = key; this.value = value; } }2.4 至此,在来发布,发现发布成功,下面就是客户端调用测试
3. 客户端调用测试
3.1 编写测试package com.lonely.client; import java.util.List; import com.lonely.server.HelloWs; import com.lonely.server.HelloWsService; import com.lonely.server.MyClass; import com.lonely.server.MyClassArray; import com.lonely.server.User; public class HelloInvoking { public static void main(String[] args) { HelloWsService helloWsService = new HelloWsService(); HelloWs helloWs = helloWsService.getHelloWsPort(); // System.out.println(helloWs.sayHelloWs("dugu")); /* * Clazz clazz = new Clazz(); clazz.setClassId(1); List<User> list = * helloWs.findUsersByClassId(clazz); for (User user : list) { * System.out.println(user.getUsername() + ":" + user.getClassId()); } */ MyClassArray myClassArray = helloWs.findAllUsers(); List<MyClass> list = myClassArray.getItem(); for (MyClass myClass : list) { System.out.println("班级:" + myClass.getKey()); List<User> users = myClass.getValue(); for (User user : users) { System.out.println("\t学生:" + user.getUsername()); } } } }3.2 查看结果 发现成功调用
相关文章推荐
- 使用CXF开发WebService程序的总结(四):基于bean的客户端和服务端代码的编写
- 使用CXF开发WebService程序的总结(二):创建webservice服务端
- 使用CXF开发WebService程序的总结(七):Spring+CXF+Mybatis+Mysql共同打造的服务端示例
- 使用CXF开发WebService程序的总结(三):创建webservice客户端
- 基于ONVIF协议的(IPC)客户端程序开发-5:使用gSOAP生成ONVIF框架代码
- (转)基于MVC4+EasyUI的Web开发框架经验总结(11)--使用Bundles处理简化页面代码
- Android通过ksoap2传递复杂数据类型,服务端为CXF发布的webservice,亲手写的代码
- Web Service (012---webservice使用CXF写基于Spring的WebService[服务端+客户端])
- 基于MVC+EasyUI的Web开发框架经验总结(11)--使用Bundles处理简化页面代码
- 使用cxf实现webservice的客户端推送数据到服务端并返回状态给客户端
- 基于ONVIF协议的(IPC)客户端程序开发-3:使用gSOAP生成Web Services框架代码
- WebService-03-使用CXF开发服务端和客户端
- 【WebService】CXF处理javaBean等复合类型以及Map等复杂类型的数据
- 【WebService】CXF处理javaBean等复合类型以及Map等复杂类型的数据
- 基于cxf框架的webservice服务端和客户端编写
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
- 【WebService】CXF处理javaBean等复合类型以及Map等复杂类型的数据
- WebService-03-使用CXF开发服务端和客户端
- 使用CXF开发WebService程序的总结(六):结合拦截器使用
- WebService学习总结(四)——使用spring+CXF开发WebService(服务端)