当前位置: 首页 > news >正文

CXF WebService中传递复杂对象(List、Map、Array)

转自:https://wenku.baidu.com/view/047ce58ed0d233d4b14e69eb.html

现在开始介绍传递复杂类型的对象。如JavaBean、Array、List、Map等。

如有不正确之处,请各位给予指出!

1、 首先看看服务器端的代码所需要的JavaBean对象

 1 1.    package com.wy.object.entry; 
 2 2.    
 3 3.    import java.io.Serializable; 
 4 4.    
 5 5.    /** 
 6 6.    * User Entity 
 7 7.    * @author Administrator 
 8 8.    * 
 9 9.    */ 
10 10.    public class User implements Serializable { 
11 11.    
12 12.    private static final long serialVersionUID = 1L; 
13 13.    
14 14.    private int id; 
15 15.    private String name; 
16 16.    private String email; 
17 17.    private String address; 
18 18.    
19 19.    public int getId() { 
20 20.    return id; 
21 21.    } 
22 22.    
23 23.    public void setId(int id) { 
24 24.    this.id = id; 
25 25.    } 
26 26.    
27 27.    public String getName() { 
28 28.    return name; 
29 29.    } 
30 30.    
31 31.    public void setName(String name) { 
32 32.    this.name = name; 
33 33.    } 
34 34.    
35 35.    public String getEmail() { 
36 36.    return email; 
37 37.    } 
38 38.    
39 39.    public void setEmail(String email) { 
40 40.    this.email = email; 
41 41.    } 
42 42.    
43 43.    public String getAddress() { 
44 44.    return address; 
45 45.    } 
46 46.    
47 47.    public void setAddress(String address) { 
48 48.    this.address = address; 
49 49.    } 
50 50.    
51 51.    @Override 
52 52.    public String toString() { 
53 53.    
54 54.    return this.id + " - " + this.name + " - " + this.address + " - " 
55 55.    + this.email; 
56 56.    
57 57.    } 
58 58.    } 

下面的是集合传递Users,CXF直接传递集合对象会出现异常,用一个对象包装下就Ok了,不知道是什么原因。

 1 1.    package com.wy.object; 
 2 2.    
 3 3.    import java.util.HashMap; 
 4 4.    import java.util.List; 
 5 5.    
 6 6.    import com.wy.object.entry.User; 
 7 7.    
 8 8.    /** 
 9 9.    * CXF直接传递集合对象会出现异常,用一个对象包装下就Ok了,不知道是什么原因? 
10 10.    * 
11 11.    * @author Administrator 
12 12.    * 
13 13.    */ 
14 14.    public class Users { 
15 15.    private List<User> users; 
16 16.    private User[] userArr; 
17 17.    private HashMap<String, User> maps; 
18 18.    public List<User> getUsers() { 
19 19.    return users; 
20 20.    } 
21 21.    
22 22.    public void setUsers(List<User> users) { 
23 23.    this.users = users; 
24 24.    } 
25 25.    
26 26.    public User[] getUserArr() { 
27 27.    return userArr; 
28 28.    } 
29 29.    
30 30.    public void setUserArr(User[] userArr) { 
31 31.    this.userArr = userArr; 
32 32.    } 
33 33.    
34 34.    public HashMap<String, User> getMaps() { 
35 35.    return maps; 
36 36.    } 
37 37.    
38 38.    public void setMaps(HashMap<String, User> maps) { 
39 39.    this.maps = maps; 
40 40.    } 
41 41.    
42 42.    } 

2、 下面看看复杂对象传递的服务器端代码

 1 1.    package com.wy.object.server; 
 2 2.    
 3 3.    import javax.jws.WebParam; 
 4 4.    import javax.jws.WebService; 
 5 5.    
 6 6.    import com.wy.object.Users; 
 7 7.    import com.wy.object.entry.User; 
 8 8.    /** 
 9 9.    * 定制客户端请求WebService所需要的接口 
10 10.    * @author Administrator 
11 11.    * 
12 12.    */ 
13 13.    
14 14.    @WebService 
15 15.    public interface IUserService { 
16 16.    public User getUserByName(@WebParam(name = "name") String name); 
17 17.    public void setUser(User user); 
18 18.    public Users getUsers(int i); 
19 19.    public void setUsers(Users users); 
20 20.    public Users getUserArray(int i); 
21 21.    public void setUserArray(Users users); 
22 22.    public void setUserMap(Users maps); 
23 23.    public Users getUserMap(); 
24 24.    } 

 

