org.springframework.remoting.caucho
Class HessianClientInterceptor

java.lang.Object
  extended by org.springframework.remoting.support.RemotingSupport
      extended by org.springframework.remoting.support.RemoteAccessor
          extended by org.springframework.remoting.support.UrlBasedRemoteAccessor
              extended by org.springframework.remoting.caucho.HessianClientInterceptor
All Implemented Interfaces:
org.aopalliance.aop.Advice, org.aopalliance.intercept.Interceptor, org.aopalliance.intercept.MethodInterceptor, BeanClassLoaderAware, InitializingBean
Direct Known Subclasses:
HessianProxyFactoryBean

public class HessianClientInterceptor
extends UrlBasedRemoteAccessor
implements org.aopalliance.intercept.MethodInterceptor

MethodInterceptor for accessing a Hessian service. Supports authentication via username and password. The service URL must be an HTTP URL exposing a Hessian service.

Hessian is a slim, binary RPC protocol. For information on Hessian, see the Hessian website

Note: There is no requirement for services accessed with this proxy factory to have been exported using Spring's HessianServiceExporter, as there is no special handling involved. As a consequence, you can also access services that have been exported using Caucho's HessianServlet.

Since:
29.09.2003
Author:
Juergen Hoeller
See Also:
RemoteAccessor.setServiceInterface(java.lang.Class), UrlBasedRemoteAccessor.setServiceUrl(java.lang.String), setUsername(java.lang.String), setPassword(java.lang.String), HessianServiceExporter, HessianProxyFactoryBean, HessianProxyFactory, HessianServlet

Field Summary
 
Fields inherited from class org.springframework.remoting.support.RemotingSupport
logger
 
Constructor Summary
HessianClientInterceptor()
           
 
Method Summary
 void afterPropertiesSet()
          Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).
protected  RemoteAccessException convertHessianAccessException(java.lang.Throwable ex)
          Convert the given Hessian access exception to an appropriate Spring RemoteAccessException.
protected  java.lang.Object createHessianProxy(com.caucho.hessian.client.HessianProxyFactory proxyFactory)
          Create the Hessian proxy that is wrapped by this interceptor.
 java.lang.Object invoke(org.aopalliance.intercept.MethodInvocation invocation)
           
 void prepare()
          Initialize the Hessian proxy for this interceptor.
 void setChunkedPost(boolean chunkedPost)
          Set whether to use a chunked post for sending a Hessian request.
 void setDebug(boolean debug)
          Set whether Hessian's debug mode should be enabled.
 void setHessian2(boolean hessian2)
          Set whether version 2 of the Hessian protocol should be used for parsing requests and replies.
 void setHessian2Reply(boolean hessian2)
          Set whether version 2 of the Hessian protocol should be used for parsing replies.
 void setHessian2Request(boolean hessian2)
          Set whether version 2 of the Hessian protocol should be used for parsing requests.
 void setOverloadEnabled(boolean overloadEnabled)
          Set whether overloaded methods should be enabled for remote invocations.
 void setPassword(java.lang.String password)
          Set the password that this factory should use to access the remote service.
 void setProxyFactory(com.caucho.hessian.client.HessianProxyFactory proxyFactory)
          Set the HessianProxyFactory instance to use.
 void setReadTimeout(long timeout)
          Set the timeout to use when waiting for a reply from the Hessian service.
 void setSendCollectionType(boolean sendCollectionType)
          Set whether to send the Java collection type for each serialized collection.
 void setSerializerFactory(com.caucho.hessian.io.SerializerFactory serializerFactory)
          Specify the Hessian SerializerFactory to use.
 void setUsername(java.lang.String username)
          Set the username that this factory should use to access the remote service.
 
Methods inherited from class org.springframework.remoting.support.UrlBasedRemoteAccessor
getServiceUrl, setServiceUrl
 
Methods inherited from class org.springframework.remoting.support.RemoteAccessor
getServiceInterface, setServiceInterface
 
Methods inherited from class org.springframework.remoting.support.RemotingSupport
getBeanClassLoader, overrideThreadContextClassLoader, resetThreadContextClassLoader, setBeanClassLoader
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

HessianClientInterceptor

public HessianClientInterceptor()
Method Detail

setProxyFactory

