hessian 試用

test
項目中涉及hessian。

嘗試用一下~~~~


服務器端

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.test.hessian.client</groupId>
	<artifactId>com.test.hessian.client</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>com.test.hessian.client Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.caucho</groupId>
			<artifactId>hessian</artifactId>
			<version>4.0.33</version> 
		</dependency>
	</dependencies>
	<build>
		<finalName>com.test.hessian.client</finalName>
	</build>
</project>

服務接口

public interface HelloWorld {
	public String sayHelloWorld(String username);
	public String sayHelloWorld2(User user);
}


服務實現類

package com.test.hessian.service.impl;

import com.test.hessian.pojo.User;
import com.test.hessian.service.HelloWorld;

public class HelloWorldImpl implements HelloWorld {

	public String sayHelloWorld(String username) {
		System.out.println("this is remote service1.");
		return "Hello World!!"+username;
	}
	public String sayHelloWorld2(User user) {
		System.out.println("this is remote service2.");
		return "Hello World!!"+user.getUsername()+",age:"+user.getAge()+",sex:"+user.getSex();
	}
}

POJO


package com.test.hessian.pojo;

import java.io.Serializable;

public class User implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 2800550962084255316L;
	private String username;
	private String age;
	private String sex;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
	public User(){
		this(null,null,null);
	}
	public User(String username,String age,String sex){
		this.username = username;
		this.age = age;
		this.sex = sex;
	}
}

web.xml配置文件

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<display-name>Archetype Created Web Application</display-name>
	<servlet>
		<servlet-name>helloworld</servlet-name>
		<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
		<init-param>
			<param-name>service-class</param-name>
			<param-value>com.test.hessian.service.impl.HelloWorldImpl</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>helloworld</servlet-name>
		<url-pattern>/helloworld</url-pattern>
	</servlet-mapping>
</web-app>



客戶端

需要服務端相同的接口文件及POJO(路徑必須一致)


測試類

package com.test.hessian.client.service.impl;

import java.net.MalformedURLException;

import com.caucho.hessian.client.HessianProxyFactory;
import com.test.hessian.client.service.HelloWorld;
import com.test.hessian.pojo.User;

public class ClientImpl {
	public static void main(String[] args) {
		String url = "http://localhost:8080/com.test.hessian/helloworld";

		HessianProxyFactory factory = new HessianProxyFactory();
		try {
			HelloWorld a = (HelloWorld) factory.create(HelloWorld.class,url);
			String say1 = a.sayHelloWorld("Mr.S");
			System.out.println(say1);
			User user = new User("Mr.S","15","男");
			String say2 =a.sayHelloWorld2(user);
			System.out.println(say2);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
}


測試結果:

Hello World!!Mr.S
Hello World!!Mr.S,age:15,sex:男


寫DEMO過程中發現了一個問題。

之前寫的接口是

public interface HelloWorld {
	public String sayHelloWorld(String username);
	public String sayHelloWorld(User user);
}

兩個方法名是一樣的,參數不同。

導致客戶端一直在報錯。java.lang.IllegalArgumentException: argument type mismatch

後將方法名區分一下問題解決。


注意:POJO必須實現序列化


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章