接口实现类:

  1 1.    package com.wy.object.server.impl; 
  2 2.    
  3 3.    import java.util.ArrayList; 
  4 4.    import java.util.Date; 
  5 5.    import java.util.HashMap; 
  6 6.    import java.util.List; 
  7 7.    
  8 8.    import javax.jws.WebParam; 
  9 9.    import javax.jws.WebService; 
 10 10.    import javax.jws.soap.SOAPBinding; 
 11 11.    import javax.jws.soap.SOAPBinding.Style; 
 12 12.    
 13 13.    import com.wy.object.Users; 
 14 14.    import com.wy.object.entry.User; 
 15 15.    import com.wy.object.server.IUserService; 
 16 16.    
 17 17.    /** 
 18 18.    * WebService传递复杂对象,如JavaBean、Array、List、Map等 
 19 19.    * 
 20 20.    * @author Administrator 
 21 21.    * 
 22 22.    */ 
 23 23.    
 24 24.    @WebService(endpointInterface = "com.wy.object.server.IUserService", serviceName = "IUserService") 
 25 25.    @SOAPBinding(style = Style.RPC) 
 26 26.    @SuppressWarnings("deprecation") 
 27 27.    public class UserService implements IUserService { 
 28 28.    
 29 29.    // string 
 30 30.    public User getUserByName(@WebParam(name = "name") 
 31 31.    String name) { 
 32 32.    User user = new User(); 
 33 33.    user.setId(new Date().getSeconds()); 
 34 34.    user.setName(name); 
 35 35.    user.setAddress("China BeiJing"); 
 36 36.    user.setEmail(name + "@163.com"); 
 37 37.    return user; 
 38 38.    } 
 39 39.    
 40 40.    // object JavaBean 
 41 41.    public void setUser(User user) { 
 42 42.    System.out.println("@@@@@@@@@@@@ Server setUser @@@@@@@@@@@"); 
 43 43.    System.out.println("setUser:" + user); 
 44 44.    } 
 45 45.    
 46 46.    // 传递集合的包装对象 List 
 47 47.    public Users getUsers(int i) { 
 48 48.    List<User> users = new ArrayList<User>(); 
 49 49.    for (int j = 0; j <= i; j++) { 
 50 50.    User user = new User(); 
 51 51.    user.setId(new Date().getSeconds()); 
 52 52.    user.setName("Sun#" + j); 
 53 53.    user.setAddress("China"); 
 54 54.    user.setEmail("Sun" + j + "@163.com"); 
 55 55.    
 56 56.    users.add(user); 
 57 57.    
 58 58.    } 
 59 59.    Users u = new Users(); 
 60 60.    u.setUsers(users); 
 61 61.    return u; 
 62 62.    } 
 63 63.    
 64 64.    public void setUsers(Users users) { 
 65 65.    System.out.println("############ Server setUsers ###########"); 
 66 66.    for (User u : users.getUsers()) { 
 67 67.    System.out.println("setUsers:" + u); 
 68 68.    } 
 69 69.    } 
 70 70.    
 71 71.    // 传递集合的包装对象 Array 
 72 72.    public Users getUserArray(int i) { 
 73 73.    User[] users = new User[i]; 
 74 74.    for (int j = 0; j < i; j++) { 
 75 75.    User user = new User(); 
 76 76.    user.setId(new Date().getSeconds()); 
 77 77.    user.setName("Jack#" + j); 
 78 78.    user.setAddress("China"); 
 79 79.    user.setEmail("Jack" + j + "@163.com"); 
 80 80.    
 81 81.    users[j] = user; 
 82 82.    } 
 83 83.    Users u = new Users(); 
 84 84.    u.setUserArr(users); 
 85 85.    return u; 
 86 86.    } 
 87 87.    
 88 88.    public void setUserArray(Users users) { 
 89 89.    System.out.println("$$$$$$$$$$$$ Server setUserArray $$$$$$$$"); 
 90 90.    for (User u : users.getUserArr()) { 
 91 91.    System.out.println("setUserArray:" + u); 
 92 92.    } 
 93 93.    } 
 94 94.    
 95 95.    // 传递集合的包装对象 Map 
 96 96.    public void setUserMap(Users maps) { 
 97 97.    System.out.println("------------ Server setUserMap ----------"); 
 98 98.    System.out.println("setUserMap:" + maps.getMaps()); 
 99 99.    } 
100 100.    
101 101.    public Users getUserMap() { 
102 102.    HashMap<String, User> users = new HashMap<String, User>(); 
103 103.    User user = new User(); 
104 104.    user.setId(new Date().getSeconds()); 
105 105.    user.setName("Jack#"); 
106 106.    user.setAddress("China#"); 
107 107.    user.setEmail("Jack@163.com"); 
108 108.    
109 109.    users.put("A", user); 
110 110.    user = new User(); 
111 111.    user.setId(new Date().getSeconds()); 
112 112.    user.setName("Tom"); 
113 113.    user.setAddress("China$$"); 
114 114.    user.setEmail("Tom@163.com"); 
115 115.    
116 116.    users.put("B", user); 
117 117.    Users u = new Users(); 
118 118.    u.setMaps(users); 
119 119.    
120 120.    return u; 
121 121.    } 
122 122.    } 

