转自:https://blog.csdn.net/z69183787/article/details/35988335

第一步:创建存储复杂对象的类(因为WebServices的复杂对象的传递,一定要借助第三方对象(即自定义对象)来实现)

 package com.ws.model;  

 import java.util.ArrayList;
import java.util.HashMap; public class Users {
private ArrayList<UserInfo> userList; // 不要用List类型
private HashMap<Integer, UserInfo> userMap; // 不要用Map类型
private UserInfo[] userArray;
// geter/seter 方法
}

第二步:创建WebServices的服务端接口和实现类

 
 package com.ws.services;  

 import javax.jws.WebService;
import com.ws.model.UserInfo;
import com.ws.model.Users; @WebService
public interface IUserServices { public Users getAllUsers(); public Users getUsersMap(); public Users getUsersArray(); }
 package com.ws.services.impl;  

 import java.util.ArrayList;
import java.util.HashMap;
import javax.jws.WebService;
import com.ws.model.UserInfo;
import com.ws.model.Users;
import com.ws.services.IUserServices; @WebService
public class UserServicesImpl implements IUserServices { public Users getAllUsers() {
ArrayList<UserInfo> list = new ArrayList<UserInfo>();
list.add(new UserInfo("vicky",23));
list.add(new UserInfo("ivy",26));
list.add(new UserInfo("simon",26));
list.add(new UserInfo("carol",29));
Users users = new Users();
users.setUserList(list);
return users;
} public Users getUsersMap() {
HashMap<Integer, UserInfo> map = new HashMap<Integer, UserInfo>();
map.put(23, new UserInfo("vicky",23));
map.put(22, new UserInfo("caty",22));
map.put(24, new UserInfo("leah",24));
map.put(25, new UserInfo("kelly",25));
map.put(27, new UserInfo("ivy",27));
map.put(26, new UserInfo("simon",26));
map.put(29, new UserInfo("carol",29)); Users users = new Users();
users.setUserMap(map);
return users;
} public Users getUsersArray() {
UserInfo[] userInfo = new UserInfo[5];
for(int i=0;i<5;i++){
UserInfo info = new UserInfo();
info.setUserAge(23+i);
info.setUserName("Array"+(i+1));
userInfo[i] = info;
}
Users users = new Users();
users.setUserArray(userInfo);
return users;
} }

