使用Hessian创建接口

使用Hessian创建接口

Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。

详细介绍

1. Hessian集成Spring配置

加入Hessian依赖

<hessian.version>4.0.38</hessian.version>
...
<!-- hessian -->
<dependency>
    <groupId>com.caucho</groupId>
    <artifactId>hessian</artifactId>
    <version>${hessian.version}</version>
</dependency>  

Hessian依赖已SpringMVC,首先需要配置SpringMVC环境,SpringMVC配置略!

首先创建hessian.xml,引入Spring Bean schema

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util-4.0.xsd">
</beans> 

在SpringMVC配置文件中加入

<import resource="classpath:hessian-api.xml"/>  

2. 创建接口及实现

接口

package com.tiamaes.gjds.app.hessian.api;

import java.util.List;

import com.tiamaes.gjds.app.bean.TrafficReport;

/**
 * <p>类描述: 路况信息API ,Hessian接口</p>
 * <p>创建人:王成委  </p>
 * <p>创建时间:2015年1月16日 下午3:05:04  </p>
 * <p>版权说明: ? 2015 Tiamaes </p>
 */
public interface TrafficReportApi {

    /**
     * 获取全部路况信息
     * @author 王成委
     * @return
     */
    public List<TrafficReport> getAll();

    /**
     * <p>方法描述:畅行指数</p>
     * <p>创建人: 王成委  </p>
     * <p>创建时间: 2015年1月10日 上午10:50:06 </p>
     * @return
     */
    public Double getCurrentTrafficIndex();

}

实现类

package com.tiamaes.gjds.app.hessian.api;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.tiamaes.gjds.app.bean.TrafficReport;
import com.tiamaes.gjds.app.service.TrafficReportService;

/**
 * <p>类描述: 路况查询 </p>
 * <p>创建人:王成委  </p>
 * <p>创建时间:2015年1月16日 下午3:15:29  </p>
 * <p>版权说明: ? 2015 Tiamaes </p>
 */
public class TrafficReportApiImpl implements TrafficReportApi{

    @Autowired
    private TrafficReportService trafficReportService;

