Mantis Bugtracker

Viewing Issue Simple Details Jump to Notes ] View Advanced ] Issue History ] Print ]
ID Category Severity Reproducibility Date Submitted Last Update
0003341 [Hessian] major always 02-13-09 11:45 03-01-09 13:47
Reporter everflux View Status public  
Assigned To
Priority normal Resolution open  
Status new   Product Version 3.2.1
Summary 0003341: hessian 3.2.1 does not work with phphessian while hessian 3.1.6 does
Description Using phphessian to create a hessian service in php and calling from java (groovy) it does not work using hessian-3.2.1.jar
If using hessian-3.1.6.jar the very same application works.
Additional Information using phphessian this is the sample service

include_once 'HessianPHP/dist/HessianService.php';
$wrapper = &new HessianService();
//enable method browsing with http get
$wrapper->registerObject(new Demo());

class Demo
  function run($n1,$n2) {
      $result = "";
      $result .= "hello $n1 $n2";
      return $result;

  function arrayResult($n1, $n2)
      $result = array();
      $result[0] = $n1;
      $result[1] = strlen($n1);
      $result[2] = $n2;
      $result[3] = strlen($n1);

      return $result;

  function objectResult($n1, $n2)
      $result->nameOne = $n1;
      $result->nameTwo = $n2;

      return $result;



this is the call in groovy
import com.caucho.hessian.client.HessianProxyFactory;

def n1='tkruse'
def n2='muenster'

url ="http://localhost/~tkruse/hessianRules/server.php" [^]

HessianProxyFactory factory = new HessianProxyFactory();
service = factory.create(DemoInterface.class, url);

println (, n2))

service.arrayResult(n1, n2).each{println "entry: " + it}

When having the debug mode on, it looks like there is something swallowing the first byte containing "r", so hessian does not recognize the response correctly:

Exception in thread "main" com.caucho.hessian.client.HessianRuntimeException: expected hessian reply at 0x1 ()
at com.caucho.hessian.client.HessianProxy.invoke(
        at $ Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Having a look on a tcpdump everything looks correctly. Since changeing just the hessian jar solves this issue there seems something changed between them.
Attached Files

- Relationships

- Notes
Peter Dettman
02-27-09 03:56

I believe the problem here is that the client is (implicitly) asking for a Hessian 2.0 reply, and the 2.0 implementation is still 'evolving' (still a draft spec?).

Try calling factory.setHessian2Reply(false).
03-01-09 13:47

I think your hint got me into the right direction, but I still believe it's not the PHP server, but the java client implementation.
I tried hessian 3.2.0, that works too.
Looking through the sources is confusing, the hessian proxy factory can return a hessianInput, hessian1Input and hessian2Input - but in fact getHessianInput and getHessian2Input both return a Hessian2Input. (The getHessian1Input method seems to be never called, too)
I believe starting a reply with "H" signals to use Hessian 2 protocol, while "r" should indicate a standard Hessian (1) reply.
I could not figure out what happens exactly, I think it is about reading a byte too much (or too less) from the input stream.
If I change the HessianProxy line 239 to read
in = _factory.getHessian1Input(is);
I get a different error, too:
Caused by: expected string at 0x0
instead of the
Caused by: expected hessian reply at 0x1

- Issue History
Date Modified Username Field Change
02-13-09 11:45 everflux New Issue
02-27-09 03:56 Peter Dettman Note Added: 0003852
02-27-09 03:56 Peter Dettman Issue Monitored: Peter Dettman
03-01-09 13:47 everflux Note Added: 0003854
08-28-09 09:54 Peter Dettman Issue End Monitor: Peter Dettman

Mantis 1.0.0rc3[^]
Copyright © 2000 - 2005 Mantis Group
33 total queries executed.
27 unique queries executed.
Powered by Mantis Bugtracker