package com.caucho.hessian.test;

import java.io.IOException;

/**
 * The Test service is a quick sanity check service.  Developers of a
 * new Hessian implementation can use this service as an initial test.
 *
 * http://hessian.caucho.com/test/test2
 */
public interface TestHessian2 {
  /**
   * trivial null method call
   *
   * <code><pre>
   * H x02 x00
   * C
   *   x0a methodNull
   *   x90
   * </pre></code>
   *
   * <code><pre>
   * R N
   * </pre></code>
   */
  public void methodNull();

  //
  // result values
  //

  /**
   * Result of null
   *
   * <code><pre>
   * R N
   * </pre></code>
   */
  public void replyNull();

  //
  // boolean
  //

  /**
   * Boolean true
   *
   * <code><pre>
   * T
   * </pre></code>
   */
  public Object replyTrue();

  /**
   * Boolean false
   *
   * <code><pre>
   * F
   * </pre></code>
   */
  public Object replyFalse();

  //
  // integers
  //

  /**
   * Result of integer 0
   *
   * <code><pre>
   * R x90
   * </pre></code>
   */
  public int replyInt_0();

  /**
   * Result of integer 1
   *
   * <code><pre>
   * R x91
   * </pre></code>
   */
  public int replyInt_1();

  /**
   * Result of integer 47
   *
   * <code><pre>
   * R xbf
   * </pre></code>
   */
  public int replyInt_47();

  /**
   * Result of integer -16
   *
   * <code><pre>
   * R x80
   * </pre></code>
   */
  public int replyInt_m16();

  // two byte integers

  /**
   * Result of integer 0x30
   *
   * <code><pre>
   * R xc8 x30
   * </pre></code>
   */
  public int replyInt_0x30();

  /**
   * Result of integer x7ff
   *
   * <code><pre>
   * R xcf xff
   * </pre></code>
   */
  public int replyInt_0x7ff();

  /**
   * Result of integer -17
   *
   * <code><pre>
   * R xc7 xef
   * </pre></code>
   */
  public int replyInt_m17();

  /**
   * Result of integer -0x800
   *
   * <code><pre>
   * R xc0 x00
   * </pre></code>
   */
  public int replyInt_m0x800();

  /**
   * Result of integer 0x800
   *
   * <code><pre>
   * R xd4 x08 x00
   * </pre></code>
   */
  public int replyInt_0x800();

  /**
   * Result of integer 0x3ffff
   *
   * <code><pre>
   * R xd7 xff xff
   * </pre></code>
   */
  public int replyInt_0x3ffff();

  /**
   * Result of integer -0x801
   *
   * <code><pre>
   * R xd3 xf8 x00
   * </pre></code>
   */
  public int replyInt_m0x801();

  /**
   * Result of integer m0x40000
   *
   * <code><pre>
   * R xd0 x00 x00
   * </pre></code>
   */
  public int replyInt_m0x40000();

  // 5 byte integers

  /**
   * Result of integer 0x40000
   *
   * <code><pre>
   * R I x00 x04 x00 x00
   * </pre></code>
   */
  public int replyInt_0x40000();

  /**
   * Result of integer 0x7fffffff
   *
   * <code><pre>
   * R I x7f xff xff xff
   * </pre></code>
   */
  public int replyInt_0x7fffffff();

  /**
   * Result of integer m0x40001
   *
   * <code><pre>
   * R I xff xf3 xff xf
   * </pre></code>
   */
  public int replyInt_m0x40001();

  /**
   * Result of integer -0x80000000
   *
   * <code><pre>
   * R I x80 x00 x00 x00
   * </pre></code>
   */
  public int replyInt_m0x80000000();

  //
  // longs
  //

  /**
   * Result of long 0
   *
   * <code><pre>
   * R xe0
   * </pre></code>
   */
  public long replyLong_0();

  /**
   * Result of long 1
   *
   * <code><pre>
   * R xe1
   * </pre></code>
   */
  public long replyLong_1();

  /**
   * Result of long 15
   *
   * <code><pre>
   * R xef
   * </pre></code>
   */
  public long replyLong_15();

  /**
   * Result of long -8
   *
   * <code><pre>
   * R xd8
   * </pre></code>
   */
  public long replyLong_m8();

  // two byte longs

  /**
   * Result of long 0x10
   *
   * <code><pre>
   * R xf8 x10
   * </pre></code>
   */
  public long replyLong_0x10();

  /**
   * Result of long x7ff
   *
   * <code><pre>
   * R xff xff
   * </pre></code>
   */
  public long replyLong_0x7ff();

