hessian相关
使用ruby版hessian客户端
client.rb
require 'rubygems'require 'hessian2'url = 'http://localhost:3000/test'client = Hessian2::HessianClient.new(url)puts client.addPerson({'name' => 'q', 'age' => 18})puts client.queryPassportUidMap([Hessian2::TypeWrapper.new('Long', 37), Hessian2::TypeWrapper.new('Long', 38)])ruby client.rb
require 'java'require './lib/hessian-4.0.7.jar'require './lib/servlet-api.jar'require './lib/jetty-continuation-8.0.4.v20111024.jar'require './lib/jetty-http-8.0.4.v20111024.jar'require './lib/jetty-io-8.0.4.v20111024.jar'require './lib/jetty-security-8.0.4.v20111024.jar'require './lib/jetty-server-8.0.4.v20111024.jar'require './lib/jetty-servlet-8.0.4.v20111024.jar'require './lib/jetty-servlets-8.0.4.v20111024.jar'require './lib/jetty-util-8.0.4.v20111024.jar'require './lib/example.jar'java_import 'com.caucho.hessian.server.HessianServlet'java_import 'javax.servlet.http.HttpServlet'java_import 'org.eclipse.jetty.server.Server'java_import 'org.eclipse.jetty.servlet.ServletContextHandler'java_import 'org.eclipse.jetty.servlet.ServletHolder'java_import 'example.IPersonService'java_import 'example.Person'def main server = Server.new(3000) context = ServletContextHandler.new(1) server.setHandler(context) servletHolder = ServletHolder.new(PersonService.new) context.addServlet(servletHolder, '/test') server.start server.joinendclass PersonService < HessianServlet include IPersonService def addPerson(person) person.setAge(person.getAge + 1) person end def queryPassportUidMap(uids) m = Hash.new uids.each do |uid| person = Person.new person.setAge(uid) person.setName("lala#{uid}") m[uid] = person end m endendmainjruby hessiand.rb
package example;import java.io.Serializable;public class Person implements Serializable {/** * */private static final long serialVersionUID = 1L; private int age;private String name;public Person(){}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}}package example;import java.util.HashMap;import java.util.List;public interface IPersonService {public Person addPerson(Person person);Map<Long, Person> queryPassportUidMap(List<Long> uidList);}bin$ jar -cf example.jar example/
package example;import java.lang.reflect.InvocationTargetException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import com.caucho.hessian.server.HessianServlet;public class PersonService extends HessianServlet implements IPersonService {/** * */private static final long serialVersionUID = 1L; public Person addPerson(Person person) { person.setAge(person.getAge() + 1); return person; } public Map<Long, Person> queryPassportUidMap(List<Long> uidList) { Map<Long, Person> m = new HashMap<Long, Person>(uidList.size()); for (Long uid : uidList) { Person person = new Person(); person.setAge(11); person.setName("lala" + uid);m.put(uid, person);} return m; } }import org.eclipse.jetty.server.Server;import org.eclipse.jetty.servlet.ServletContextHandler;import org.eclipse.jetty.servlet.ServletHolder;import example.PersonService;public class HessianTest { public static void main(String[] args) throws Exception { Server server = new Server(3000); ServletContextHandler context = new ServletContextHandler( ServletContextHandler.SESSIONS); server.setHandler(context); ServletHolder servletHolder = new ServletHolder(new PersonService()); context.addServlet(servletHolder, "/test"); server.start(); server.join(); } }java -cp .;jetty-server-8.0.4.v20111024.jar;jetty-util-8.0.4.v20111024.jar;servlet-api.jar;jetty-http-8.0.4.v20111024.jar;jetty-io-8.0.4.v20111024.jar;jetty-continuation-8.0.4.v20111024.jar;hessian-4.0.7.jar;jetty-servlet-8.0.4.v20111024.jar;jetty-security-8.0.4.v20111024.jar;example.jar HessianTest
<servlet> <servlet-name>person_service</servlet-name> <servlet-class>example.PersonService</servlet-class></servlet> <servlet-mapping> <protocol type="hessian"/> <servlet-name>person_service</servlet-name> <url-pattern>/person_service</url-pattern></servlet-mapping>
require 'rubygems'require 'java'require 'hessian-4.0.7.jar'require 'servlet-api.jar'require 'example.jar' #jar cf example.jar examplejava_import 'com.caucho.hessian.client.HessianProxyFactory'java_import 'javax.servlet.GenericServlet'java_import 'example.Person'factory = HessianProxyFactory.newclient = factory.create('http://localhost:8080/person_service')person1 = Person.newperson1.setName 'q'person1.setAge 18person2 = Person.newperson2.setName 'j'person2.setAge 14reply = client.addPersons([person1, person2])reply.each do |person| puts "#{person.getName}:#{person.getAge}"endclass HessianWriter #... def write_object(val, hessian_type = nil) return 'N' if val.nil? case val when TypeWrapper if val.hessian_type == 'Long' "L%s" % to_long(val.object) else write_object(val.object, val.hessian_type) end #... end #... def to_long(val) val2 = val.to_s(2) ['0' * (64 - val2.size) << val2].pack("B*") end #...endclass HessianParser #... def from_utf8(len = '*') s = @data.unpack("U#{len}").pack('U*') [ s, s.unpack('C*').pack('U*').length ] end #... end