    @Override
    public List<TrafficReport> getAll() {
        try {
            List<TrafficReport> list = this.trafficReportService.getAllCongestion();
            //System.out.println(JackSonUtils.bean2Json(list));
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public Double getCurrentTrafficIndex() {
        return this.trafficReportService.getCurrentTrafficIndex();
    }

}

3、Spring配置

   <bean name="busWatingApi" class="com.tiamaes.gjds.app.hessian.api.BusWaitingApiImpl" />
   <bean name="/hessian/busWatingApi" class="org.springframework.remoting.caucho.HessianServiceExporter">
        <!-- service引用具体的实现实体Bean-->
        <property name="service" ref="busWatingApi" />
        <property name="serviceInterface" value="com.tiamaes.gjds.app.hessian.api.BusWaitingApi" />
    </bean>   

4、测试

    /**
     * Test method for {@link com.tiamaes.gjds.app.hessian.api.BusLineApiImpl#getLineInfo(String,String)}.
     * @throws ClassNotFoundException
     * @throws MalformedURLException
     * @throws AppInterfaceException
     */
    @Test
    public void testQueryBusStationInfo() throws MalformedURLException, ClassNotFoundException {
        String url = "http://127.0.0.1:808/AppInterface/hessian/busLineApi";
        HessianProxyFactory factory = new HessianProxyFactory();
        BusLineApi  api = (BusLineApi) factory.create(BusLineApi.class,url);
        List<GjdsBusStationInfo> reports = api.queryBusStationInfo("B2", "1");
        assertTrue(reports.size() > 0);
    }  
时间: 2024-08-02 04:35:44

使用Hessian创建接口的相关文章

Java利用webservice创建接口案例源码

环境要求: JDK1.7,并配置Java的环境变量 BaseDao  接口: /** * 要使得成为一个可供访问的接口,必须添加:@WebService * */ @WebServicepublic interface BaseDao {    //添加一个加法的接口        @WebResult(name="addddddre")    public int add(@WebParam(name="add01")int a,@WebParam(name=&q

Java中如何动态创建接口的实现

有很多应用场景,用到了接口动态实现,下面举几个典型的应用: 1.mybatis / jpa 等orm框架,可以在接口上加注解进行开发,不需要编写实现类,运行时动态产生实现. 2.dubbo等分布式服务框架,消费者只需要引入接口就可以调用远程的实现,分析源代码,其实在消费端产生了接口的代理实现,再由代理调用远程接口. 3.spring aop 这是最典型的动态代理了. 创建接口的动态实现,有二种最常用的方式:JDK动态代理和CGLIB动态代理. 代理模式是一种常用的设计模式,其目的就是为其他对象提

创建接口调用--lambda与api_gateway结合

爬虫返回实时接口的数据,首先要有接口,我们使用api_gateway创建接口,lambda作为函数进来传参调用,来,干活! 首先我们要创建函数的入门lambda: (登入具有 AWS 管理控制台访问权限的平台即可 2.设置一些lambda的参数设置 1)设置超时时间 2)网络信息设置,以及需要传参的个数,几个参数就设置几个子网 然后目前先到这里,接下来我们创建api_gateway api_gateway创建: 登入具有 AWS 管理控制台访问权限的平台. 1.点击创建api 2.输入创建api

关于Spring Boot中的业务层(Service)是否要创建接口的分析

很多人在借助Spring Boot框架开发web项目时,在业务层(Service)这一部分,标准做法是:定义一个接口,然后再一个或多个类去实现.疑问来了: ????????为什么我们要维护两份同构代码,而不直接使用一个类呢? ????????不创建接口,通过把业务实现类直接通过注解@Autowired注入控制层Controller,也一点不耽误功能的实现啊,那么我为什么还要创建接口? ????网上大部分回答都是说什么面向对象的解耦云云,引经据典,说得都很好,然而,都没有从根本上回答我们关心的问题

C#基本语法复习-创建接口和定义抽象类

定义接口: 在接口中要按照与类一样的方式声明方法,只是不能够指定任何访问修饰符,要将方法的主体换成一个分号,接口默认的访问类型是public: interface a{ int b(); } 实现接口: 实现一个接口时,必须保证每个方法都完全匹配与他对应的接口中的方法,方法名和返回类型完全匹配,所有参数包括ref或out都完全,匹配使用接口名作为前缀,这称为显示接口实现,显示接口实现时,方法为私有的,只有采用该接口引用该对象的实例才能实现对方法的访问.采用隐式实现时,用于实现接口中的所有方法都必

linux内核中的线程创建接口

介绍一些内核给我们提供的用于在内核中创建线程的内核接口函数. 其实在linux内核中,无论是进程还是线程,都是用struct task_struct结构体来表示的. 用于创建一个内核线程的函数: struct task_struct * kthread_create( int (*threadfn)(void *data),                                           void *data,                                 

关于PHP创建接口及调用接口的简短例子(本地)

********************************************************************************************** /*这是PHP创建的一个小接口*/ <?php $mysqli = new mysqli('localhost', 'root', '123456','interfacetest'); mysqli_query($mysqli,"set names utf8"); if ($mysqli-&g

阶段3 1.Mybatis_03.自定义Mybatis框架_3.自定义mybatis的编码-根据测试类中缺少的创建接口和类

先认识一下这几个类.Resources是一个class SqlSessionFactoryBuilder 创建新项目 复制相关的依赖 复制之前的代码 复制到当前项目的src下 把Mybits的依赖删除掉 删除Mbits依赖后,就相当于没有Mybits的内容了. 新建类Resources 之类就可以把Resources的包导入进来了.就是我们自己新建的类 Resources Resources类里面创建方法getResourceAsStream 方法内是三步: 1.拿到类的字节码 2.获取字节码的

自定义菜单创建接口

自定义菜单接口可实现多种类型按钮,如下: 1.click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互: 2.view:跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息. 3.scancode_push:扫码推事件用户点击按钮后,微信客户端将调起