  /**
   * Result of long -9
   *
   * <code><pre>
   * R xf7 xf7
   * </pre></code>
   */
  public long replyLong_m9();

  /**
   * Result of long -0x800
   *
   * <code><pre>
   * R xf0 x00
   * </pre></code>
   */
  public long replyLong_m0x800();

  /**
   * Result of long 0x800
   *
   * <code><pre>
   * R x3c x08 x00
   * </pre></code>
   */
  public long replyLong_0x800();

  /**
   * Result of long 0x3ffff
   *
   * <code><pre>
   * R x3f xff xff
   * </pre></code>
   */
  public long replyLong_0x3ffff();

  /**
   * Result of long -0x801
   *
   * <code><pre>
   * R x3b xf7 xff
   * </pre></code>
   */
  public long replyLong_m0x801();

  /**
   * Result of long m0x40000
   *
   * <code><pre>
   * R x38 x00 x00
   * </pre></code>
   */
  public long replyLong_m0x40000();

  // 5 byte longs

  /**
   * Result of long 0x40000
   *
   * <code><pre>
   * R x59 x00 x04 x00 x00
   * </pre></code>
   */
  public long replyLong_0x40000();

  /**
   * Result of long 0x7fffffff
   *
   * <code><pre>
   * R x59 x7f xff xff xff
   * </pre></code>
   */
  public long replyLong_0x7fffffff();

  /**
   * Result of long m0x40001
   *
   * <code><pre>
   * R x59 xff xf3 xff xf
   * </pre></code>
   */
  public long replyLong_m0x40001();

  /**
   * Result of long -0x80000000
   *
   * <code><pre>
   * R x59 x80 x00 x00 x00
   * </pre></code>
   */
  public long replyLong_m0x80000000();

  /**
   * Result of long 0x80000000
   *
   * <code><pre>
   * R L x00 x00 x00 x00 x80 x00 x00 x00
   * </pre></code>
   */
  public long replyLong_0x80000000();

  /**
   * Result of long -0x80000001
   *
   * <code><pre>
   * R L xff xff xff xff x7f xff xff xff
   * </pre></code>
   */
  public long replyLong_m0x80000001();

  //
  // doubles
  //

  /**
   * Result of double 0.0
   *
   * <code><pre>
   * R x5b
   * </pre></code>
   */
  public double replyDouble_0_0();

  /**
   * Result of double 1.0
   *
   * <code><pre>
   * R x5c
   * </pre></code>
   */
  public double replyDouble_1_0();

  /**
   * Result of double 2.0
   *
   * <code><pre>
   * R x5d x02
   * </pre></code>
   */
  public double replyDouble_2_0();

  /**
   * Result of double 127.0
   *
   * <code><pre>
   * R x5d x7f
   * </pre></code>
   */
  public double replyDouble_127_0();

  /**
   * Result of double -128.0
   *
   * <code><pre>
   * R x5d x80
   * </pre></code>
   */
  public double replyDouble_m128_0();

  /**
   * Result of double 128.0
   *
   * <code><pre>
   * R x5e x00 x80
   * </pre></code>
   */
  public double replyDouble_128_0();

  /**
   * Result of double -129.0
   *
   * <code><pre>
   * R x5e xff x7f
   * </pre></code>
   */
  public double replyDouble_m129_0();

  /**
   * Result of double 32767.0
   *
   * <code><pre>
   * R x5e x7f xff
   * </pre></code>
   */
  public double replyDouble_32767_0();

  /**
   * Result of double -32768.0
   *
   * <code><pre>
   * R x5e x80 x80
   * </pre></code>
   */
  public double replyDouble_m32768_0();

  /**
   * Result of double 0.001
   *
   * <code><pre>
   * R x5f x00 x00 x00 x01
   * </pre></code>
   */
  public double replyDouble_0_001();

  /**
   * Result of double -0.001
   *
   * <code><pre>
   * R x5f xff xff xff xff
   * </pre></code>
   */
  public double replyDouble_m0_001();

  /**
   * Result of double 65.536
   *
   * <code><pre>
   * R x5f x00 x01 x00 x00
   * </pre></code>
   */
  public double replyDouble_65_536();

  /**
   * Result of double 3.14159
   *
   * <code><pre>
   * D x40 x09 x21 xf9 xf0 x1b x86 x6e
   * </pre></code>
   */
  public double replyDouble_3_14159();

  //
  // date
  //

  /**
   * date 0 (01-01-1970 00:00 GMT)
   *
   * <code><pre>
   * x4a x00 x00 x00 x00
   * </pre></code>
   */
  public Object replyDate_0();