3、 发布WebService的代码

 1 1.    package com.wy.object; 
 2 2.    
 3 3.    import javax.xml.ws.Endpoint; 
 4 4.    
 5 5.    import com.wy.object.server.impl.UserService; 
 6 6.    /** 
 7 7.    * 发布UserService服务 
 8 8.    * @author Administrator 
 9 9.    * 
10 10.    */ 
11 11.    public class DeployUserService { 
12 12.    public static void main(String[] args) throws InterruptedException { 
13 13.    String address = "http://localhost:8080/WebServiceCXF/services/IUserService"; 
14 14.    UserService service = new UserService(); 
15 15.    Endpoint.publish(address, service); 
16 16.    System.out.println("Server ready..."); 
17 17.    Thread.sleep(1000 * 60 * 20); 
18 18.    System.out.println("Server exit..."); 
19 19.    System.exit(0); 
20 20.    } 
21 21.    } 

4、 客户端调用代码

 1 1.    package com.wy.object.client; 
 2 2.    
 3 3.    import java.util.ArrayList; 
 4 4.    import java.util.List; 
 5 5.    import java.util.Random; 
 6 6.    
 7 7.    import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; 
 8 8.    
 9 9.    import com.wy.object.Users; 
10 10.    import com.wy.object.entry.User; 
11 11.    import com.wy.object.server.IUserService; 
12 12.    
13 13.    /** 
14 14.    * 调用UserService客户端 
15 15.    * 
16 16.    * @author Administrator 
17 17.    * 
18 18.    */ 
19 19.    public class UserServiceClient { 
20 20.    public static void main(String[] args) { 
21 21.    
22 22.    // 调用WebService 
23 23.    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
24 24.    factory.setServiceClass(IUserService.class); 
25 25.    factory.setAddress("http://localhost:8080/WebServiceCXF/services/IUserService"); 
26 26.    IUserService service = (IUserService) factory.create(); 
27 27.    
28 28.    //string 
29 29.    System.out.println("@@@@@@@@@@@@@Client getUserByName@@@@@@@@@@@@@@"); 
30 30.    User user = service.getUserByName("Jack"); 
31 31.    System.out.println("Client: "+ user); 
32 32.    user.setAddress("China-BeiJing"); 
33 33.    
34 34.    //object JavaBean 
35 35.    service.setUser(user); 
36 36.    
37 37.    //传递集合的包装对象 List 
38 38.    System.out.println("#############Client getUsers###################"); 
39 39.    Users users = service.getUsers(4); 
40 40.    System.out.println("Client: "+ users); 
41 41.    List<User> tempUsers = new ArrayList<User>(); 
42 42.    for (User u : users.getUsers()) { 
43 43.    System.out.println("Client: "+ u); 
44 44.    u.setName("Jack" + new Random().nextInt(100)); 
45 45.    u.setAddress("Chian-BeiJing#" + new Random().nextInt(100)); 
46 46.    tempUsers.add(u); 
47 47.    } 
48 48.    users.getUsers().clear(); 
49 49.    users.getUsers().addAll(tempUsers); 
50 50.    
51 51.    service.setUsers(users); 
52 52.    
53 53.    //传递集合的包装对象 Array 
54 54.    System.out.println("$$$$$$$$$$$$Client getUserArray$$$$$$$$$$$$$$$"); 
55 55.    users = service.getUserArray(4); 
56 56.    User[] userArr = new User[4]; 
57 57.    int i = 0; 
58 58.    for (User u : users.getUserArr()) { 
59 59.    System.out.println("Client: "+ u); 
60 60.    u.setName("Jack" + new Random().nextInt(100)); 
61 61.    u.setAddress("Chian-ShenZhen#" + new Random().nextInt(100)); 
62 62.    userArr[i] = u; 
63 63.    i++; 
64 64.    } 
65 65.    users.setUserArr(userArr); 
66 66.    
67 67.    service.setUserArray(users); 
68 68.    
69 69.    //传递集合的包装对象 Map 
70 70.    System.out.println("------------Client getUserMap----------------"); 
71 71.    users = service.getUserMap(); 
72 72.    System.out.println("Client: "+ users.getMaps()); 
73 73.    users.getMaps().put("ABA", userArr[0]); 
74 74.    service.setUserMap(users); 
75 75.    
76 76.    } 
77 77.    } 

 

