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.    } 
  • 相关阅读:
    在C#代码中应用Log4Net(二)典型的使用方式
    在C#代码中应用Log4Net(一)简单使用Log4Net
    Windows Azure Active Directory (2) Windows Azure AD基础
    Windows Azure Virtual Network (6) 设置Azure Virtual Machine固定公网IP (Virtual IP Address, VIP) (1)
    Windows Azure Active Directory (1) 前言
    Azure China (6) SAP 应用在华登陆 Windows Azure 公有云
    Microsoft Azure News(3) Azure新的基本实例上线 (Basic Virtual Machine)
    Microsoft Azure News(2) 在Microsoft Azure上运行SAP应用程序
    Microsoft Azure News(1) 新的数据中心Japan East, Japan West and Brazil South
    Windows Azure HandBook (2) Azure China提供的服务
  • 原文地址:https://www.cnblogs.com/sharpest/p/8376354.html
Copyright © 2011-2022 走看看