WebService小白学习 之 处理一些Map等复杂类型 (5)
上篇 WebService小白学习 之 处理JavaBean以及复合类型,list
该篇为CXF处理一些Map等复杂类型的方法。
实现过程:
1、在服务端项目IHelloWorld.java添加方法声明getRoles();
package com.gx.webservice;
import java.util.List;
import java.util.Map;
import javax.jws.WebService;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import com.gx.adapter.MapAdapter;
import com.gx.entity.Role;
import com.gx.entity.User;
@WebService
public interface IHelloWorld {
public String say(String str);
public List<Role> getRoleByUser(User user);//通过用户获取角色
@XmlJavaTypeAdapter(MapAdapter.class)
public Map<String, List<Role>> getRoles(); //获取所有用户以及对应的角色
}
2、在服务端项目创建com.gx.adapter包,创建MapAdapter.java
package com.gx.adapter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import com.gx.entity.MyRole;
import com.gx.entity.Role;
/**
* 适配器
* @ClassName: MapAdapter
* @Description: 适配转换
* @author zhoujie
* @date 2018年7月27日 下午7:58:46
* @version V1.0
*/
public class MapAdapter extends XmlAdapter<MyRole[], Map<String, List<Role>>>{
/**
* 适配转换 MyRole[] -> Map<String,List<Role>>
*/
@Override
public Map<String, List<Role>> unmarshal(MyRole[] v) throws Exception {
Map<String, List<Role>> map = new HashMap<>();
for (int i = 0; i < v.length; i++) {
MyRole r = v[i];
map.put(r.getKey(), r.getValue());
}
return null;
}
/**
* 适配转换Map<String,List<Role>> -> MyRole[]
*/
@Override
public MyRole[] marshal(Map<String, List<Role>> v) throws Exception {
MyRole[] roles = new MyRole[v.size()];
int i = 0;
for (String key : v.keySet()) {
roles[i] = new MyRole();
roles[i].setKey(key);
roles[i].setValue(v.get(key));
i++;
}
return roles;
}
}
3、在服务端项目创建com.gx.entity包,创建MyRole.java
package com.gx.entity;
import java.util.List;
/**
*
* @ClassName: MyRole
* @Description: map适配器--自定义实体
* @author zhoujie
* @date 2018年7月27日 下午7:50:17
* @version V1.0
*/
public class MyRole {
private String key; //相当于map的key
private List<Role> value; //相当于map的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;
}
}
4、在服务端项目HelloWorldImpl.java添加方法实现getRoles();
package com.gx.webservice.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.jws.WebService;
import com.gx.entity.Role;
import com.gx.entity.User;
import com.gx.webservice.IHelloWorld;
@WebService
public class HelloWorldImpl implements IHelloWorld{
public String say(String str) {
return "hello "+str;
}
@Override
public List<Role> getRoleByUser(User user) {
//模拟 数据
List<Role> rolelist = new ArrayList<>();
if(user!=null){
if(user.getUsername().equals("sa") && user.getPassword().equals("123")){
rolelist.add(new Role(1, "技术总监"));
rolelist.add(new Role(2, "架构师"));
}else if(user.getUsername().equals("zj") && user.getPassword().equals("123")){
rolelist.add(new Role(3, "程序员"));
}
}
return rolelist;
}
@Override
public Map<String, List<Role>> getRoles() {
//模拟 数据
Map<String, List<Role>> map = new HashMap<>();
List<Role> rolelist = new ArrayList<>();
rolelist.add(new Role(1, "技术总监"));
rolelist.add(new Role(2, "架构师"));
map.put("sa", rolelist);
List<Role> rolelist2 = new ArrayList<>();
rolelist2.add(new Role(3, "程序员"));
map.put("zj", rolelist2);
return map;
}
}
5、客户端项目重新使用cxf工具生成文件,忘记请看这里
6、客户端测试Client.java
package com.gx.webservice;
import java.util.List;
public class Client {
public static void main(String[] args) {
IHelloWorldService service = new IHelloWorldService();
IHelloWorld helloworld = service.getIHelloWorldPort();
//System.out.println(helloworld.say("zj"));
/*User user = new User();
user.setUsername("sa");
user.setPassword("123");
List<Role> rolelist = helloworld.getRoleByUser(user);
for (Role role : rolelist) {
System.out.println(role.getId()+","+role.getRoleName());
}*/
MyRoleArray array = helloworld.getRoles();
List<MyRole> roleList = array.item;
for (MyRole myRole : roleList) {
System.out.print(myRole.key+":");
for (Role role : myRole.value) {
System.out.print(role.getId()+","+role.getRoleName());
}
System.out.println("=================");
}
}
}
结果:
下篇
WebService小白学习 之 CXF添加拦截器,自定义拦截器