  /**
   * Date by millisecond (05-08-1998 07:51:31.000 GMT)
   *
   * <code><pre>
   * x4a x00 x00 x00 xd0 x4b x92 x84 xb8
   * </pre></code>
   */
  public Object replyDate_1();

  /**
   * Date by minute (05-08-1998 07:51:00.000 GMT)
   *
   * <code><pre>
   * x4b x00 xe3 x83 x8f
   * </pre></code>
   */
  public Object replyDate_2();

  //
  // string length
  //

  /**
   * A zero-length string
   *
   * <code><pre>
   * x00
   * </pre></code>
   */
  public String replyString_0();

  /**
   * A null string
   *
   * <code><pre>
   * N
   * </pre></code>
   */
  public String replyString_null();

  /**
   * A one-length string
   *
   * <code><pre>
   * x01 a
   * </pre></code>
   */
  public String replyString_1();

  /**
   * A 31-length string
   *
   * <code><pre>
   * x0f 0123456789012345678901234567890
   * </pre></code>
   */
  public String replyString_31();

  /**
   * A 32-length string
   *
   * <code><pre>
   * x30 x02 01234567890123456789012345678901
   * </pre></code>
   */
  public String replyString_32();

  /**
   * A 1023-length string
   *
   * <code><pre>
   * x33 xff 000 01234567890123456789012345678901...
   * </pre></code>
   */
  public String replyString_1023();

  /**
   * A 1024-length string
   *
   * <code><pre>
   * S x04 x00 000 01234567890123456789012345678901...
   * </pre></code>
   */
  public String replyString_1024();

  /**
   * A 65536-length string
   *
   * <code><pre>
   * R x80 x00 000 ...
   * S x04 x00 000 01234567890123456789012345678901...
   * </pre></code>
   */
  public String replyString_65536();

  //
  // binary length
  //

  /**
   * A zero-length binary
   *
   * <code><pre>
   * x20
   * </pre></code>
   */
  public Object replyBinary_0();

  /**
   * A null string
   *
   * <code><pre>
   * N
   * </pre></code>
   */
  public Object replyBinary_null();

  /**
   * A one-length string
   *
   * <code><pre>
   * x01 0
   * </pre></code>
   */
  public Object replyBinary_1();

  /**
   * A 15-length binary
   *
   * <code><pre>
   * x2f 0123456789012345
   * </pre></code>
   */
  public Object replyBinary_15();

  /**
   * A 16-length binary
   *
   * <code><pre>
   * x34 x10 01234567890123456789012345678901
   * </pre></code>
   */
  public Object replyBinary_16();

  /**
   * A 1023-length binary
   *
   * <code><pre>
   * x37 xff 000 01234567890123456789012345678901...
   * </pre></code>
   */
  public Object replyBinary_1023();

  /**
   * A 1024-length binary
   *
   * <code><pre>
   * B x04 x00 000 01234567890123456789012345678901...
   * </pre></code>
   */
  public Object replyBinary_1024();

  /**
   * A 65536-length binary
   *
   * <code><pre>
   * A x80 x00 000 ...
   * B x04 x00 000 01234567890123456789012345678901...
   * </pre></code>
   */
  public Object replyBinary_65536();

  //
  // lists
  //

  /**
   * Zero-length untyped list
   *
   * <code><pre>
   * x78
   * </pre></code>
   */
  public Object replyUntypedFixedList_0();

  /**
   * 1-length untyped list
   *
   * <code><pre>
   * x79 x01 1
   * </pre></code>
   */
  public Object replyUntypedFixedList_1();

  /**
   * 7-length untyped list
   *
   * <code><pre>
   * x7f x01 1 x01 2 x01 3 x01 4 x01 5 x01 6 x01 7
   * </pre></code>
   */
  public Object replyUntypedFixedList_7();

  /**
   * 8-length untyped list
   *
   * <code><pre>
   * X x98 x01 1 x01 2 x01 3 x01 4 x01 5 x01 6 x01 7 x01 8
   * </pre></code>
   */
  public Object replyUntypedFixedList_8();

  /**
   * Zero-length typed list (String array)
   *
   * <code><pre>
   * x70 x07 [string
   * </pre></code>
   */
  public Object replyTypedFixedList_0();

  /**
   * 1-length typed list (String array)
   *
   * <code><pre>
   * x71 x07 [string x01 1
   * </pre></code>
   */
  public Object replyTypedFixedList_1();

  /**
   * 7-length typed list (String array)
   *
   * <code><pre>
   * x77 x07 [string x01 1 x01 2 x01 3 x01 4 x01 5 x01 6 x01 7
   * </pre></code>
   */
  public Object replyTypedFixedList_7();

