文档章节

WebService学习(三)——javaBean和复杂类型

未赋值
 未赋值
发布于 2017/09/11 22:24
字数 684
阅读 7
收藏 0

处理JavaBean

服务端

  • 创建实体类User
public class User {
 
    private Integer id; // 编号
    private String userName; // 用户名
    private String password; // 密码
     
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
     
     
}
  • 创建实体类Role
public class Role {
 
    private Integer id; // 编号
    private String roleName; // 角色名称
     
     
     
    public Role() {
        super();
        // TODO Auto-generated constructor stub
    }
     
     
     
    public Role(Integer id, String roleName) {
        super();
        this.id = id;
        this.roleName = roleName;
    }
 
 
 
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getRoleName() {
        return roleName;
    }
    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }
     
     
}
  • 在服务接口中添加getRoleByUser(User user) 方法,并在实现类中实现该方法
@WebService
public interface HelloWorld {
 
    public String say(String str);
     
    public List<Role> getRoleByUser(User user);
}
@WebService
public class HelloWorldImpl implements HelloWorld{
 
    public String say(String str) {
        return "Hello "+str;
    }
 
    public List<Role> getRoleByUser(User user) {
        List<Role> roleList=new ArrayList<Role>();
        // 模拟 直接写死
        if(user!=null){
            if(user.getUserName().equals("java1234") && user.getPassword().equals("123456")){
                roleList.add(new Role(1,"技术总监"));
                roleList.add(new Role(2,"架构师"));
            }else if(user.getUserName().equals("jack") && user.getPassword().equals("123456")){
                roleList.add(new Role(3,"程序员"));
            }
            return roleList;
        }else{
            return null;          
        }
         
    }
     
     
 
}

wsdl2java生成客户端代码

客户端

  • 在Client主类中,传递一个User,作为服务端的方法参数
public class Client {
 
    public static void main(String[] args) {
        HelloWorldService service=new HelloWorldService();
        HelloWorld helloWorld=service.getHelloWorldPort();
        //System.out.println(helloWorld.say("java1234"));
        User user=new User();
        user.setUserName("jack");
        user.setPassword("123456");
        List<Role> roleList=helloWorld.getRoleByUser(user);
        for(Role role:roleList){
            System.out.println(role.getId()+","+role.getRoleName());
        }
    }
}

处理Map类型

前面讲的一些都是简单类型,cxf都支持。但是有些复杂类型,cxf是不支持,比如常用的Map类型;

服务端

  • 服务接口方法及其实现类:
/**
     * 获取所有用户以及对应的角色
     * @return
     */
    public Map<String,List<Role>> getRoles();
public Map<String, List<Role>> getRoles() {
        Map<String,List<Role>> map=new HashMap<String,List<Role>>();
        List<Role> roleList1=new ArrayList<Role>();
        roleList1.add(new Role(1,"技术总监"));
        roleList1.add(new Role(2,"架构师"));
        map.put("java1234", roleList1);
        List<Role> roleList2=new ArrayList<Role>();
        roleList2.add(new Role(1,"程序员"));
        map.put("jack", roleList2);
        return map;
    }
  • 如果服务端代码写成这样,启动Server类,会报错。解决方法是使用@XmlJavaTypeAdapter注解,加载接口定义上。
package com.java1234.webservice;
 
import java.util.List;
import java.util.Map;
 
import javax.jws.WebService;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
import com.java1234.adapter.MapAdapter;
import com.java1234.entity.Role;
import com.java1234.entity.User;
 
@WebService
public interface HelloWorld {
 
    public String say(String str);
     
    public List<Role> getRoleByUser(User user);
     
    /**
     * 获取所有用户以及对应的角色
     * @return
     */
    @XmlJavaTypeAdapter(MapAdapter.class)
    public Map<String,List<Role>> getRoles();
}
  • 适配器类 XmlAdapter