第三步:创建WebServices的服务端

 package com.test;  

 import javax.xml.ws.Endpoint;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import com.ws.services.impl.UserServicesImpl; public class ServerTest {
public ServerTest(){
// 发布User服务接口
Endpoint.publish("http://localhost:8090/userInfoServices", new UserServicesImpl());
}
public static void main(String[] args) {
// 启动服务
new ServerTest();
System.out.println("Server ready...");
try {
Thread.sleep(1000*300);//休眠五分分钟,便于测试
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Server exit...");
System.exit(0);
}
}

第四步:创建WebServices的客户端,并测试
    1、将服务端创建的复杂对象的类和接口copy到客户工程中,且路径要与服务端一致;
    2、新建测试类进行测试

 package com.ws.client;  

 import java.util.List;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.ws.model.UserInfo;
import com.ws.model.Users;
import com.ws.server.IUserServices; public class UserTest {
public static void main(String[] args) {
//创建WebService客户端代理工厂
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
//注册WebService接口
factory.setServiceClass(IUserServices.class);
//设置WebService地址
factory.setAddress("http://localhost:8090/userInfoServices");
IUserServices userServices = (IUserServices)factory.create();
System.out.println("invoke userinfo webservice...");
// 测试Map
// testMap(userServices);
// 测试List
// testList(userServices);
// 测试Array
// testArray(userServices);
System.exit(0);
} public static void testArray(IUserServices userServices){
Users users = userServices.getUsersArray();
if(users!=null){
UserInfo[] array = users.getUserArray();
for(UserInfo info:array){
System.out.println("UserName: "+info.getUserName());
System.out.println("UserAge : "+info.getUserAge());
}
}
} public static void testList(IUserServices userServices){
Users users = userServices.getAllUsers();
if(users!=null){
List<UserInfo> list = users.getUserList();
for(UserInfo info:list){
System.out.println("UserName: "+info.getUserName());
System.out.println("UserAge : "+info.getUserAge());
}
}
} public static void testMap(IUserServices userServices){
Users users = userServices.getUsersMap();
if(users!=null){
UserInfo info = users.getUserMap().get(23);
System.out.println("UserName: "+info.getUserName());
System.out.println("UserAge : "+info.getUserAge());
}
}
}

第五步:运行服务端,验证webservices服务是否发布成功
第六步:运行客户端,验证是否成功调用webservices服务

注:在做webServices复杂对象传递时,返回值的类型不要用接口类型。例如(List 应该换成ArrayList ,Map应该换成HashMap)

WebService CXF学习:复杂对象传递(List,Map)的更多相关文章

  1. webService cxf学习

    1.首先去官网下载cxf包 http://archive.apache.org/dist/cxf/ 记住要选.zip结尾 大概40兆的样子 2.把上边的包都放项目里.如果你用的jeecg框架,那它自带 ...

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

    转自:https://wenku.baidu.com/view/047ce58ed0d233d4b14e69eb.html 现在开始介绍传递复杂类型的对象.如JavaBean.Array.List.M ...

  3. VUE2.0 饿了吗视频学习笔记(五):父子对象传递、显示图片

    一.父子组件之间对象传递 1.app.Vue中的v-header 中加入 v-bind:seller="seller" template> <div id=" ...

  4. 自定义Encoder/Decoder进行对象传递

    转载:http://blog.csdn.net/top_code/article/details/50901623 在上一篇文章中,我们使用Netty4本身自带的ObjectDecoder,Objec ...

  5. objc_msgSend消息传递学习笔记 – 对象方法消息传递流程

    在Effective Objective-C 2.0 – 52 Specific Ways to Improve Your iOS and OS X Programs一书中,tip 11主要讲述了Ob ...

  6. jsp页面间对象传递方法

    严格的来说不能叫做JSP页面间的对象传递,实际应该是页面间对象共享的方法: 1. 通过servletcontext,也就是application对象了,但这种情况要求在同一个web应用下,      ...

  7. Netty自定义Encoder/Decoder进行对象传递

    转载:http://blog.csdn.net/top_code/article/details/50901623 在上一篇文章中,我们使用Netty4本身自带的ObjectDecoder,Objec ...

  8. ES6学习总结之Set和Map数据结构的理解

    前言 当我们需要存储一些数据的时候,首先想到的是定义一个变量用来存储,之后我们可能学了数组,发现数组比变量可以存储更多的数据,接着可能有其它的存储数据的方法等等,然而我今天需要介绍的是在ES6中比较常 ...

  9. Java学习:集合双列Map

    数据结构 数据结构: 数据结构_栈:先进后出 入口和出口在同一侧 数据结构_队列:先进先出 入口和出口在集合的两侧 数据结构_数组: 查询快:数组的地址是连续的,我们通过数组的首地址可以找到数组,通过 ...

随机推荐

  1. 文档控件NTKO OFFICE 详细使用说明之预览word编辑保存回服务器

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

  2. javascript 将单词首字母大写,其余小写

    // 1 别人写的,我拿来参考了一下 function titleCase(str) { var array = str.toLowerCase().split(" "); for ...

  3. vue2 阻止时间冒泡

    click.stop.prevent <div class="content-right" @click.stop.prevent="pay" > ...

  4. javaee 文件的复制

    package Shurushucu; import java.io.FileInputStream; import java.io.FileNotFoundException; import jav ...

  5. c++ 优先级队列(priority_queue)

    从网上搜优先级队列用法,都是有些乱七八糟的,有几种用法都没说,直接贴代码.实在郁闷,于是自己在此归纳归纳. 废话不多说,直入主题. 优先级队列的核心是比较函数的实现. 比较函数有两种实现方法: 1.在 ...

  6. Shoot the Bullet ZOJ - 3229有上下界网络流

    Code: #include<cstdio> #include<algorithm> #include<vector> #include<queue> ...

  7. 前端html之------>Table实现表头固定

    文章来源于:https://www.cnblogs.com/dacuotecuo/p/3657779.html,请尊重原创,转载请注明出处. 说明:这里主要实现了表头的固定和上下滚动的滑动实现:时间的 ...

  8. [置顶] HTTP 幂等性概念和应用

    转自:http://coolshell.cn/articles/4787.html HTTP 幂等性概念和应用 [ 感谢 Todd 同学 投递本文 ] 基于 HTTP 协议的 Web API 是时下最 ...

  9. HDU 5126 stars (四维偏序+树状数组)

    题目大意:略 题目传送门 四维偏序板子题 把插入操作和询问操作抽象成$(x,y,z,t)$这样的四元组 询问操作拆分成八个询问容斥 此外$x,y,z$可能很大,需要离散 直接处理四维偏序很困难,考虑降 ...

  10. Problem 4

    Problem 4 # Problem_4 """ A palindromic number reads the same both ways. The largest ...