  /**
   * 8-length typed list (String array)
   *
   * <code><pre>
   * V x07 [stringx98 x01 1 x01 2 x01 3 x01 4 x01 5 x01 6 x01 7 x01 8
   * </pre></code>
   */
  public Object replyTypedFixedList_8();

  //
  // untyped maps
  //

  /**
   * zero-length untyped map
   *
   * <code><pre>
   * H Z
   * </pre></code>
   */
  public Object replyUntypedMap_0();

  /**
   * untyped map with string key
   *
   * <code><pre>
   * H x01 a x90 Z
   * </pre></code>
   */
  public Object replyUntypedMap_1();

  /**
   * untyped map with int key
   *
   * <code><pre>
   * H x90 x01 a x91 x01 b Z
   * </pre></code>
   */
  public Object replyUntypedMap_2();

  /**
   * untyped map with list key
   *
   * <code><pre>
   * H x71 x01 a x90 Z
   * </pre></code>
   */
  public Object replyUntypedMap_3();

  //
  // typed maps
  //

  /**
   * zero-length typed map
   *
   * <code><pre>
   * M x13 java.lang.Hashtable Z
   * </pre></code>
   */
  public Object replyTypedMap_0();

  /**
   * untyped map with string key
   *
   * <code><pre>
   * M x13 java.lang.Hashtable x01 a x90 Z
   * </pre></code>
   */
  public Object replyTypedMap_1();

  /**
   * typed map with int key
   *
   * <code><pre>
   * M x13 java.lang.Hashtable x90 x01 a x91 x01 b Z
   * </pre></code>
   */
  public Object replyTypedMap_2();

  /**
   * typed map with list key
   *
   * <code><pre>
   * M x13 java.lang.Hashtable x71 x01 a x90 Z
   * </pre></code>
   */
  public Object replyTypedMap_3();

  //
  // objects
  //

  /**
   * Returns a single object
   *
   * <code><pre>
   * C x1a com.caucho.hessian.test.A0 x90 x60
   * </pre></code>
   */
  public Object replyObject_0();
  
  /**
   * Returns 16 object types
   *
   * <code><pre>
   * X xa0
   *  C x1a com.caucho.hessian.test.A0 x90 x60
   *  C x1a com.caucho.hessian.test.A1 x90 x61
   *  C x1a com.caucho.hessian.test.A2 x90 x62
   *  C x1a com.caucho.hessian.test.A3 x90 x63
   *  C x1a com.caucho.hessian.test.A4 x90 x64
   *  C x1a com.caucho.hessian.test.A5 x90 x65
   *  C x1a com.caucho.hessian.test.A6 x90 x66
   *  C x1a com.caucho.hessian.test.A7 x90 x67
   *  C x1a com.caucho.hessian.test.A8 x90 x68
   *  C x1a com.caucho.hessian.test.A9 x90 x69
   *  C x1b com.caucho.hessian.test.A10 x90 x6a
   *  C x1b com.caucho.hessian.test.A11 x90 x6b
   *  C x1b com.caucho.hessian.test.A12 x90 x6c
   *  C x1b com.caucho.hessian.test.A13 x90 x6d
   *  C x1b com.caucho.hessian.test.A14 x90 x6e
   *  C x1b com.caucho.hessian.test.A15 x90 x6f
   *  C x1b com.caucho.hessian.test.A16 x90 O xa0
   */
  public Object replyObject_16();

  /**
   * Simple object with one field
   *
   * <code><pre>
   * C x22 com.caucho.hessian.test.TestObject x91 x06 _value x60 x90
   * </pre></code>
   */
  public Object replyObject_1();

  /**
   * Simple two objects with one field
   *
   * <code><pre>
   * x7a
   *   C x22 com.caucho.hessian.test.TestObject x91 x06 _value
   *   x60 x90
   *   x60 x91
   * </pre></code>
   */
  public Object replyObject_2();

  /**
   * Simple repeated object
   *
   * <code><pre>
   * x7a
   *   C x22 com.caucho.hessian.test.TestObject x91 x06 _value
   *   x60 x90
   *   Q x91
   * </pre></code>
   */
  public Object replyObject_2a();

  /**
   * Two object with equals
   *
   * <code><pre>
   * x7a
   *   C x22 com.caucho.hessian.test.TestObject x91 x06 _value
   *   x60 x90
   *   x60 x90
   * </pre></code>
   */
  public Object replyObject_2b();

