微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WebService CXF学习进阶篇2:复杂对象传递(List,Map)

前面讲到了JavaBean对象的传递,这一节我们就CXF框架复杂对象(List,Map)的传递进行讲解。 
第一步:创建存储复杂对象的类(因为WebServices的复杂对象的传递,一定要借助第三方对象(即自定义对象)来实现)

[java]  view plain copy
  1. package com.ws.model;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5.   
  6. public class Users {  
  7.     private ArrayList<UserInfo> userList;  // 不要用List类型  
  8.     private HashMap<Integer, UserInfo> userMap; // 不要用Map类型  
  9. private UserInfo[] userArray;  
  10.     // geter/seter 方法  
  11. }  

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

copy
    package com.ws.services;  
  1. import javax.jws.WebService;  
  2. import com.ws.model.UserInfo;  
  3. import com.ws.model.Users;  
  4. @WebService  
  5. interface IUserServices {  
  6. public Users getAllUsers();  
  7.       
  8. public Users getUsersMap();  
  9. public Users getUsersArray();  
  10. }  
copy
    package com.ws.services.impl;  
  1. import com.ws.services.IUserServices;  
  2. @WebService  
  3. class UserServicesImpl implements IUserServices {  
  4. public Users getAllUsers() {  
  5.         ArrayList<UserInfo> list = new ArrayList<UserInfo>();  
  6.         list.add(new UserInfo("vicky",23));  
  7.         list.add(new UserInfo("ivy",0); background-color:inherit">26));  
  8. new UserInfo("simon",0); background-color:inherit">26));  
  9. new UserInfo("carol",0); background-color:inherit">29));  
  10.         Users users = new Users();  
  11.         users.setUserList(list);  
  12.         return users;  
  13.     }  
  14. public Users getUsersMap() {  
  15.         HashMap<Integer, UserInfo> map = new HashMap<Integer, UserInfo>();  
  16.         map.put(23@H_404_331@23));  
  17.         map.put(22,153); background-color:inherit; font-weight:bold">new UserInfo("caty",0); background-color:inherit">22));  
  18. 24,153); background-color:inherit; font-weight:bold">new UserInfo("leah",0); background-color:inherit">24));  
  19. 25,153); background-color:inherit; font-weight:bold">new UserInfo("kelly",0); background-color:inherit">25));  
  20. 27,0); background-color:inherit">27));  
  21. 26,0); background-color:inherit">29,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important">           
  22.         Users users = new Users();  
  23.         users.setUserMap(map);  
  24.         return users;  
  25.     }  
  26. public Users getUsersArray() {  
  27.         UserInfo[] userInfo = new UserInfo[5];  
  28. for(int i=0;i<5;i++){  
  29.             UserInfo info = new UserInfo();  
  30.             info.setUserAge(23+i);  
  31.             info.setUserName("Array"+(i+1));  
  32.             userInfo[i] = info;  
  33.         }  
  34.         users.setUserArray(userInfo);  
  35. }  

第三步:创建WebServices的服务端

copy
    package com.test;  
  1. import javax.xml.ws.Endpoint;  
  2. import org.apache.cxf.jaxws.JaxWsServerfactorybean;  
  3. import com.ws.services.impl.UserServicesImpl;  
  4. class ServerTest {  
  5. public Servertest(){  
  6.         // 发布User服务接口  
  7.         Endpoint.publish("http://localhost:8090/userInfoServices",153); background-color:inherit; font-weight:bold">new UserServicesImpl());  
  8. static void main(String[] args) {  
  9. // 启动服务  
  10. new Servertest();  
  11.         System.out.println("Server ready...");     
  12. try {  
  13.             Thread.sleep(1000*300);//休眠五分分钟,便于测试   
  14.         } catch (InterruptedException e) {  
  15.             e.printstacktrace();  
  16.         }     
  17.         System.out.println("Server exit...");     
  18.         System.exit(0);  
  19. 第四步:创建WebServices的客户端,并测试
        1、将服务端创建的复杂对象的类和接口copy到客户工程中,且路径要与服务端一致;
        2、新建测试类进行测试

    copy
    package com.ws.client;  
  1. import java.util.List;  
  2. import org.apache.cxf.jaxws.JaxWsProxyfactorybean;  
  3. import com.ws.model.UserInfo;  
  4. import com.ws.model.Users;  
  5. import com.ws.server.IUserServices;  
  6. class UserTest {  
  7. //创建WebService客户端代理工厂     
  8.         JaxWsProxyfactorybean factory = new JaxWsProxyfactorybean();     
  9. //注册WebService接口     
  10.         factory.setServiceClass(IUserServices.class);     
  11. //设置WebService地址     
  12.         factory.setAddress("http://localhost:8090/userInfoServices");          
  13.         IUserServices userServices = (IUserServices)factory.create();     
  14.         System.out.println("invoke userinfo webservice...");  
  15. // 测试Map  
  16. //      testMap(userServices);  
  17. // 测试List  
  18. //      testList(userServices);  
  19. // 测试Array  
  20. //      testArray(userServices);  
  21.         System.exit(0);     
  22.     }   
  23. void testArray(IUserServices userServices){  
  24.         Users users = userServices.getUsersArray();  
  25. if(users!=null){  
  26.             UserInfo[] array = users.getUserArray();  
  27.             for(UserInfo info:array){  
  28.                 System.out.println("UserName: "+info.getUserName());  
  29.                 System.out.println("UserAge : "+info.getUserAge());  
  30.             }  
  31.       
  32. void testList(IUserServices userServices){  
  33.         Users users = userServices.getAllUsers();  
  34. null){  
  35.             List<UserInfo> list = users.getUserList();  
  36.             for(UserInfo info:list){  
  37.                 System.out.println("UserName: "+info.getUserName());  
  38.                 System.out.println("UserAge : "+info.getUserAge());  
  39.             }  
  40.         }  
  41. void testMap(IUserServices userServices){  
  42.         Users users = userServices.getUsersMap();  
  43.             UserInfo info = users.getUserMap().get(23);  
  44.             System.out.println("UserName: "+info.getUserName());  
  45.             System.out.println("UserAge : "+info.getUserAge());  
  46. 第五步:运行服务端,验证webservices服务是否发布成功
    第六步:运行客户端,验证是否成功调用webservices服务

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