转自: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. ABP框架应用汇总

        相信很多人可能听过或没听过ABP这个框架,在我接触此框架时也是在现在所在的公司开始接触的,我们用此开源框架作为我们项目的架构,我们正好做的是Saas云服务多租户管理系统开发,并且经过了一年多高 ...

  2. JavaScript全局函数

    JavaScript 中包含以下 7 个全局函数,用于完成一些常用的功能(以后的章节中可能会用到):escape( ).eval_r( ).isFinite( ).isNaN( ).parseFloa ...

  3. Redis之Ubuntu下Redis集群搭建

    安装redis 首先下载redis $ wget http://download.redis.io/releases/redis-4.0.10.tar.gz $ .tar.gz $ cd redis- ...

  4. 使用纯 CSS 实现 Google Photos 照片列表布局

    文章太长,因为介绍了如何一步一步进化到最后接近完美的效果的,不想读的同学可以直接跳到最后一个大标题之后看代码.demo及原理就好,或者也可以直接看下面这个链接的源代码. 不过还是建议顺序读下去,因为后 ...

  5. JavaScript函数传参

    函数传参一: <html> <head> <meta charset="utf-8"> <title>无标题文档</title ...

  6. Ubuntu安装配置Python.pyDev

    一:安装ECLipse Eclipse官网下载软件tar包: 使用解压命令: sudo tar xzvf xxxxx.tar.gz -c /opt/ 创建快捷方式到桌面. 二:安装python-Num ...

  7. Java中类的定义

    成员变量:对应事物的属性 成员方法:对应事物的行为 类定义的格式 定义类:就是定义类的成员,包括成员变量和成员方法 成员变量:和以前定义变量几乎是一样的.只不过位置发生了改变.在类中,方法外. 成员方 ...

  8. js 背景从无到黑的渐变 字从白到黑的渐变

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. MySQL-字符类型与约束条件

    创建表完整的语法: create table 表名(字段名1 类型[(宽度) 约束条件],字段名2 类型[(宽度) 约束条件],字段名3 类型[(宽度) 约束条件]); 注意事项: 1. 在同一张表中 ...

  10. openblas下载安装与使用

    openblas下载 官方地址 zip文件 tar文件 openblas安装 直接执行 git clone https://github.com/xianyi/OpenBLAS.git cd Open ...