  /**
   * Circular object
   *
   * <code><pre>
   * C x20 com.caucho.hessian.test.TestCons x91 x06 _first x05 _rest
   *   x60 x01 a Q \x90x
   * </pre></code>
   */
  public Object replyObject_3();

  //
  // arguments
  //

  /**
   * Null
   *
   * <code><pre>
   * N
   * </pre></code>
   */
  public Object argNull(Object v);

  //
  // boolean
  //

  /**
   * Boolean true
   *
   * <code><pre>
   * T
   * </pre></code>
   */
  public Object argTrue(Object v);

  /**
   * Boolean false
   *
   * <code><pre>
   * F
   * </pre></code>
   */
  public Object argFalse(Object v);

  //
  // integer
  //
  
  /**
   * Integer 0
   *
   * <code><pre>
   * x90
   * </pre></code>
   */
  public Object argInt_0(Object v);

  /**
   * Integer 1
   *
   * <code><pre>
   * x91
   * </pre></code>
   */
  public Object argInt_1(Object v);

  /**
   * integer 47
   *
   * <code><pre>
   * xbf
   * </pre></code>
   */
  public Object argInt_47(Object v);

  /**
   * Result of integer -16
   *
   * <code><pre>
   * R x80
   * </pre></code>
   */
  public Object argInt_m16(Object v);

  // two byte integers

  /**
   * Integer 0x30
   *
   * <code><pre>
   * xc8 x30
   * </pre></code>
   */
  public Object argInt_0x30(Object v);

  /**
   * Result of integer x7ff
   *
   * <code><pre>
   * xcf xff
   * </pre></code>
   */
  public Object argInt_0x7ff(Object v);

  /**
   * integer -17
   *
   * <code><pre>
   * xc7 xef
   * </pre></code>
   */
  public Object argInt_m17(Object v);

  /**
   * Integer -0x800
   *
   * <code><pre>
   * xc0 x00
   * </pre></code>
   */
  public Object argInt_m0x800(Object v);

  /**
   * Integer 0x800
   *
   * <code><pre>
   * xd4 x08 x00
   * </pre></code>
   */
  public Object argInt_0x800(Object v);

  /**
   * Integer 0x3ffff
   *
   * <code><pre>
   * xd7 xff xff
   * </pre></code>
   */
  public Object argInt_0x3ffff(Object v);

  /**
   * Integer -0x801
   *
   * <code><pre>
   * xd3 xf8 x00
   * </pre></code>
   */
  public Object argInt_m0x801(Object v);

  /**
   * Integer m0x40000
   *
   * <code><pre>
   * xd0 x00 x00
   * </pre></code>
   */
  public Object argInt_m0x40000(Object v);

  // 5 byte integers

  /**
   * integer 0x40000
   *
   * <code><pre>
   * I x00 x04 x00 x00
   * </pre></code>
   */
  public Object argInt_0x40000(Object v);

  /**
   * Integer 0x7fffffff
   *
   * <code><pre>
   * I x7f xff xff xff
   * </pre></code>
   */
  public Object argInt_0x7fffffff(Object v);

  /**
   * Integer m0x40001
   *
   * <code><pre>
   * I xff xfb xff xff
   * </pre></code>
   */
  public Object argInt_m0x40001(Object v);

  /**
   * Result of integer -0x80000000
   *
   * <code><pre>
   * I x80 x00 x00 x00
   * </pre></code>
   */
  public Object argInt_m0x80000000(Object v);

  //
  // longs
  //

  /**
   * long 0
   *
   * <code><pre>
   * xe0
   * </pre></code>
   */
  public Object argLong_0(Object v);

  /**
   * long 1
   *
   * <code><pre>
   * xe1
   * </pre></code>
   */
  public Object argLong_1(Object v);

  /**
   * long 15
   *
   * <code><pre>
   * xef
   * </pre></code>
   */
  public Object argLong_15(Object v);

  /**
   * long -8
   *
   * <code><pre>
   * xd8
   * </pre></code>
   */
  public Object argLong_m8(Object v);

  // two byte longs

  /**
   * long 0x10
   *
   * <code><pre>
   * xf8 x10
   * </pre></code>
   */
  public Object argLong_0x10(Object v);

  /**
   * long x7ff
   *
   * <code><pre>
   * xff xff
   * </pre></code>
   */
  public Object argLong_0x7ff(Object v);

  /**
   * long -9
   *
   * <code><pre>
   * xf7 xf7
   * </pre></code>
   */
  public Object argLong_m9(Object v);

  /**
   * long -0x800
   *
   * <code><pre>
   * xf0 x00
   * </pre></code>
   */
  public Object argLong_m0x800(Object v);

