com.caucho.hessian.client
Class HessianProxyFactory

java.lang.Object
  extended by com.caucho.hessian.client.HessianProxyFactory
All Implemented Interfaces:
com.caucho.services.client.ServiceProxyFactory, javax.naming.spi.ObjectFactory

public class HessianProxyFactory
extends java.lang.Object
implements com.caucho.services.client.ServiceProxyFactory, javax.naming.spi.ObjectFactory

Factory for creating Hessian client stubs. The returned stub will call the remote object for all methods.

 String url = "http://localhost:8080/ejb/hello";
 HelloHome hello = (HelloHome) factory.create(HelloHome.class, url);
 
After creation, the stub can be like a regular Java class. Because it makes remote calls, it can throw more exceptions than a Java class. In particular, it may throw protocol exceptions. The factory can also be configured as a JNDI resource. The factory expects to parameters: "type" and "url", corresponding to the two arguments to create In Resin 3.0, the above example would be configured as:
 <reference>
   <jndi-name>hessian/hello</jndi-name>
   <factory>com.caucho.hessian.client.HessianProxyFactory</factory>
   <init-param url="http://localhost:8080/ejb/hello"/>
   <init-param type="test.HelloHome"/>
 </reference>
 
To get the above resource, use JNDI as follows:
 Context ic = new InitialContext();
 HelloHome hello = (HelloHome) ic.lookup("java:comp/env/hessian/hello");

 System.out.println("Hello: " + hello.helloWorld());
 

Authentication

The proxy can use HTTP basic authentication if the user and the password are set.


Field Summary
private  java.lang.String _basicAuth
           
private  java.lang.String _connectionFactoryName
           
private  boolean _isChunkedPost
           
private  boolean _isDebug
           
private  boolean _isHessian2Reply
           
private  boolean _isHessian2Request
           
private  boolean _isOverloadEnabled
           
private  java.lang.String _password
           
private  long _readTimeout
           
private  HessianRemoteResolver _resolver
           
private  SerializerFactory _serializerFactory
           
private  java.lang.String _user
           
protected static java.util.logging.Logger log
           
 
Constructor Summary
HessianProxyFactory()
          Creates the new proxy factory.
 
Method Summary
private  java.lang.String base64(java.lang.String value)
          Creates the Base64 value.
 java.lang.Object create(java.lang.Class api, java.lang.String urlName)
          Creates a new proxy with the specified URL.
 java.lang.Object create(java.lang.Class api, java.lang.String urlName, java.lang.ClassLoader loader)
          Creates a new proxy with the specified URL.
 java.lang.Object create(java.lang.String url)
          Creates a new proxy with the specified URL.
static char encode(long d)
           
 AbstractHessianInput getHessianInput(java.io.InputStream is)
           
 AbstractHessianOutput getHessianOutput(java.io.OutputStream os)
           
 java.lang.Object getObjectInstance(java.lang.Object obj, javax.naming.Name name, javax.naming.Context nameCtx, java.util.Hashtable<?,?> environment)
          JNDI object factory so the proxy can be used as a resource.
 long getReadTimeout()
          The socket timeout on requests in milliseconds.
 HessianRemoteResolver getRemoteResolver()
          Returns the remote resolver.
 SerializerFactory getSerializerFactory()
          Gets the serializer factory.
 boolean isChunkedPost()
          Set true if should use chunked encoding on the request.
 boolean isDebug()
          Gets the debug
 boolean isOverloadEnabled()
          Returns true if overloaded methods are allowed (using mangling)
protected  java.net.URLConnection openConnection(java.net.URL url)
          Creates the URL connection.
 void setChunkedPost(boolean isChunked)
          Set true if should use chunked encoding on the request.
 void setConnectionFactoryName(java.lang.String connectionFactoryName)
          Sets the name of the connection factory to use when connecting to JMS Hessian services.
 void setDebug(boolean isDebug)
          Sets the debug
 void setHessian2Reply(boolean isHessian2)
          True if the proxy can read Hessian 2 responses.
 void setHessian2Request(boolean isHessian2)
          True if the proxy should send Hessian 2 requests.
 void setOverloadEnabled(boolean isOverloadEnabled)
          set true if overloaded methods are allowed (using mangling)
 void setPassword(java.lang.String password)
          Sets the password.
 void setReadTimeout(long timeout)
          The socket timeout on requests in milliseconds.
 void setSerializerFactory(SerializerFactory factory)
          Sets the serializer factory.
 void setUser(java.lang.String user)
          Sets the user.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

log

protected static java.util.logging.Logger log

_serializerFactory

private SerializerFactory _serializerFactory

_resolver

private HessianRemoteResolver _resolver

_user

private java.lang.String _user

_password

