zoukankan      html  css  js  c++  java
  • CXF WebService中传递复杂对象(List、Map、Array)

    转自:https://wenku.baidu.com/view/047ce58ed0d233d4b14e69eb.html

    现在开始介绍传递复杂类型的对象。如JavaBean、Array、List、Map等。

    如有不正确之处,请各位给予指出!

    1、 首先看看服务器端的代码所需要的JavaBean对象

     1 1.    package com.wy.object.entry; 
     2 2.    
     3 3.    import java.io.Serializable; 
     4 4.    
     5 5.    /** 
     6 6.    * User Entity 
     7 7.    * @author Administrator 
     8 8.    * 
     9 9.    */ 
    10 10.    public class User implements Serializable { 
    11 11.    
    12 12.    private static final long serialVersionUID = 1L; 
    13 13.    
    14 14.    private int id; 
    15 15.    private String name; 
    16 16.    private String email; 
    17 17.    private String address; 
    18 18.    
    19 19.    public int getId() { 
    20 20.    return id; 
    21 21.    } 
    22 22.    
    23 23.    public void setId(int id) { 
    24 24.    this.id = id; 
    25 25.    } 
    26 26.    
    27 27.    public String getName() { 
    28 28.    return name; 
    29 29.    } 
    30 30.    
    31 31.    public void setName(String name) { 
    32 32.    this.name = name; 
    33 33.    } 
    34 34.    
    35 35.    public String getEmail() { 
    36 36.    return email; 
    37 37.    } 
    38 38.    
    39 39.    public void setEmail(String email) { 
    40 40.    this.email = email; 
    41 41.    } 
    42 42.    
    43 43.    public String getAddress() { 
    44 44.    return address; 
    45 45.    } 
    46 46.    
    47 47.    public void setAddress(String address) { 
    48 48.    this.address = address; 
    49 49.    } 
    50 50.    
    51 51.    @Override 
    52 52.    public String toString() { 
    53 53.    
    54 54.    return this.id + " - " + this.name + " - " + this.address + " - " 
    55 55.    + this.email; 
    56 56.    
    57 57.    } 
    58 58.    } 

    下面的是集合传递Users,CXF直接传递集合对象会出现异常,用一个对象包装下就Ok了,不知道是什么原因。

     1 1.    package com.wy.object; 
     2 2.    
     3 3.    import java.util.HashMap; 
     4 4.    import java.util.List; 
     5 5.    
     6 6.    import com.wy.object.entry.User; 
     7 7.    
     8 8.    /** 
     9 9.    * CXF直接传递集合对象会出现异常,用一个对象包装下就Ok了,不知道是什么原因? 
    10 10.    * 
    11 11.    * @author Administrator 
    12 12.    * 
    13 13.    */ 
    14 14.    public class Users { 
    15 15.    private List<User> users; 
    16 16.    private User[] userArr; 
    17 17.    private HashMap<String, User> maps; 
    18 18.    public List<User> getUsers() { 
    19 19.    return users; 
    20 20.    } 
    21 21.    
    22 22.    public void setUsers(List<User> users) { 
    23 23.    this.users = users; 
    24 24.    } 
    25 25.    
    26 26.    public User[] getUserArr() { 
    27 27.    return userArr; 
    28 28.    } 
    29 29.    
    30 30.    public void setUserArr(User[] userArr) { 
    31 31.    this.userArr = userArr; 
    32 32.    } 
    33 33.    
    34 34.    public HashMap<String, User> getMaps() { 
    35 35.    return maps; 
    36 36.    } 
    37 37.    
    38 38.    public void setMaps(HashMap<String, User> maps) { 
    39 39.    this.maps = maps; 
    40 40.    } 
    41 41.    
    42 42.    } 

    2、 下面看看复杂对象传递的服务器端代码

     1 1.    package com.wy.object.server; 
     2 2.    
     3 3.    import javax.jws.WebParam; 
     4 4.    import javax.jws.WebService; 
     5 5.    
     6 6.    import com.wy.object.Users; 
     7 7.    import com.wy.object.entry.User; 
     8 8.    /** 
     9 9.    * 定制客户端请求WebService所需要的接口 
    10 10.    * @author Administrator 
    11 11.    * 
    12 12.    */ 
    13 13.    
    14 14.    @WebService 
    15 15.    public interface IUserService { 
    16 16.    public User getUserByName(@WebParam(name = "name") String name); 
    17 17.    public void setUser(User user); 
    18 18.    public Users getUsers(int i); 
    19 19.    public void setUsers(Users users); 
    20 20.    public Users getUserArray(int i); 
    21 21.    public void setUserArray(Users users); 
    22 22.    public void setUserMap(Users maps); 
    23 23.    public Users getUserMap(); 
    24 24.    } 

    接口实现类:

      1 1.    package com.wy.object.server.impl; 
      2 2.    
      3 3.    import java.util.ArrayList; 
      4 4.    import java.util.Date; 
      5 5.    import java.util.HashMap; 
      6 6.    import java.util.List; 
      7 7.    
      8 8.    import javax.jws.WebParam; 
      9 9.    import javax.jws.WebService; 
     10 10.    import javax.jws.soap.SOAPBinding; 
     11 11.    import javax.jws.soap.SOAPBinding.Style; 
     12 12.    
     13 13.    import com.wy.object.Users; 
     14 14.    import com.wy.object.entry.User; 
     15 15.    import com.wy.object.server.IUserService; 
     16 16.    
     17 17.    /** 
     18 18.    * WebService传递复杂对象,如JavaBean、Array、List、Map等 
     19 19.    * 
     20 20.    * @author Administrator 
     21 21.    * 
     22 22.    */ 
     23 23.    
     24 24.    @WebService(endpointInterface = "com.wy.object.server.IUserService", serviceName = "IUserService") 
     25 25.    @SOAPBinding(style = Style.RPC) 
     26 26.    @SuppressWarnings("deprecation") 
     27 27.    public class UserService implements IUserService { 
     28 28.    
     29 29.    // string 
     30 30.    public User getUserByName(@WebParam(name = "name") 
     31 31.    String name) { 
     32 32.    User user = new User(); 
     33 33.    user.setId(new Date().getSeconds()); 
     34 34.    user.setName(name); 
     35 35.    user.setAddress("China BeiJing"); 
     36 36.    user.setEmail(name + "@163.com"); 
     37 37.    return user; 
     38 38.    } 
     39 39.    
     40 40.    // object JavaBean 
     41 41.    public void setUser(User user) { 
     42 42.    System.out.println("@@@@@@@@@@@@ Server setUser @@@@@@@@@@@"); 
     43 43.    System.out.println("setUser:" + user); 
     44 44.    } 
     45 45.    
     46 46.    // 传递集合的包装对象 List 
     47 47.    public Users getUsers(int i) { 
     48 48.    List<User> users = new ArrayList<User>(); 
     49 49.    for (int j = 0; j <= i; j++) { 
     50 50.    User user = new User(); 
     51 51.    user.setId(new Date().getSeconds()); 
     52 52.    user.setName("Sun#" + j); 
     53 53.    user.setAddress("China"); 
     54 54.    user.setEmail("Sun" + j + "@163.com"); 
     55 55.    
     56 56.    users.add(user); 
     57 57.    
     58 58.    } 
     59 59.    Users u = new Users(); 
     60 60.    u.setUsers(users); 
     61 61.    return u; 
     62 62.    } 
     63 63.    
     64 64.    public void setUsers(Users users) { 
     65 65.    System.out.println("############ Server setUsers ###########"); 
     66 66.    for (User u : users.getUsers()) { 
     67 67.    System.out.println("setUsers:" + u); 
     68 68.    } 
     69 69.    } 
     70 70.    
     71 71.    // 传递集合的包装对象 Array 
     72 72.    public Users getUserArray(int i) { 
     73 73.    User[] users = new User[i]; 
     74 74.    for (int j = 0; j < i; j++) { 
     75 75.    User user = new User(); 
     76 76.    user.setId(new Date().getSeconds()); 
     77 77.    user.setName("Jack#" + j); 
     78 78.    user.setAddress("China"); 
     79 79.    user.setEmail("Jack" + j + "@163.com"); 
     80 80.    
     81 81.    users[j] = user; 
     82 82.    } 
     83 83.    Users u = new Users(); 
     84 84.    u.setUserArr(users); 
     85 85.    return u; 
     86 86.    } 
     87 87.    
     88 88.    public void setUserArray(Users users) { 
     89 89.    System.out.println("$$$$$$$$$$$$ Server setUserArray $$$$$$$$"); 
     90 90.    for (User u : users.getUserArr()) { 
     91 91.    System.out.println("setUserArray:" + u); 
     92 92.    } 
     93 93.    } 
     94 94.    
     95 95.    // 传递集合的包装对象 Map 
     96 96.    public void setUserMap(Users maps) { 
     97 97.    System.out.println("------------ Server setUserMap ----------"); 
     98 98.    System.out.println("setUserMap:" + maps.getMaps()); 
     99 99.    } 
    100 100.    
    101 101.    public Users getUserMap() { 
    102 102.    HashMap<String, User> users = new HashMap<String, User>(); 
    103 103.    User user = new User(); 
    104 104.    user.setId(new Date().getSeconds()); 
    105 105.    user.setName("Jack#"); 
    106 106.    user.setAddress("China#"); 
    107 107.    user.setEmail("Jack@163.com"); 
    108 108.    
    109 109.    users.put("A", user); 
    110 110.    user = new User(); 
    111 111.    user.setId(new Date().getSeconds()); 
    112 112.    user.setName("Tom"); 
    113 113.    user.setAddress("China$$"); 
    114 114.    user.setEmail("Tom@163.com"); 
    115 115.    
    116 116.    users.put("B", user); 
    117 117.    Users u = new Users(); 
    118 118.    u.setMaps(users); 
    119 119.    
    120 120.    return u; 
    121 121.    } 
    122 122.    } 

    3、 发布WebService的代码

     1 1.    package com.wy.object; 
     2 2.    
     3 3.    import javax.xml.ws.Endpoint; 
     4 4.    
     5 5.    import com.wy.object.server.impl.UserService; 
     6 6.    /** 
     7 7.    * 发布UserService服务 
     8 8.    * @author Administrator 
     9 9.    * 
    10 10.    */ 
    11 11.    public class DeployUserService { 
    12 12.    public static void main(String[] args) throws InterruptedException { 
    13 13.    String address = "http://localhost:8080/WebServiceCXF/services/IUserService"; 
    14 14.    UserService service = new UserService(); 
    15 15.    Endpoint.publish(address, service); 
    16 16.    System.out.println("Server ready..."); 
    17 17.    Thread.sleep(1000 * 60 * 20); 
    18 18.    System.out.println("Server exit..."); 
    19 19.    System.exit(0); 
    20 20.    } 
    21 21.    } 

    4、 客户端调用代码

     1 1.    package com.wy.object.client; 
     2 2.    
     3 3.    import java.util.ArrayList; 
     4 4.    import java.util.List; 
     5 5.    import java.util.Random; 
     6 6.    
     7 7.    import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; 
     8 8.    
     9 9.    import com.wy.object.Users; 
    10 10.    import com.wy.object.entry.User; 
    11 11.    import com.wy.object.server.IUserService; 
    12 12.    
    13 13.    /** 
    14 14.    * 调用UserService客户端 
    15 15.    * 
    16 16.    * @author Administrator 
    17 17.    * 
    18 18.    */ 
    19 19.    public class UserServiceClient { 
    20 20.    public static void main(String[] args) { 
    21 21.    
    22 22.    // 调用WebService 
    23 23.    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
    24 24.    factory.setServiceClass(IUserService.class); 
    25 25.    factory.setAddress("http://localhost:8080/WebServiceCXF/services/IUserService"); 
    26 26.    IUserService service = (IUserService) factory.create(); 
    27 27.    
    28 28.    //string 
    29 29.    System.out.println("@@@@@@@@@@@@@Client getUserByName@@@@@@@@@@@@@@"); 
    30 30.    User user = service.getUserByName("Jack"); 
    31 31.    System.out.println("Client: "+ user); 
    32 32.    user.setAddress("China-BeiJing"); 
    33 33.    
    34 34.    //object JavaBean 
    35 35.    service.setUser(user); 
    36 36.    
    37 37.    //传递集合的包装对象 List 
    38 38.    System.out.println("#############Client getUsers###################"); 
    39 39.    Users users = service.getUsers(4); 
    40 40.    System.out.println("Client: "+ users); 
    41 41.    List<User> tempUsers = new ArrayList<User>(); 
    42 42.    for (User u : users.getUsers()) { 
    43 43.    System.out.println("Client: "+ u); 
    44 44.    u.setName("Jack" + new Random().nextInt(100)); 
    45 45.    u.setAddress("Chian-BeiJing#" + new Random().nextInt(100)); 
    46 46.    tempUsers.add(u); 
    47 47.    } 
    48 48.    users.getUsers().clear(); 
    49 49.    users.getUsers().addAll(tempUsers); 
    50 50.    
    51 51.    service.setUsers(users); 
    52 52.    
    53 53.    //传递集合的包装对象 Array 
    54 54.    System.out.println("$$$$$$$$$$$$Client getUserArray$$$$$$$$$$$$$$$"); 
    55 55.    users = service.getUserArray(4); 
    56 56.    User[] userArr = new User[4]; 
    57 57.    int i = 0; 
    58 58.    for (User u : users.getUserArr()) { 
    59 59.    System.out.println("Client: "+ u); 
    60 60.    u.setName("Jack" + new Random().nextInt(100)); 
    61 61.    u.setAddress("Chian-ShenZhen#" + new Random().nextInt(100)); 
    62 62.    userArr[i] = u; 
    63 63.    i++; 
    64 64.    } 
    65 65.    users.setUserArr(userArr); 
    66 66.    
    67 67.    service.setUserArray(users); 
    68 68.    
    69 69.    //传递集合的包装对象 Map 
    70 70.    System.out.println("------------Client getUserMap----------------"); 
    71 71.    users = service.getUserMap(); 
    72 72.    System.out.println("Client: "+ users.getMaps()); 
    73 73.    users.getMaps().put("ABA", userArr[0]); 
    74 74.    service.setUserMap(users); 
    75 75.    
    76 76.    } 
    77 77.    } 
  • 相关阅读:
    纷享销客公司产品能力学习笔记
    有质量的两道面试题
    java项目启动时执行指定方法
    css银行卡号样式
    swiper6使用鼠标滚轮失效退回swiper4即可
    vue-swiper Demo
    vue点击下载图片
    跨域请求发送数据在body里,java后台接收
    跨域,跨服务session获取不到,前后台不会传输Cookie,sessionId不一致
    Windows下 redis命令及配置
  • 原文地址:https://www.cnblogs.com/sharpest/p/8376354.html
Copyright © 2011-2022 走看看