  /**
   * long 0x800
   *
   * <code><pre>
   * x3c x08 x00
   * </pre></code>
   */
  public Object argLong_0x800(Object v);

  /**
   * long 0x3ffff
   *
   * <code><pre>
   * x3f xff xff
   * </pre></code>
   */
  public Object argLong_0x3ffff(Object v);

  /**
   * long -0x801
   *
   * <code><pre>
   * x3b xf7 xff
   * </pre></code>
   */
  public Object argLong_m0x801(Object v);

  /**
   * long m0x40000
   *
   * <code><pre>
   * x38 x00 x00
   * </pre></code>
   */
  public Object argLong_m0x40000(Object v);

  // 5 byte longs

  /**
   * long 0x40000
   *
   * <code><pre>
   * x59 x00 x04 x00 x00
   * </pre></code>
   */
  public Object argLong_0x40000(Object v);

  /**
   * long 0x7fffffff
   *
   * <code><pre>
   * x59 x7f xff xff xff
   * </pre></code>
   */
  public Object argLong_0x7fffffff(Object v);

  /**
   * long m0x40001
   *
   * <code><pre>
   * x59 xff xfb xff xf
   * </pre></code>
   */
  public Object argLong_m0x40001(Object v);

  /**
   * long -0x80000000
   *
   * <code><pre>
   * x59 x80 x00 x00 x00
   * </pre></code>
   */
  public Object argLong_m0x80000000(Object v);

  /**
   * Result of long 0x80000000
   *
   * <code><pre>
   * L x00 x00 x00 x00 x80 x00 x00 x00
   * </pre></code>
   */
  public Object argLong_0x80000000(Object v);

  /**
   * Result of long -0x80000001
   *
   * <code><pre>
   * L xff xff xff xff x7f xff xff xff
   * </pre></code>
   */
  public Object argLong_m0x80000001(Object v);

  //
  // doubles
  //

  /**
   * double 0.0
   *
   * <code><pre>
   * x5b
   * </pre></code>
   */
  public Object argDouble_0_0(Object v);

  /**
   * double 1.0
   *
   * <code><pre>
   * x5c
   * </pre></code>
   */
  public Object argDouble_1_0(Object v);

  /**
   * double 2.0
   *
   * <code><pre>
   * x5d x02
   * </pre></code>
   */
  public Object argDouble_2_0(Object v);

  /**
   * double 127.0
   *
   * <code><pre>
   * x5d x7f
   * </pre></code>
   */
  public Object argDouble_127_0(Object v);

  /**
   * double -128.0
   *
   * <code><pre>
   * x5d x80
   * </pre></code>
   */
  public Object argDouble_m128_0(Object v);

  /**
   * double 128.0
   *
   * <code><pre>
   * x5e x00 x80
   * </pre></code>
   */
  public Object argDouble_128_0(Object v);

  /**
   * double -129.0
   *
   * <code><pre>
   * x5e xff x7f
   * </pre></code>
   */
  public Object argDouble_m129_0(Object v);

  /**
   * double 32767.0
   *
   * <code><pre>
   * x5e x7f xff
   * </pre></code>
   */
  public Object argDouble_32767_0(Object v);

  /**
   * Double -32768.0
   *
   * <code><pre>
   * x5e x80 x80
   * </pre></code>
   */
  public Object argDouble_m32768_0(Object v);

  /**
   * double 0.001
   *
   * <code><pre>
   * x5f x00 x00 x00 x01
   * </pre></code>
   */
  public Object argDouble_0_001(Object v);

  /**
   * double -0.001
   *
   * <code><pre>
   * x5f xff xff xff xff
   * </pre></code>
   */
  public Object argDouble_m0_001(Object v);

  /**
   * double 65.536
   *
   * <code><pre>
   * x5f x00 x01 x00 x00
   * </pre></code>
   */
  public Object argDouble_65_536(Object v);

  /**
   * Result of double 3.14159
   *
   * <code><pre>
   * D x40 x09 x21 xf9 xf0 x1b x86 x6e
   * </pre></code>
   */
  public Object argDouble_3_14159(Object v);

  //
  // date
  //

  /**
   * date 0 (01-01-1970 00:00 GMT)
   *
   * <code><pre>
   * x4a x00 x00 x00 x00
   * </pre></code>
   */
  public Object argDate_0(Object v);

  /**
   * Date by millisecond (05-08-1998 07:51 GMT)
   *
   * <code><pre>
   * x4a x00 x00 x00 xd0 x4b x92 x84 xb8
   * </pre></code>
   */
  public Object argDate_1(Object v);

