前面讲到了JavaBean对象的传递,这一节我们就CXF框架复杂对象(List,Map)的传递进行讲解。? 第一步:创建存储复杂对象的类(因为WebServices的复杂对象的传递,一定要借助第三方对象(即自定义对象)来实现)
- package?com.ws.model;??
- ??
- import?java.util.ArrayList;??
- import?java.util.HashMap;??
- ??
- public?class?Users?{??
- ????private?ArrayList<UserInfo>?userList;????
- ????private?HashMap<Integer,?UserInfo>?userMap;???
- private?UserInfo[]?userArray;??
- ??????
- }??
第二步:创建WebServices的服务端接口和实现类
package?com.ws.services;??
- import?javax.jws.WebService;??
- import?com.ws.model.UserInfo;??
- import?com.ws.model.Users;??
- @WebService??
- interface?IUserServices?{??
- public?Users?getAllUsers();??
- ??????
- public?Users?getUsersMap();??
- public?Users?getUsersArray();??
- }??
package?com.ws.services.impl;??
- import?com.ws.services.IUserServices;??
- @WebService??
- class?UserServicesImpl?implements?IUserServices?{??
- public?Users?getAllUsers()?{??
- ????????ArrayList<UserInfo>?list?=?new?ArrayList<UserInfo>();??
- ????????list.add(new?UserInfo("vicky",23));??
- ????????list.add(new?UserInfo("ivy",0); background-color:inherit">26));??
- new?UserInfo("simon",0); background-color:inherit">26));??
- new?UserInfo("carol",0); background-color:inherit">29));??
- ????????Users?users?=?new?Users();??
- ????????users.setUserList(list);??
- ????????return?users;??
- ????}??
- public?Users?getUsersMap()?{??
- ????????HashMap<Integer,?UserInfo>?map?=?new?HashMap<Integer,?UserInfo>();??
- ????????map.put(23,?23));??
- ????????map.put(22,153); background-color:inherit; font-weight:bold">new?UserInfo("caty",0); background-color:inherit">22));??
- 24,153); background-color:inherit; font-weight:bold">new?UserInfo("leah",0); background-color:inherit">24));??
- 25,153); background-color:inherit; font-weight:bold">new?UserInfo("kelly",0); background-color:inherit">25));??
- 27,0); background-color:inherit">27));??
- 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"> ??????????
- ????????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.setUserArray(userInfo);??
- }??
第三步:创建WebServices的服务端
package?com.test;??
- import?javax.xml.ws.Endpoint;??
- import?org.apache.cxf.jaxws.JaxWsServerFactoryBean;??
- import?com.ws.services.impl.UserServicesImpl;??
- class?ServerTest?{??
- public?ServerTest(){??
- ??????????
- ????????Endpoint.publish("http://localhost:8090/userInfoServices",153); background-color:inherit; font-weight:bold">new?UserServicesImpl());??
- 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;??
- class?UserTest?{??
- //创建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??
- ??
- //?测试List??
- //??????testList(userServices);??
- //?测试Array??
- //??????testArray(userServices);??
- ????????System.exit(0);?????
- ????}???
- 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());??
- ????????????}??
- ??????
- void?testList(IUserServices?userServices){??
- ????????Users?users?=?userServices.getAllUsers();??
- null){??
- ????????????List<UserInfo>?list?=?users.getUserList();??
- ????????????for(UserInfo?info:list){??
- ????????????????System.out.println("UserName:?"+info.getUserName());??
- ????????????????System.out.println("UserAge?:?"+info.getUserAge());??
- ????????????}??
- ????????}??
- void?testMap(IUserServices?userServices){??
- ????????Users?users?=?userServices.getUsersMap();??
- ????????????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)
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|