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

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

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

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

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

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

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

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

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

接口实现类:

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

3、 发布WebService的代码

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

4、 客户端调用代码

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

CXF WebService中传递复杂对象(List、Map、Array)的更多相关文章

  1. C# 调用Webservice并传递序列化对象

    原文:C# 调用Webservice并传递序列化对象 C#动态调用WebService注意要点 1.动态调用的url后面注意一定要加上?WSDL   例如:string _url = "ht ...

  2. 在webservice中传递Hashtable

    webservice中不支持hashtable的数据类型,那么如何在webservice中传递hashtable呢?我们可以通过将hashtable转化为webservice中支持的数组的类型来进行传 ...

  3. 关于mvc中传递匿名对象,view中无法解析

    最近做项目用到MVC,发现用linq查询得到的数据是匿名类型对象,通过模型绑定.或者ViewBag.ViewData进行数据传递后,View解析报错:“object 未包含xx的定义”: 没找到好的解 ...

  4. vue方法中传递dom对象示例

    <div id="app"> <input type="text" v-on:keyup="onlyNum($event)" ...

  5. c++中的dictionary对象:map的使用备忘

    #include <map> #include <iostream> using namespace std; void main(){ map <string, int ...

  6. MVC 控制器中传递dynamic(对象) 给视图

    有时候不想重新定义一个实体,则使用 dynamic 来定义匿名类型. //匿名类型 传递到前台 Model dynamic viewModel = new { UserID = 5016 }; ret ...

  7. WebService中获取request对象一例

    @WebService @Service public class WeiXinWebServiceImpl implements IWeiXinWebService { @Resource priv ...

  8. 《转》CXF WebService 开发文档-目录索引

    CXF WebService 开发文档-目录索引 上次介绍了Axis的WebService,现在我们来看看CXF是怎么完成WebService的. Axis1 WebService 在线博文: htt ...

  9. MFC关于多线程中传递窗口类指针时ASSERT_VALID出错的另类解决 转

    MFC关于多线程中传递窗口类指针时ASSERT_VALID出错的另类解决   在多线程设计中,许多人为了省事,会将对话框类或其它类的指针传给工作线程,而在工作线程中调用该类的成员函数或成员变量等等. ...

随机推荐

  1. 文档控件NTKO OFFICE 详细使用说明之预览Excel文件(查看、编辑、保存回服务器)

    1.在线预览Excel文件 (1) 运行环境 ① 浏览器:支持IE7-IE11(平台版本还支持Chrome和Firefox) ② IE工具栏-Internet 选项:将www.ntko.com加入到浏 ...

  2. WPF开发“Program '*' does not contain a static 'Main' method suitable for an entry point”错误

    WPF项目编译时出现“Program '*' does not contain a static 'Main' method suitable for an entry point”错误,   解决方 ...

  3. 深入理解DIP、IoC、DI以及IoC容器(转载)

    <转载的这个up的其他的文章也很nice> 这几个词第一眼看,懵逼,第二眼看,更特么懵逼..... 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序. 其中,OOD有一 ...

  4. 【SQL】SELECT 语句

    1.1 SELECT基本语法: Select * |{[distinct]colum|expression [alias],…} from table; 1.2 查询当前用户所有在用的表及视图: HR ...

  5. c++ socket C/S通信实例

    具体的实例连接: 客户端项目连接:http://pan.baidu.com/s/1c2MndTI 服务端项目连接:http://pan.baidu.com/s/1i4DFkFV 用vs2013打开,服 ...

  6. bzoj4282 慎二的随机数列 树状数组求LIS + 构造

    首先,我们不难发现N个位置都选一定不会比少选任意几个差,所以我们就先设定我们将这N个修改机会都用上, 那么如果点 i">ii 前有sumv">sumvsumv个可修改点 ...

  7. elasticsearch批量操作

    1.批量查询的好处 就是一条一条的查询,比如说要查询100条数据,那么就要发送100次网络请求,这个开销还是很大的 如果进行批量查询的话,查询100条数据,就只要发送1次网络请求,网络请求的性能开销缩 ...

  8. nginx获取经过层层代理后的客户端真实IP(使用正则匹配)

    今天帮兄弟项目搞了一个获取客户端真实IP的问题,网上这种问题很多,但是对于我们的场景都不太合用,现把我的解决方案share给大家,如有问题,请及时指出. 场景: 在请求到达后端服务之前,会经过层层代理 ...

  9. 区分JAVA创建线程的几种方法

    1. start()和run()       通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行.然后 通过此Thread类调用方法run()来完成其运行操 ...

  10. HDU1114 - Piggy-Bank

    Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. ...