`

Hessian实战应用之设置Hessian报文头信息

阅读更多

 使用Hessian中,在Java模拟客户端的时候可能存在需要向Hessian报文头信息设置一些参数,如token信息。默认的HessianProxyFactory对没有方法设置报文头的方法。以下方法可以做到。

1.新建自己的HessianProxyFactory继承com.connection.ForwardHessianConnectionFactory

/**
 * 接口调用的HessianConnectionFactory
 * 重写Hessian的HessianURLConnectionFactory向报文头添加接入端的控制信息
 * 
 * @author ZhangMingxue
 * @version 1.0
 * @time 2013下午04:49:30
 * @JDK 1.6
 */
public class ForwardHessianConnectionFactory extends
		HessianURLConnectionFactory {

	// 报文头参数
	private Map<String, String> headerParamMap = null;

	/**
	 * 报文头参数,通过构造方法传入
	 * 
	 * @param headerParamMap
	 */
	public ForwardHessianConnectionFactory(Map<String, String> headerParamMap) {
		this.headerParamMap = headerParamMap;
	}

	@Override
	public HessianConnection open(URL url) throws IOException {
		HessianURLConnection hessianURLConnection = (HessianURLConnection) super
				.open(url);

		if (null != headerParamMap && !headerParamMap.isEmpty()) {
			Set<String> keySet = headerParamMap.keySet();
			for (String key : keySet) {
				// 向报文头中添加参数
				hessianURLConnection.addHeader(key, headerParamMap.get(key));
			}
		}
		return hessianURLConnection;
	}

}

 2.创建HessianProxyFactory

	/**
	 * 创建HessianProxyFactory
	 * 
	 * @param jsc
	 * @return
	 */
	public HessianProxyFactory createHessianProxyFactory(JavaSamplerContext jsc) {
		HessianProxyFactory hessianProxyFactory = new HessianProxyFactory();
		// Request的Header设置参数
		Map<String, String> headerParamMap = addRequestHeaderParams(jsc);
		// 创建自己的HessianConnectionFactory
		HessianConnectionFactory hessianConnectionFactory = new ForwardHessianConnectionFactory(
				headerParamMap);
		hessianConnectionFactory.setHessianProxyFactory(hessianProxyFactory);
		hessianProxyFactory.setConnectionFactory(hessianConnectionFactory);
		return hessianProxyFactory;
	}

  

/**
	 * 接口接用请求转发
	 * 
	 * @param jsc
	 * @return
	 */
	public Map<String, String> addRequestHeaderParams(JavaSamplerContext jsc) {
		Map<String, String> headerParamMap = new HashMap<String, String>();
		headerParamMap.put("xxxxx1", jsc.getParameter("id"));
		headerParamMap.put("xxxxx2", jsc.getParameter("authToken"));
		return headerParamMap;
	}

 3.客户端使用自己的HessianProxyFactory,获取远程接口。

 

public IPropose buildRemoterServer(JavaSamplerContext jsc) {
		HessianProxyFactory hessianProxyFactory = createHessianProxyFactory(jsc);
		IPropose iPropose = null;
		try {
			StringBuffer url = createServerURL(jsc,
					"xxx.xxx.xxxx.xxxxServlet");
			iPropose = (IPropose) hessianProxyFactory.create(IPropose.class,
					url.toString());
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		return iPropose;
	}

 

@Override
public SampleResult runTest(JavaSamplerContext jsc) {
	SampleResult result = new SampleResult();
	result.sampleStart();
	try {
		IPropose iPropose = buildRemoterServer(jsc);
		Object bo = iPropose.createPl();//调用远程服务器方法
		result.sampleEnd();
	} catch (Exception e) {
		result.setSuccessful(false);
		result.setResponseMessage(e.getMessage());
		e.printStackTrace();
	}
	return result;
}

 以上的JavaSamplerContext对象可以简单理解为Map类型的参数,由jmeter测试工具创建,主要用于存放测试的参数,根Hessian没有关系,主要是我的客户端是Jmeter,如果是客户端采用的是其它技术可以把JavaSamplerContext换成Map.

1
2
分享到:
评论
1 楼 淘气天空lc 2013-09-05  
Host能直接设置??

相关推荐

    Hessian协议格式

    Hessian 协议格式 Hessian 协议是一种轻量级的 remoting on http 工具,使用简单的方法...通过对 Hessian 协议报文格式的分析,我们可以更好地理解 Hessian 协议的工作原理,并更好地应用 Hessian 协议在实际项目中。

    Hessian实战应用之获取客户端请求URL和重新转发客户端请求

    本篇将详细探讨Hessian在实战中的应用,特别是如何获取客户端请求的URL以及如何重定向或转发客户端请求。 首先,我们需要了解Hessian的基本原理。Hessian是基于HTTP的,它将Java对象序列化为二进制格式,从而减少...

    hessian案例,hessian案例

    7. **实际应用**:在"Test3"、"PyDome1"和"Test1"这些文件中,可能包含了实际的代码示例或者测试用例,展示了如何在Java和Python中设置Hessian服务和客户端,以及如何进行调用。通过这些例子,开发者可以深入理解...

    Hessian应用

    《Hessian应用详解》 Hessian,一种轻量级的二进制协议,因其高效、简单的特点,在分布式服务中被广泛应用。它允许开发者在HTTP上透明地调用远程方法,就像是本地方法调用一样,极大地提高了开发效率和系统性能。...

    Hessian

    **Hessian:深入理解与应用** Hessian是一种二进制Web服务协议,它由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation,RMI)服务。Hessian的目标是简化分布式系统...

    Hessian多个版本打包下载

    这包括设置服务器端和客户端的Hessian服务,定义服务接口,处理序列化和反序列化的过程,以及调试可能出现的问题。在进行版本升级时,要注意兼容性问题,确保旧版本的服务仍能正常工作,同时充分利用新版本带来的...

    基于Hessian矩阵增强的心血管分割_hessian_hessian血管_hessian血管分割_血管分割_Hessian矩阵

    在IT领域,尤其是在医学图像分析中,Hessian矩阵是一个重要的数学工具,用于图像特征检测,特别是在血管分割的应用中。本文将深入探讨标题和描述中提到的"基于Hessian矩阵增强的心血管分割"这一主题。 Hessian矩阵...

    Hessian 使用小结

    Hessian是一种轻量级的二进制远程过程调用(RPC)协议,它基于HTTP,并且通常通过Servlet来暴露Web服务。Hessian的设计目标是为了提供...通过这些资源,开发者可以更深入地理解并应用Hessian在实际项目中的各种场景。

    多尺度hessian滤波器图像增强

    这个技术是基于数学形态学的Hessian矩阵理论,由V.S. Frangi在1998年的论文中提出,因此也被称为Frangi滤波器。 Hessian矩阵是二阶偏导数的矩阵,它能够捕捉图像局部的曲率信息。在图像中,特征如边缘、拐角或者...

    Hessian矩阵以及在血管增强中的应用—OpenCV3和c++版本代码工程

    Hessian矩阵是图像梯度的二阶导数,它可以捕捉图像局部区域的曲率信息。对于二维图像,Hessian矩阵是一个2x2的矩阵,其元素由图像的二阶偏导数构成。矩阵的对角元素表示图像在水平和垂直方向的二阶导数,非对角元素...

    Hessian学习笔记

    2. **远程方法调用(RMI)**:Hessian允许一个应用调用运行在另一台机器上的服务,就像调用本地方法一样。这在分布式系统中非常有用,可以解耦服务提供者和消费者,提高系统的可扩展性和灵活性。 3. **服务接口定义...

    dubbo-hessian协议http请求demo(java)

    - 在实际开发中,我们可能会需要编写一些辅助工具类来处理Hessian的相关操作,例如Hessian2Input和Hessian2Output,它们用于读写Hessian序列化的二进制流。 6. **安全性与优化**: - 虽然Hessian协议效率高,但其...

    hessian

    Hessian是一种二进制Web服务协议,由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method ...通过深入研究源码和利用相关工具,我们可以更好地利用Hessian的优势来优化我们的应用程序。

    hessian学习基础篇——序列化和反序列化

    本文将深入探讨Hessian框架的基础知识,它是一个高效的二进制序列化协议,广泛应用于Java和.NET之间跨语言通信。通过学习Hessian,我们可以更有效地处理数据传输,提高应用性能。 首先,让我们理解什么是序列化。...

    hessian-4.0.63-API文档-中英对照版.zip

    赠送Maven依赖信息文件:hessian-4.0.63.pom; 包含翻译后的API文档:hessian-4.0.63-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:com.caucho:hessian:4.0.63; 标签:hessian、caucho、jar包、java、...

    springMVC hessian

    而 Hessian 是一种轻量级的远程过程调用(RPC)协议,它允许应用程序之间进行高效的二进制通信。 首先,让我们深入理解 SpringMVC。SpringMVC 提供了一个灵活的架构,用于处理 HTTP 请求、路由请求到相应的处理器、...

    Spring中集成Hessian的问题

    在Spring框架中集成Hessian是为了实现远程方法调用(Remote Method Invocation, RMI),这是一种轻量级的序列化协议,可以高效地传输Java对象。Hessian使得服务提供者和服务消费者之间能够通过网络进行快速的数据...

    hessianServer

    HessianServer指的是实现Hessian协议的服务端程序,通常用于构建分布式系统,使得不同的应用可以跨网络进行无缝通信。下面将详细介绍Hessian服务端的相关知识点。 1. **Hessian协议**: Hessian是Adobe公司开发的...

    Hessian学习简单demo

    1. **设置环境**:确保你已经在项目中引入了Hessian的库,对于Java,这可能是通过Maven或Gradle添加依赖。对于C++,可能需要下载并编译Hessian库。 2. **创建服务端**:定义一个要暴露的服务接口,比如一个计算两个...

Global site tag (gtag.js) - Google Analytics