  /**
   * Date by minute (05-08-1998 07:51 GMT)
   *
   * <code><pre>
   * x4b x00 xe3 x83 x8f
   * </pre></code>
   */
  public Object argDate_2(Object v);

  //
  // string length
  //

  /**
   * A zero-length string
   *
   * <code><pre>
   * x00
   * </pre></code>
   */
  public Object argString_0(Object v);

  /**
   * A one-length string
   *
   * <code><pre>
   * x01 a
   * </pre></code>
   */
  public Object argString_1(Object v);

  /**
   * A 31-length string
   *
   * <code><pre>
   * x0f 0123456789012345678901234567890
   * </pre></code>
   */
  public Object argString_31(Object v);

  /**
   * A 32-length string
   *
   * <code><pre>
   * x30 x02 01234567890123456789012345678901
   * </pre></code>
   */
  public Object argString_32(Object v);

  /**
   * A 1023-length string
   *
   * <code><pre>
   * x33 xff 000 01234567890123456789012345678901...
   * </pre></code>
   */
  public Object argString_1023(Object v);

  /**
   * A 1024-length string
   *
   * <code><pre>
   * S x04 x00 000 01234567890123456789012345678901...
   * </pre></code>
   */
  public Object argString_1024(Object v);

  /**
   * A 65536-length string
   *
   * <code><pre>
   * R x80 x00 000 ...
   * S x04 x00 000 01234567890123456789012345678901...
   * </pre></code>
   */
  public Object argString_65536(Object v);

  //
  // binary length
  //

  /**
   * A zero-length binary
   *
   * <code><pre>
   * x20
   * </pre></code>
   */
  public Object argBinary_0(Object v);

  /**
   * A one-length string
   *
   * <code><pre>
   * x21 0
   * </pre></code>
   */
  public Object argBinary_1(Object v);

  /**
   * A 15-length binary
   *
   * <code><pre>
   * x2f 0123456789012345
   * </pre></code>
   */
  public Object argBinary_15(Object v);

  /**
   * A 16-length binary
   *
   * <code><pre>
   * x34 x10 01234567890123456789012345678901
   * </pre></code>
   */
  public Object argBinary_16(Object v);

  /**
   * A 1023-length binary
   *
   * <code><pre>
   * x37 xff 000 01234567890123456789012345678901...
   * </pre></code>
   */
  public Object argBinary_1023(Object v);

  /**
   * A 1024-length binary
   *
   * <code><pre>
   * B x04 x00 000 01234567890123456789012345678901...
   * </pre></code>
   */
  public Object argBinary_1024(Object v);

  /**
   * A 65536-length binary
   *
   * <code><pre>
   * A x80 x00 000 ...
   * B x04 x00 000 01234567890123456789012345678901...
   * </pre></code>
   */
  public Object argBinary_65536(Object v);

  //
  // lists
  //

  /**
   * Zero-length untyped list
   *
   * <code><pre>
   * x78
   * </pre></code>
   */
  public Object argUntypedFixedList_0(Object v);

  /**
   * 1-length untyped list
   *
   * <code><pre>
   * x79 x01 1
   * </pre></code>
   */
  public Object argUntypedFixedList_1(Object v);

  /**
   * 7-length untyped list
   *
   * <code><pre>
   * x7f x01 1 x01 2 x01 3 x01 4 x01 5 x01 6 x01 7
   * </pre></code>
   */
  public Object argUntypedFixedList_7(Object v);

  /**
   * 8-length untyped list
   *
   * <code><pre>
   * X x98 x01 1 x01 2 x01 3 x01 4 x01 5 x01 6 x01 7 x01 8
   * </pre></code>
   */
  public Object argUntypedFixedList_8(Object v);

  /**
   * Zero-length typed list (String array)
   *
   * <code><pre>
   * x70 x07 [string
   * </pre></code>
   */
  public Object argTypedFixedList_0(Object v);

  /**
   * 1-length typed list (String array)
   *
   * <code><pre>
   * x71 x07 [string x01 1
   * </pre></code>
   */
  public Object argTypedFixedList_1(Object v);

  /**
   * 7-length typed list (String array)
   *
   * <code><pre>
   * x77 x07 [string x01 1 x01 2 x01 3 x01 4 x01 5 x01 6 x01 7
   * </pre></code>
   */
  public Object argTypedFixedList_7(Object v);

  /**
   * 8-length typed list (String array)
   *
   * <code><pre>
   * V x07 [stringx98 x01 1 x01 2 x01 3 x01 4 x01 5 x01 6 x01 7 x01 8
   * </pre></code>
   */
  public Object argTypedFixedList_8(Object v);

