zoukankan      html  css  js  c++  java
  • (四)输入参数与输出类型为复杂类型的web服务

    一、  服务端发布服务

      1.1  定义复杂类型:UserBean.java

    package service;
    
    public class UserBean {
        private String userId;
        private String userName;
        private String passWord;
    //隐藏getset方法

      1.2  定义服务接口 :UserService.java

    package service;
    
    import javax.jws.WebParam;
    import javax.jws.WebResult;
    import javax.jws.WebService;
    
    /**
     * 这是一个web服务
     * @author Administrator
     *
     */
    @WebService
    public interface UserService {
    
        /**
         * 获取用户
         * @return
         */
        @WebResult(name = "getUserResult")
        public UserBean getUser();
    
        /**
         * 设置用户
         * @param user
         */
        public void setUser(@WebParam(name = "userBean") UserBean user);
    }

      1.3  定义服务实现类

    package service;
    
    import javax.jws.WebParam;
    import javax.jws.WebResult;
    import javax.jws.WebService;
    
    @WebService(endpointInterface="service.UserService")
    public class UserServiceimpl implements UserService {
    
        @Override
        public UserBean getUser() {
            UserBean user = new UserBean();
            user.setPassWord("123");
            user.setUserId("001");
            user.setUserName("服务端返回的用户");
            return user;
        }
    
        @Override
        public void setUser(UserBean user) {
            if (user != null) {
                System.out.println("客户端设置的用户=" + user);
            }
    
        }
    
    }

      1.4  发布服务

    package publish;
    
    import javax.xml.ws.Endpoint;
    
    import service.UserServiceimpl;
    
    public class TestPublish {
        public static void main(String[] args) {
            Endpoint.publish("http://localhost:3030/userBean", new UserServiceimpl());
            
            System.out.println("发布成功.....");
        }
    }

    二、客户端接受、发送消息到服务端

      2.1  用工具生成客户端代码(具体步骤参照上一章)

       2.2  发送、接收消息

    package test;
    
    import java.rmi.RemoteException;
    
    import service.UserBean;
    import service.UserService;
    import service.UserServiceProxy;
    
    public class TestMain {
        public static void main(String[] args) throws RemoteException {
            
            
            /**
             * 获取服务端返回的用户
             */
            UserService userService=new UserServiceProxy().getUserService();
            UserBean user=userService.getUser();
            System.out.println(user.getUserId()+"	"+user.getUserName());
            
            
            /**
             * 客户端设置用户
             */
            
            UserBean userbean=new UserBean();
            userbean.setUserId("2");
            userbean.setUserName("客户端设置的用户");
            userbean.setPassWord("123520");
            new UserServiceProxy().setUser(userbean);
            
        }
    }

    结果:

    •  注意:于普通的 Java 数据类型、JavaBean、List 而言,SOAP 服务可以完全将其处理(序列化与反序列化),这些都没有任何问题,但对于 Map 对象而言,不能再放其他复杂类型。
    • 一般来说,参数只传字符串类型,因为web服务可以不同语言调用的,而java复杂类型其他语言可能没有,但是所有语言共有字符串类型。而传递的字符串可以将数据封装成json/xml格式的字符串,然后客户端接收到json/xml格式的字符串再进行解析即可。
  • 相关阅读:
    pickle模块
    json模块
    sys模块的介绍
    Java中char和String的处理问题
    javaweb学习 基础(三)Cookie Session
    javaweb学习 基础(二)httpservlet
    javaweb学习 基础(一)servlet day09-day10
    java学习 网络编程 tcp
    java学习 网络编程 ip,udp
    了解数据仓库
  • 原文地址:https://www.cnblogs.com/shyroke/p/7655255.html
Copyright © 2011-2022 走看看