相关文章:

  • 常规活动页面制作
  • Oracle、PostgreSQL的对象命名规则
  • Spring Cloud教程 (一)云原生应用程序
  • Eclipse环境下如何配置tomcat,并且把项目部署到Tomcat服务器上
  • 使用WinDbg获取SSDT函数表对应的索引再计算得出地址
  • 二次排序
  • 简述 Spring Cloud 是什么
  • OSS Web直传 (文件图片)
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 浅谈RxJava
  • android studio 3.0 Ndk 开发- 利用增量更新进行 apk的覆盖安装
  • Teamviewer原理和阻止方法
  • 【BIEE】11_根据显示指标展示不同报表
  • 流程(上)
  • 好领导:提升领导威信力的110个管理奥秘
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • docker python 配置
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • MySQL主从复制读写分离及奇怪的问题
  • python大佬养成计划----difflib模块
  • Quartz初级教程
  • tab.js分享及浏览器兼容性问题汇总
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 蓝海存储开关机注意事项总结
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 微信小程序--------语音识别(前端自己也能玩)
  • 我感觉这是史上最牛的防sql注入方法类
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • (20050108)又读《平凡的世界》
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计高校学生选课系统
  • (三)模仿学习-Action数据的模仿
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (已解决)什么是vue导航守卫
  • .NET 发展历程
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .net经典笔试题
  • .NET企业级应用架构设计系列之应用服务器
  • .NET项目中存在多个web.config文件时的加载顺序
  • /3GB和/USERVA开关
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • [C#]winform部署yolov9的onnx模型
  • [CCIE历程]CCIE # 20604
  • [CSS]CSS 的背景
  • [Firefly-Linux] RK3568 pca9555芯片驱动详解
  • [HeMIM]Cl,[AeMIM]Br,[CeEIM]Cl,([HO-PECH-MIM]Cl,[HOOC-PECH-MIM]Cl改性酚醛树脂
  • [HNOI2018]排列
  • [HTTP]HTTP协议的状态码
  • [Java]快速入门优先队列(堆)手撕相关面试题
  • [OLEDB] 目前还找找不到处理下面错误的办法
  • [one_demo_17]使用传统方式实现线程间通信的例子
  • [OPEN SQL] 新增数据