hessian学习

1 篇文章 0 订阅
1 篇文章 0 订阅

hessian是一个采用二进制格式传输的服务框架,相对传统soap web service,更轻量,更快速。官网地址:http://hessian.caucho.com/

目前已经支持N多语言,包括:java/c#/flex/php/ruby…

maven的依赖项如下:

<dependency>
     <groupId>com.caucho</groupId>
     <artifactId>hessian</artifactId>
     <version>4.0.38</version>
 </dependency>

入门示例:

一、服务端开发

1.1 先建服务接口

public interface HelloService {   
    public String helloWorld(String message);
}

1.2 提供服务实现

import yjmyzz.cnblogs.com.service.HelloService;

public class HelloServiceImpl implements HelloService {

     @Override
     public String helloWorld(String message) {
         return "hello," + message;
     }
}

1.3 修改web.xml

<servlet>
    <servlet-name>hessian-service</servlet-name>
    <servlet-class>
        com.caucho.hessian.server.HessianServlet
    </servlet-class>
    <init-param>            
        <param-name>home-class</param-name>            
        <param-value>
        <!-- 服务实现类 --yjmyzz.cnblogs.com.service.impl.HelloServiceImpl
        </param-value>
    </init-param>
    <init-param>
        <param-name>home-api</param-name>
        <!-- 服务接口 -->
            yjmyzz.cnblogs.com.service.HelloService
        </param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>hessian-service</servlet-name>
    <url-pattern>/hessian</url-pattern>
</servlet-mapping>

部署到tomcat或其它web容器中即可。

1.4 导出服务接口jar包

最终服务是提供给客户端调用的,客户端必须知道服务的接口信息(包括接口方法中的传输dto定义),所以得将这些java文件导出成jar,提供给调用方。

方法很简单:eclipse中在接口package(包括dto对应的package)上右击,选择Export
这里写图片描述
再选择Jar File
这里写图片描述

二、客户端调用
同样先添加maven的hessian依赖项,同时引入上一步导出的服务接口jar包,然后参考下面的示例代码:

import java.net.MalformedURLException;
import org.junit.Test;
import yjmyzz.cnblogs.com.service.HelloService;
import com.caucho.hessian.client.HessianProxyFactory;


public class ServiceTest {
     @Test
     public void testService() throws MalformedURLException {        

         String url = "http://localhost:8080/hessian-showcase/hessian";
         System.out.println(url);

         HessianProxyFactory factory = new HessianProxyFactory();
         HelloService helloService = (HelloService) factory.create(HelloService.class, url);
         System.out.println(helloService.helloWorld("jimmy"));
    }
}

三、不可行方案
在做项目中,有些二进制数据要传输,故选择了hessian,但在实际过程中,存在以下问题迟迟不能解决。
1.项目为API接口,采用SpringJDBC+Spring,有着标准的dao、service、control层,前端采用DispatcherServlet进行分发。
2.当配置完Hessian后,简单的传输都能完成,但项目的业务逻辑是:需要传输的数据需要调用其他Service的Impl。故想以@AutoWired将Service的Impl注入至Hessian的Service中,并进行调用。但是注入结果为空。即Hessian不会调用Spring配置文件对包注解进行扫描。百思不得其解。希望有人做过相关功能并解决的话给我留言,不慎感激。

另:在采用Hession之前,还曾尝试使用标准的Restful进行二进制数据传输,发现服务器端产生数据和客户端接收数据居然不同。认为是Http协议将我需要传递的数据强行做了转换,不知道对不对。(二进制的数据是String类型的字符串通过Gzip压缩得来的。产生的byte[]中存在-23这类的负值,一般可读的String型数据转为byte[]后,其值均为正值)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值