`
wwwzhouhui
  • 浏览: 361126 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

webservices学习之hession

阅读更多
学习了以下Hession使用,下面说明一下如何使用(网上有先人弄过例子的),这里仅仅个人学习交流使用

1.需要JAR
  hessian-3.2.1.jar(JAVA 版本的)
2.代码
  服务端接口
  IBasic.java
 package hessian;

import java.util.List;
import java.util.Map;

/***********************************************************************   
 *   
 *   IBasic.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   May 21, 2009   3:38:06 PM   
 *   @revision         $Id:     *   
 ***********************************************************************/
public interface IBasic {
	 /**   
     * 测试字符串   
     * @return   
     */   
    public String hello();    
   
    /**   
     * 取一辆汽车   测试对象传递   
     * @return   
     */   
    public Car getCar();    
    /**
     *   取得list 数据
     * @return
     */
    public List<String> getList();
    
    /**
     * 取得map 数据
     * @return
     */
    public Map<String,String> getMap();
    
    /**
     *  保存数据
     * @param map
     */
    public void setMap(Map<String,Car> map);

}


服务端实现类代码 BasicService.java
package hessian;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/*******************************************************************************
 * 
 * BasicService.java
 * 
 * @copyright Copyright: 2009-2012
 * @creator 周辉<br/>
 * @create-time May 21, 2009 3:39:21 PM
 * @revision $Id: *
 ******************************************************************************/
public class BasicService implements IBasic {
	/**
	 * 取一辆汽车 测试对象传递
	 * 
	 * @return
	 */
	public Car getCar() {
		Car car = new Car();
		car.setColor("RED红色");
		car.setLength("2400");
		car.setName("HAHACHE");
		return car;
	}

	/**
	 * 测试字符串
	 * 
	 * @return
	 */
	public String hello() {
		return "hello zhouhui";
	}

	/**
	 * 取得list 数据
	 * 
	 * @return
	 */
	public List<String> getList() {
		List<String> list = new ArrayList<String>();
		list.add("1");
		list.add("2");
		list.add("3");
		return list;
	}

	/**
	 * 取得map 数据
	 * 
	 * @return
	 */
	public Map<String, String> getMap() {
		Map<String, String> map = new HashMap<String, String>();
		if (map.isEmpty()) {
			map.put("1", "zhouhui1");
			map.put("2", "zhouhui2");
			map.put("3", "zhouhui3");
		}
		return map;
	}

	/**
	 * 保存数据
	 * 
	 * @param map
	 */
	public void setMap(Map<String, Car> map) {
		for (Map.Entry<String, Car> item : map.entrySet()) {
			System.out.println("mapkey: " + item.getKey());
			System.out.println("mapvalue: " + item.getValue().getColor());
			System.out.println("mapvalue: " + item.getValue().getName());
		}
	}

}


一个封装的JAVABEAN
Car.java
package hessian;
import java.io.Serializable;
/***********************************************************************   
 *   
 *   Car.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   May 21, 2009   3:38:21 PM   
 *   @revision         $Id:     *   
 ***********************************************************************/
public class Car implements Serializable {
	private String color;
	private String length;
	private String name;
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public String getLength() {
		return length;
	}
	public void setLength(String length) {
		this.length = length;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}


配置WEB.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>   
    <servlet-name>HessianServlet</servlet-name>   
    <servlet-class>   
        com.caucho.hessian.server.HessianServlet   
    </servlet-class>   
    <init-param>   
        <param-name>home-class</param-name>   
        <param-value>hessian.BasicService</param-value>   
    </init-param>   
    <init-param>   
        <param-name>home-api</param-name>   
        <param-value>hessian.IBasic</param-value>   
    </init-param>
    </servlet>  
    <servlet-mapping>   
    <servlet-name>HessianServlet</servlet-name>   
    <url-pattern>/hessianServlet</url-pattern>   
	</servlet-mapping>  
</web-app>


最后客户端调用的代码
testClient.java
package hessian;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.caucho.hessian.client.HessianProxyFactory;

/***********************************************************************   
 *   
 *   testClient.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   May 21, 2009   3:44:45 PM   
 *   @revision         $Id:     *   
 ***********************************************************************/
public class testClient {

	/**
	 * @param args
	 */
	public static void main(String[] args)throws Exception {
		// TODO Auto-generated method stub
		String url = "http://127.0.0.1:8081/testHession/hessianServlet";    
        HessianProxyFactory factory = new HessianProxyFactory();    
        IBasic basic = (IBasic) factory.create(IBasic.class, url);    
          Car car   = basic.getCar(); 
       // 客户端调用服务端list 数据
        List<String> list =basic.getList();
        for (String s :list){
        	 System.out.println("list: " + s);    
        }
        System.out.println("Hello: " + basic.hello());    
        System.out.println("Hello: " + car.getName()); 
        // 客户端调用服务端MAP 数据
        Map<String,String> map =basic.getMap();
        for(Map.Entry<String,String> item:map.entrySet()){
        	System.out.println("mapkey: " +item.getKey()); 
        	System.out.println("mapvalue: " +item.getValue());    
        }
        // 客户端向服务端发送数据
        Map<String,Car> map2 = new HashMap<String,Car>();
        if(map2.isEmpty()){
        	Car c = new Car();
        	c.setColor("red");
        	c.setLength("111");
        	c.setName("zhouhui");
        	map2.put("1", c);
        	map2.put("2", c);
        	map2.put("3", c);
        }
        basic.setMap(map2);
	}
}


最后启动TOMCAT,发布好服务后,启动testClient.java 调用服务代码
客户端控制台打出调用服务的输出结果
在从TOMCAT 服务控制台查看客户端口输入数据
好了一切OK 了

注意点:
自定义JAVABEAN 一定要序列化implements Serializable
否则会报错
Caused by: java.io.IOException: Server returned HTTP response code: 500 for URL: http://127.0.0.1:8081/testHession/hessianServlet
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1296)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1290)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:944)
at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:184)
分享到:
评论

相关推荐

    Hessian 发布WebServices

    标题 "Hessian 发布WebServices" 指的是使用Hessian协议来构建和发布Web服务。Hessian是一种二进制的远程过程调用(RPC)协议,它旨在提供高效的、轻量级的服务交互方式,特别是在Java和.NET之间。Hessian在处理Web...

    hessian服务器和客户端

    4. **IIS部署**:IIS(Internet Information Services)是微软提供的一个Web服务器,用于托管Web应用程序。在IIS上部署Hessian服务,需要将服务配置为WCF服务,并确保配置文件(如`web.config`)设置正确。"iis亲测...

    CXF+RMI+HESSIAN

    Apache CXF是一个开源的Web服务框架,它提供了多种方式来构建和部署Web服务,包括基于Java API for RESTful Web Services (JAX-RS)和Java API for XML Web Services (JAX-WS)的标准。CXF不仅支持SOAP、RESTful风格的...

    OSGI+SpringDM+Hessian

    标题 "OSGI+SpringDM+Hessian" 涉及到三个重要的技术概念,它们分别是OSGI(Open Services Gateway Initiative)、SpringDM(Spring Dynamic Modules)和Hessian。这些技术在Java开发领域中都有其独特的应用和价值。...

    Spring应用开发实战Web Service WS

    1. **Spring支持的远程访问技术**:Spring框架支持多种远程访问技术,包括RMI(Remote Method Invocation)、JAX-RPC(Java API for XML-based Remote Procedure Call)、Hessian、Burlap、XFire以及Spring自带的...

    分布式事务控制程序代码.rar

    总之,"分布式事务控制程序代码.rar"提供的工具或框架,结合WebServices、RMI和Hessian,旨在简化分布式环境下的服务调用,并通过QDTC这样的事务协调器保证事务的正确性。对于开发小型服务化应用来说,这样的解决...

    java 远程调用工具

    在Java中,JAX-WS(Java API for XML Web Services)是官方推荐的用于构建和部署WebServices的框架。 RESTful接口,或Representational State Transfer,是一种轻量级的架构风格,常用于构建Web服务。它强调资源的...

    Spring Recipes: A Problem-Solution Approach, Second Edition

    * Spring web: Spring MVC, Spring Web Flow 2, Spring Roo, other dynamic scripting, integration with popular Grails Framework (and Groovy), REST/web services, and more. This book guides you step by ...

    采用(rest ,hession,cxf)几种技术实现webservice

    在Java中,可以通过创建JAX-RS(Java API for RESTful Web Services)接口并使用注解来定义RESTful服务。例如,使用Jersey或Apache CXF库可以轻松地创建和消费RESTful服务。 其次,Hessian是一种二进制Web服务协议...

    simple-parent

    3. **Web Services (SOAP/WSDL)**:这种基于标准的远程调用方式提供了高度的互操作性,支持多种语言和平台。然而,它的开销相对较大,因为涉及XML的解析和WSDL的复杂性。 4. **RESTful APIs**:使用HTTP协议和简单...

    Java远程通讯可选技术及原理

    SOAP允许服务提供商定义复杂的WSDL(Web Services Description Language)来描述服务接口,增强了服务的规范性和互操作性。 EJB(Enterprise JavaBeans)是Java EE的一部分,提供了一种组件模型,用于在服务器端...

    Flex整合spring

    在Flex应用程序中,我们通常利用远程对象(RemoteObject)或Web服务(如Hessian)来调用Spring管理的Bean中的方法和访问其属性,从而为用户提供动态、丰富的用户界面。 首先,让我们深入理解Flex与Spring的集成过程...

    spring开发手册

    10. **Web服务**:Spring Web Services模块提供了创建和消费SOAP服务的能力,同时支持WSDL-first和代码-first的开发方式。 通过深入学习这本《Spring2.x 开发手册》,开发者不仅可以掌握Spring的基本用法,还能理解...

    axis2独立部署简单实例

    通过这个实例,学习者不仅可以了解如何部署和运行一个基本的Axis2服务,还可以深入理解Web服务的工作原理,包括SOAP消息的结构、服务生命周期管理等。此外,对于软件架构师和开发者来说,掌握Axis2的独立部署方式有...

    Manning.Spring.in.Action.4th.Edition.2014.11.epub

    15.3. Exposing remote services with Hessian and Burlap 15.3.1. Exposing bean functionality with Hessian/Burlap 15.3.2. Accessing Hessian/Burlap services 15.4. Using Spring’s HttpInvoker 15.4.1. ...

    Java远程技术.pdf

    - SOAP(Simple Object Access Protocol):通过HTTP协议,使用XML格式交换信息的协议,常用于Web Services中。 - CORBA(Common Object Request Broker Architecture):一种跨语言、跨平台的远程调用标准。 - ...

Global site tag (gtag.js) - Google Analytics