• hessian客户端调用服务端测试类


    1. pom.xml

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
    <dependency>
        <groupId>com.caucho</groupId>
        <artifactId>hessian</artifactId>
        <version>4.0.38</version>
    </dependency>

    2. 服务端

    2-1 接口类

    package hessian.server;
    
    public interface MessageHessianService {
    
        /**
         * 通知更新用户状态
         */
        String noticePasswordUpdate(String json);
    
    }

    2-2 接口实现类

    package hessian.server;
    
    public interface MessageHessianServiceImpl  {
    
        /**
         * 通知更新用户状态
         */
    
        public String noticePasswordUpdate(String json){
            log.info("触发接口-通知更新用户状态:{}",json);
            if(StringUtils.isEmpty(json)){
                return "0";
            }
            return "1";
        }
    }

    2-3 发布

    package hessian.server.config;
    
    import bynonco.com.shareehelper.service.MessageHessianService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.remoting.caucho.HessianServiceExporter;
    
    /**
     * hessian作为服务端
     * 需要暴露的接口
     */
    @Configuration
    public class HessianExporterConfig {
    
        @Autowired
        private MessageHessianService messageHessianService;
    
        @Bean(name = "/server/messageHessianService.hessian")
        public HessianServiceExporter messageHessianService() {
            HessianServiceExporter exporter = new HessianServiceExporter();
            exporter.setService(messageHessianService);
            exporter.setServiceInterface(MessageHessianService.class);
            return exporter;
        }
    
    }

    2-3 过滤器拦截处理Header,可忽略

    View Code
    JwtAuthenticationToken类设计:
    View Code

    3,客户端

    3-1 接口类- 必须和服务端接口设计一致

    package hessian.client;
    
    public interface MessageHessianService implements MessageHessianService {
    
        /**
         * 通知更新用户状态
         */
        String noticePasswordUpdate(String json);
    
    }

    3-2 HessianProxyFactoryUtil 工厂类

    package hessian.client;
    
    import hessian.client.HessianClientProxyFactory;
    import com.caucho.hessian.client.HessianProxyFactory;
    import java.util.HashMap;
    import java.util.Map;
    
    
    public class HessianProxyFactoryUtil {
    
        public final static String url = "http://localhost:8080/api/server/messageHessianService.hessian";
    
        private final static HessianProxyFactory factory = new HessianProxyFactory();
    
        private static Map<Class,Object> hessianBeans = new HashMap<>();
    
        /**
         *  获取调用端对象
         * @param clazz 实体对象泛型
         * @param <T>
         * @return 业务对象
         */
        public static <T> T getHessianClientBean(Class<T> clazz, String code) throws Exception{
            factory.setOverloadEnabled(true);
            String token = UnitTokenTest.createToken(code); // 该类自定义创建token,可忽略
            HessianClientProxyFactory hessianConnectionFactory = new HessianClientProxyFactory(token);
            hessianConnectionFactory.setHessianProxyFactory(factory);
            factory.setConnectionFactory(hessianConnectionFactory);
            T result = null;
            if(!hessianBeans.containsKey(clazz)) {
                result = (T)factory.create(clazz,url);
                hessianBeans.put(clazz, result);
            }else {
                result = (T)hessianBeans.get(clazz);
            }
            return result;
        }
    
        /**
         * 移除hessionClientBean
         * @param clazz
         */
        public static void removeHessianClientBean(Class clazz) {
            if(hessianBeans.containsKey(clazz)) {
                hessianBeans.remove(clazz);
            }
        }
    }

    3-3 测试连接

    package hessian.client;
    
    import org.junit.Assert;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import java.util.List;
    
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest
    public class MessageHessianClientTest {
    
        /**
         * 测试用户密码变更通知
         */
        @Test
        public void noticePasswordUpdate(){
            String code = "EEEE";
            String sid = "123456";
            try {
                MessageHessianService messageHessianService = HessianProxyFactoryUtil.getHessianClientBean(MessageHessianService.class,code);
                String msg = messageHessianService.noticePasswordUpdate(sid);
                ConsoleLogger.info("触发接口-通知更新用户状态:{}",sid);
                Assert.assertTrue(msg.equals("1"));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

     4. 遇到问题及解决方法

    提示异常:

    com.caucho.hessian.io.HessianProtocolException: '' is an unknown code

    客户端和服务端返回参数类型不一致,服务端为int,客户端为String.

    解决方法:客户端和服务器接口类一致即可解决问题.

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    保存失败,我的随笔包含红色框内容,不支持该字符,所以无法保存.

  • 相关阅读:
    Matlab2014+VS2013配置vlfeat0.9.20 2016-10-27 15:03 223人阅读 评论(0) 收藏
    scikit-learn SVM使用和学习 2016-08-21 16:34 214人阅读 评论(0) 收藏
    python部落习题笔记 标签: python 2016-07-14 16:08 248人阅读 评论(0) 收藏
    NBNN及SIS Measure 标签: 稀疏相似度度量NBNNSIS分类 2016-04-16 10:49 754人阅读 评论(0)
    压缩感知的MP算法 标签: 压缩感知稀疏表示MP算法 2016-03-19 20:41 594人阅读 评论(0)
    K-means 处理 RGB 图像 标签: clusteringkmeansRGBmatlab 2015-08-16 16:49 255人阅读
    C++ Primer Plus 第6版 中文版随书笔记 标签: c++ 2015-07-22 18:58 205人阅读 评论(0)
    3D 数据的获取和读入 标签: matlab3D 图像 2015-04-19 11:52 387人阅读 评论(0)
    Python学习笔记九:文件I/O
    Python学习笔记八:模块
  • 原文地址:https://www.cnblogs.com/zhutouying/p/11677702.html
Copyright © 2020-2023  润新知