public void setProxyFactory(com.caucho.hessian.client.HessianProxyFactory proxyFactory)
Set the HessianProxyFactory instance to use. If not specified, a default HessianProxyFactory will be created.

Allows to use an externally configured factory instance, in particular a custom HessianProxyFactory subclass.


setSerializerFactory

public void setSerializerFactory(com.caucho.hessian.io.SerializerFactory serializerFactory)
Specify the Hessian SerializerFactory to use.

This will typically be passed in as an inner bean definition of type com.caucho.hessian.io.SerializerFactory, with custom bean property values applied.


setSendCollectionType

public void setSendCollectionType(boolean sendCollectionType)
Set whether to send the Java collection type for each serialized collection. Default is "true".


setOverloadEnabled

public void setOverloadEnabled(boolean overloadEnabled)
Set whether overloaded methods should be enabled for remote invocations. Default is "false".

See Also:
HessianProxyFactory.setOverloadEnabled(boolean)

setUsername

public void setUsername(java.lang.String username)
Set the username that this factory should use to access the remote service. Default is none.

The username will be sent by Hessian via HTTP Basic Authentication.

See Also:
HessianProxyFactory.setUser(java.lang.String)

setPassword

public void setPassword(java.lang.String password)
Set the password that this factory should use to access the remote service. Default is none.

The password will be sent by Hessian via HTTP Basic Authentication.

See Also:
HessianProxyFactory.setPassword(java.lang.String)

setDebug

public void setDebug(boolean debug)
Set whether Hessian's debug mode should be enabled. Default is "false".

See Also:
HessianProxyFactory.setDebug(boolean)

setChunkedPost

public void setChunkedPost(boolean chunkedPost)
Set whether to use a chunked post for sending a Hessian request.

See Also:
HessianProxyFactory.setChunkedPost(boolean)

setReadTimeout

public void setReadTimeout(long timeout)
Set the timeout to use when waiting for a reply from the Hessian service.

See Also:
HessianProxyFactory.setReadTimeout(long)

setHessian2

public void setHessian2(boolean hessian2)
Set whether version 2 of the Hessian protocol should be used for parsing requests and replies. Default is "false".

See Also:
HessianProxyFactory.setHessian2Request(boolean)

setHessian2Request

public void setHessian2Request(boolean hessian2)
Set whether version 2 of the Hessian protocol should be used for parsing requests. Default is "false".

See Also:
HessianProxyFactory.setHessian2Request(boolean)

setHessian2Reply

public void setHessian2Reply(boolean hessian2)
Set whether version 2 of the Hessian protocol should be used for parsing replies. Default is "false".

See Also:
HessianProxyFactory.setHessian2Reply(boolean)

afterPropertiesSet

public void afterPropertiesSet()
Description copied from interface: InitializingBean
Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).

This method allows the bean instance to perform initialization only possible when all bean properties have been set and to throw an exception in the event of misconfiguration.

Specified by:
afterPropertiesSet in interface InitializingBean
Overrides:
afterPropertiesSet in class UrlBasedRemoteAccessor

prepare

public void prepare()
             throws RemoteLookupFailureException
Initialize the Hessian proxy for this interceptor.

Throws:
RemoteLookupFailureException - if the service URL is invalid

createHessianProxy

protected java.lang.Object createHessianProxy(com.caucho.hessian.client.HessianProxyFactory proxyFactory)
                                       throws java.net.MalformedURLException
Create the Hessian proxy that is wrapped by this interceptor.

Parameters:
proxyFactory - the proxy factory to use
Returns:
the Hessian proxy
Throws:
java.net.MalformedURLException - if thrown by the proxy factory
See Also:
HessianProxyFactory.create(java.lang.String)

invoke

public java.lang.Object invoke(org.aopalliance.intercept.MethodInvocation invocation)
                        throws java.lang.Throwable
Specified by:
invoke in interface org.aopalliance.intercept.MethodInterceptor
Throws:
java.lang.Throwable

convertHessianAccessException

protected RemoteAccessException convertHessianAccessException(java.lang.Throwable ex)
Convert the given Hessian access exception to an appropriate Spring RemoteAccessException.

Parameters:
ex - the exception to convert
Returns:
the RemoteAccessException to throw