  //
  // untyped maps
  //

  /**
   * zero-length untyped map
   *
   * <code><pre>
   * H Z
   * </pre></code>
   */
  public Object argUntypedMap_0(Object v);

  /**
   * untyped map with string key
   *
   * <code><pre>
   * H x01 a x90 Z
   * </pre></code>
   */
  public Object argUntypedMap_1(Object v);

  /**
   * untyped map with int key
   *
   * <code><pre>
   * H x90 x01 a x91 x01 b Z
   * </pre></code>
   */
  public Object argUntypedMap_2(Object v);

  /**
   * untyped map with list key
   *
   * <code><pre>
   * H x71 x01 a x90 Z
   * </pre></code>
   */
  public Object argUntypedMap_3(Object v);

  //
  // typed maps
  //

  /**
   * zero-length typed map
   *
   * <code><pre>
   * M x13 java.lang.Hashtable Z
   * </pre></code>
   */
  public Object argTypedMap_0(Object v);

  /**
   * untyped map with string key
   *
   * <code><pre>
   * M x13 java.lang.Hashtable x01 a x90 Z
   * </pre></code>
   */
  public Object argTypedMap_1(Object v);

  /**
   * typed map with int key
   *
   * <code><pre>
   * M x13 java.lang.Hashtable x90 x01 a x91 x01 b Z
   * </pre></code>
   */
  public Object argTypedMap_2(Object v);

  /**
   * typed map with list key
   *
   * <code><pre>
   * M x13 java.lang.Hashtable x79 x01 a x90 Z
   * </pre></code>
   */
  public Object argTypedMap_3(Object v);

  //
  // objects
  //

  /**
   * Returns a single object
   *
   * <code><pre>
   * C x1a com.caucho.hessian.test.A0 x90 x60
   * </pre></code>
   */
  public Object argObject_0(Object v);
  
  /**
   * Returns 16 object types
   *
   * <code><pre>
   * X xa0
   *  C x1a com.caucho.hessian.test.A0 x90 x60
   *  C x1a com.caucho.hessian.test.A1 x90 x61
   *  C x1a com.caucho.hessian.test.A2 x90 x62
   *  C x1a com.caucho.hessian.test.A3 x90 x63
   *  C x1a com.caucho.hessian.test.A4 x90 x64
   *  C x1a com.caucho.hessian.test.A5 x90 x65
   *  C x1a com.caucho.hessian.test.A6 x90 x66
   *  C x1a com.caucho.hessian.test.A7 x90 x67
   *  C x1a com.caucho.hessian.test.A8 x90 x68
   *  C x1a com.caucho.hessian.test.A9 x90 x69
   *  C x1b com.caucho.hessian.test.A10 x90 x6a
   *  C x1b com.caucho.hessian.test.A11 x90 x6b
   *  C x1b com.caucho.hessian.test.A12 x90 x6c
   *  C x1b com.caucho.hessian.test.A13 x90 x6d
   *  C x1b com.caucho.hessian.test.A14 x90 x6e
   *  C x1b com.caucho.hessian.test.A15 x90 x6f
   *  C x1b com.caucho.hessian.test.A16 x90 O xa0
   */
  public Object argObject_16(Object v);

  /**
   * Simple object with one field
   *
   * <code><pre>
   * C x30 x22 com.caucho.hessian.test.TestObject x91 x06 _value x60 x90
   * </pre></code>
   */
  public Object argObject_1(Object v);

  /**
   * Simple two objects with one field
   *
   * <code><pre>
   * x7a
   *   C x30 x22 com.caucho.hessian.test.TestObject x91 x06 _value
   *   x60 x90
   *   x60 x91
   * </pre></code>
   */
  public Object argObject_2(Object v);

  /**
   * Simple repeated object
   *
   * <code><pre>
   * x7a
   *   C x30 x22 com.caucho.hessian.test.TestObject x91 x06 _value
   *   x60 x90
   *   Q x91
   * </pre></code>
   */
  public Object argObject_2a(Object v);

  /**
   * Two object with equals
   *
   * <code><pre>
   * x7a
   *   C x22 com.caucho.hessian.test.TestObject x91 x06 _value
   *   x60 x90
   *   x60 x90
   * </pre></code>
   */
  public Object argObject_2b(Object v);

  /**
   * Circular object
   *
   * <code><pre>
   * C x20 com.caucho.hessian.test.TestCons x91 x06 _first x05 _rest
   *   x60 x01 a Q x90
   * </pre></code>
   */
  public Object argObject_3(Object v);
}
