转自: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. How to solve a login problem of SQL Server?

    Sometimes when we attempting to login the SQL Server 20xx Management Studio, when we type in the cor ...

  2. wordcloud + jieba 生成词云

    利用jieba库和wordcloud生成中文词云. jieba库:中文分词第三方库 分词原理: 利用中文词库,确定汉字之间的关联概率,关联概率大的生成词组 三种分词模式: 1.精确模式:把文本精确的切 ...

  3. Android一对多蓝牙连接示例APP

    一对多蓝牙连接示例,基于Google BluetoothChat修改,实现一对多聊天(一个服务端.多个客户端),类似聊天室. 主要功能: 客户端的发出的消息所有终端都能收到(由服务端转发) 客户端之间 ...

  4. WebLogic安装使用及常见问题

    WebLogic的下载与安装 下载地址: http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html fmw_ ...

  5. RabbitMQ学习之spring-amqp的重要类的认识

    对于大多数应用来说都做了与spring整合,对于rabbitmq来说.也有与spring的整合.可能通过spring的官网找到spring-amqp项目下载.spring-amqp项目包括三个子项目: ...

  6. httpclient模拟浏览器

    package com.java.httpclient; import java.io.IOException; import org.apache.http.HttpEntity; import o ...

  7. Validate US Telephone Numbers FreeCodeCamp

    function telephoneCheck(str) { // 祝你好运 //var re = /^1? ?(\(\d{3}\)|\d{3})[ |-]?\d{3}[ |-]?\d{4}$/; / ...

  8. java 常用API 包装 数组的覆盖和遍历

    package com.oracel.demo01; public class Sz { public static void main(String[] args) { // TODO Auto-g ...

  9. 洛谷P2827 蚯蚓 队列 + 观察

    我们不难发现先被切开的两半一定比后被切开的两半大,这样就天然的生成了队列的单调性,就可以省去一个log.所以,我们开三个队列,分别为origin,big,smallorigin, big, small ...

  10. pandaboy Merry Christmas