CFX系列(二):CXF处理复杂的对象
来源:互联网 发布:中秋节淘宝有活动吗 编辑:程序博客网 时间:2024/06/06 07:32
CXF支持所有的自定义的对象以及常见的诸如List对象,可是对于Map CXF不支持,比如现在服务端根据客户端传递过来一个用户名返回一个MAP形式的权限集合,一发布就会报错,这是需要将map用适配器转换才能发布,本文将做介绍,项目框架沿用第一篇的。
服务端代码:
1:自定义一个MyRole对象
- package com.qqw.entity;
- import java.util.List;
- public class MyRole {
- private String key;
- private List<Role> value;
- public MyRole() {
- super();
- // TODO Auto-generated constructor stub
- }
- public MyRole(String key, List<Role> value) {
- super();
- this.key = key;
- this.value = value;
- }
- public String getKey() {
- return key;
- }
- public void setKey(String key) {
- this.key = key;
- }
- public List<Role> getValue() {
- return value;
- }
- public void setValue(List<Role> value) {
- this.value = value;
- }
- }
2:在接口HelloWorld返回map的方法里:
- package com.qqw.webservice;
- import java.util.List;
- import java.util.Map;
- import javax.jws.WebService;
- import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
- import com.qqw.entity.MapAdapter;
- import com.qqw.entity.Role;
- import com.qqw.entity.User;
- @WebService
- public interface HelloWorld {
- public String say(String str);
- public List<Role> getUserRole(User user);
- @XmlJavaTypeAdapter(MapAdapter.class) //采用适配器转换
- public Map<String, List<Role>> getMap();
- }
3:用户user
- package com.qqw.entity;
- public class User {
- private String name;
- private Integer id;
- public User() {
- super();
- // TODO Auto-generated constructor stub
- }
- public User(String name, Integer id) {
- super();
- this.name = name;
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- }
4:角色role
- package com.qqw.entity;
- public class Role {
- private Integer id;
- private String name;
- public Role() {
- super();
- // TODO Auto-generated constructor stub
- }
- public Role(Integer id, String name) {
- super();
- this.id = id;
- this.name = name;
- }
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
5:定义适配器
- package com.qqw.entity;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.xml.bind.annotation.adapters.XmlAdapter;
- public class MapAdapter extends XmlAdapter<MyRole[], Map<String, List<Role>>>{
- @Override
- public Map<String, List<Role>> unmarshal(MyRole[] v) throws Exception {
- Map<String, List<Role>> map=new HashMap<String, List<Role>>();
- for(int i=0;i<v.length;i++){
- MyRole myRole = v[i];
- map.put(myRole.getKey(), myRole.getValue());
- }
- return map;
- }
- @Override
- public MyRole[] marshal(Map<String, List<Role>> v) throws Exception {
- MyRole[] myroles=new MyRole[v.size()];//定义一个实体类数组
- int i=0;
- for(String key:v.keySet()){
- myroles[i]=new MyRole();
- myroles[i].setKey(key);
- myroles[i].setValue(v.get(key));
- i++;
- }
- return myroles;
- }
- }
6:HelloWorld实现类
- @Override
- public Map<String, List<Role>> getMap() {
- Map<String, List<Role>> map=new HashMap<String, List<Role>>();
- List<Role> list=new ArrayList<Role>();
- list.add(new Role(1, "总经理"));
- list.add(new Role(2, "技术总监"));
- List<Role> list1=new ArrayList<Role>();
- list1.add(new Role(3, "程序呀U呢"));
- map.put("qqw", list);
- map.put("qqw1", list1);
- return map;
- }
7:接口的东西改了,需要重新在客户端自动生成一边代码,具体怎样自动参考上一篇文章,写一个main方法调用
- HelloWorldService hService=new HelloWorldService();
- HelloWorld helloWorld = hService.getHelloWorldPort();
- User user=new User();
- user.setName("qqw1");
- List<Role> roleList = helloWorld.getUserRole(user);
- for(int i=0;i<roleList.size();i++){
- System.out.println("编号:"+roleList.get(i).getId()+"/角色名称:"+roleList.get(i).getName());
- }
- MyRoleArray map = helloWorld.getMap();
- List<MyRole> list = map.item;
- for(int i=0;i<list.size();i++){
- System.out.print(list.get(i).getKey()+":");
- for(Role r:list.get(i).getValue()){
- System.out.print(r.getId()+","+r.getName());
- }
- System.out.println("================");
- }
8:后台打印的东西
至此,CXF处理Map类型讲解完毕
阅读全文
0 0
- CFX系列(二):CXF处理复杂的对象
- CFX系列(二):CXF处理复杂的对象
- CXF--处理复杂类型
- 处理复杂的JSON对象
- CXF+JAXB处理复杂数据
- CXF+JAXB处理复杂数据
- CXF+JAXB处理复杂数据
- CXF 动态客户端--复杂对象
- CXF 动态客户端--复杂对象
- CXF传输复杂对象问题
- CXF传输复杂对象问题
- CXF 动态客户端--复杂对象
- WS之cxf处理的复杂类型(Map)
- CXF webservice JAXB 处理复杂数据类型方法
- CXF webservice JAXB 处理复杂数据类型方法
- CXF 处理一些Map 等复杂类型
- cxf处理一些Map等复杂类型
- CXF处理一些Map等复杂类型
- R文本挖掘处理
- 按位或运算符|
- 你应该知道的VirtualBox虚拟机网络配置
- Python logging 模块学习资料
- Java
- CFX系列(二):CXF处理复杂的对象
- 11月3日云栖精选夜读:《maven实战》读书笔记2——maven安装(windows和eclipse插件)
- MySQL中concat函数,concat_ws,group_concat,repeat() 函数用法
- 嵌入式项目1--Qt编写上位机软件
- Java内存图以及堆、栈、常量区、静态区、方法区的区别
- IDempiere实体设置向导乱码解决办法
- 机器学习和数据挖掘2——来认识Jupyter
- js获取url
- CXF系列(三):拦截器