private java.lang.String _password

_basicAuth

private java.lang.String _basicAuth

_isOverloadEnabled

private boolean _isOverloadEnabled

_isHessian2Reply

private boolean _isHessian2Reply

_isHessian2Request

private boolean _isHessian2Request

_isChunkedPost

private boolean _isChunkedPost

_isDebug

private boolean _isDebug

_readTimeout

private long _readTimeout

_connectionFactoryName

private java.lang.String _connectionFactoryName
Constructor Detail

HessianProxyFactory

public HessianProxyFactory()
Creates the new proxy factory.

Method Detail

setUser

public void setUser(java.lang.String user)
Sets the user.


setPassword

public void setPassword(java.lang.String password)
Sets the password.


setConnectionFactoryName

public void setConnectionFactoryName(java.lang.String connectionFactoryName)
Sets the name of the connection factory to use when connecting to JMS Hessian services.


setDebug

public void setDebug(boolean isDebug)
Sets the debug


isDebug

public boolean isDebug()
Gets the debug


isOverloadEnabled

public boolean isOverloadEnabled()
Returns true if overloaded methods are allowed (using mangling)


setOverloadEnabled

public void setOverloadEnabled(boolean isOverloadEnabled)
set true if overloaded methods are allowed (using mangling)


setChunkedPost

public void setChunkedPost(boolean isChunked)
Set true if should use chunked encoding on the request.


isChunkedPost

public boolean isChunkedPost()
Set true if should use chunked encoding on the request.


getReadTimeout

public long getReadTimeout()
The socket timeout on requests in milliseconds.


setReadTimeout

public void setReadTimeout(long timeout)
The socket timeout on requests in milliseconds.


setHessian2Reply

public void setHessian2Reply(boolean isHessian2)
True if the proxy can read Hessian 2 responses.


setHessian2Request

public void setHessian2Request(boolean isHessian2)
True if the proxy should send Hessian 2 requests.


getRemoteResolver

public HessianRemoteResolver getRemoteResolver()
Returns the remote resolver.


setSerializerFactory

public void setSerializerFactory(SerializerFactory factory)
Sets the serializer factory.


getSerializerFactory

public SerializerFactory getSerializerFactory()
Gets the serializer factory.


openConnection

protected java.net.URLConnection openConnection(java.net.URL url)
                                         throws java.io.IOException
Creates the URL connection.

Throws:
java.io.IOException

create

public java.lang.Object create(java.lang.String url)
                        throws java.net.MalformedURLException,
                               java.lang.ClassNotFoundException
Creates a new proxy with the specified URL. The API class uses the java.api.class value from _hessian_

Parameters:
url - the URL where the client object is located.
Returns:
a proxy to the object with the specified interface.
Throws:
java.net.MalformedURLException
java.lang.ClassNotFoundException

create

public java.lang.Object create(java.lang.Class api,
                               java.lang.String urlName)
                        throws java.net.MalformedURLException
Creates a new proxy with the specified URL. The returned object is a proxy with the interface specified by api.
 String url = "http://localhost:8080/ejb/hello");
 HelloHome hello = (HelloHome) factory.create(HelloHome.class, url);
 

Specified by:
create in interface com.caucho.services.client.ServiceProxyFactory
Parameters:
api - the interface the proxy class needs to implement
url - the URL where the client object is located.
Returns:
a proxy to the object with the specified interface.
Throws:
java.net.MalformedURLException

create

public java.lang.Object create(java.lang.Class api,
                               java.lang.String urlName,
                               java.lang.ClassLoader loader)
                        throws java.net.MalformedURLException
Creates a new proxy with the specified URL. The returned object is a proxy with the interface specified by api.
 String url = "http://localhost:8080/ejb/hello");
 HelloHome hello = (HelloHome) factory.create(HelloHome.class, url);
 

Parameters:
api - the interface the proxy class needs to implement
url - the URL where the client object is located.
Returns:
a proxy to the object with the specified interface.
Throws:
java.net.MalformedURLException

getHessianInput

public AbstractHessianInput getHessianInput(java.io.InputStream is)

getHessianOutput

public AbstractHessianOutput getHessianOutput(java.io.OutputStream os)

getObjectInstance

public java.lang.Object getObjectInstance(java.lang.Object obj,
                                          javax.naming.Name name,
                                          javax.naming.Context nameCtx,
                                          java.util.Hashtable<?,?> environment)
                                   throws java.lang.Exception
JNDI object factory so the proxy can be used as a resource.

Specified by:
getObjectInstance in interface javax.naming.spi.ObjectFactory
Throws:
java.lang.Exception

base64

private java.lang.String base64(java.lang.String value)
Creates the Base64 value.


encode

public static char encode(long d)