package com.java1234.adapter;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import javax.xml.bind.annotation.adapters.XmlAdapter;
 
import com.java1234.entity.Role;
 
/**
 * Map适配器
 * @author Administrator
 *
 */
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<String,List<Role>>();
        for(int i=0;i<v.length;i++){
            MyRole r=v[i];
            map.put(r.getKey(), r.getValue());
        }
        return map;
    }
 
    /**
     * 适配转换  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;
    }
 
     
     
 
}

本文转载自:http://blog.java1234.com/blog/articles/53.html

未赋值
粉丝 2
博文 147
码字总数 40136
作品 0
杭州
程序员
私信 提问
加载中

评论(0)

java进阶之路

Java程序员 高级特性 反射、泛型、注释符、自动装箱和拆箱、枚举类、可变参数、可变返回类型、增强循环、静态导入 核心编程 IO、多线程、实体类、集合类、正则表达式、XML和属性文件 ·图形编...

旋转木马-千里马
2016/01/19
328
0
java技术路线

在技术方面无论我们怎么学习,总感觉需要提升自已,却又不知道从哪里着手,同时也不知道自己处于哪个水平。这时候就需要有清晰的指示图来指引我们,这样我们能清楚的知道我们在哪方面不足,以...

罗文浩
2015/11/26
239
1
Axis2.x WebService开发指南-目录索引

Axis的简单准备 Axis的入门实例 Axis复杂对象类型的WebService Axis的辅助工具发布、调用WebService Axis WebService会话Session的管理 Axis用控制台Dos命令发布WebService Axis跨多个WebSe...

ibm_hoojo
2011/03/15
0
0
Java语法基础学习DaySix

一、JavaBean——可重用组件 1.JavaBean是指符合以下标准的Java类: (1)类是公共的 (2)有一个无参的公共的构造器 (3)有属性,且有对应的get、set方法 2.好处 用户可以使用JavaBean将功能、处...

osc_42ssirsd
2019/03/09
0
0
webService简单开发步骤

----------------------------服务端---------cxf框架------------------------------------------------ 导入jar包 写一个webservice接口 @WebService public interface WebService01 { } ......

李永china
2016/04/27
167
0

没有更多内容

加载失败,请刷新页面

加载更多

daily work report on May 25,2020

React-Native工程师 岗位要求 1、三年以上基于React-Native技术完成电商平台app混合开发实际工作经验,熟悉电商平台相关业务。 2、能熟练掌握React-Native,并能基于该技术独立完成相关工作,...

qwfys
12分钟前
18
0
HTTP/3 未来可期?

点击上方“朱小厮的博客”,选择“设为星标” 后台回复"加群",加入新技术 2015 年 HTTP/2 标准发表后,大多数主流浏览器也于当年年底支持该标准。此后,凭借着多路复用、头部压缩、服务器推...

osc_3b0dcpcm
13分钟前
5
0
【原创】JVM系列01 | 开篇

  20大进阶架构专题每日送达   1. Java 虚拟机是什么? 1.1 虚拟机   虚拟机:虚拟的计算机,一个用来执行虚拟计算机指令的软件。   虚拟机分为系统虚拟机和程序虚拟机。   系统虚...

osc_0k23td2u
14分钟前
4
0
Flink 1.10 细粒度资源管理解析

相信不少读者在开发 Flink 应用时或多或少会遇到在内存调优方面的问题,比如在我们生产环境中遇到最多的 TaskManager 在容器化环境下占用超出容器限制的内存而被 YARN/Mesos kill 掉[1],再比...

osc_n0c6719w
15分钟前
17
0
IDEA使用技巧-->查看继承关系

在开发中项目庞大的时候你会不知道当前类在项目中的使用情况,在哪被继承?在哪被实现?和谁有关联? 快捷键 eclipse中是: ctrl+tidea中是: ctrl+H点击当前类, 然后ctrl+H...

宇宝
16分钟前
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部