前面讲到了JavaBean对象的传递,这一节我们就CXF框架复杂对象(List,Map)的传递进行讲解。
第一步:创建存储复杂对象的类(因为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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。