org.springframework.remoting.rmi
Class RemoteInvocationSerializingExporter

java.lang.Object
  extended by org.springframework.remoting.support.RemotingSupport
      extended by org.springframework.remoting.support.RemoteExporter
          extended by org.springframework.remoting.support.RemoteInvocationBasedExporter
              extended by org.springframework.remoting.rmi.RemoteInvocationSerializingExporter
All Implemented Interfaces:
Aware, BeanClassLoaderAware, InitializingBean
Direct Known Subclasses:
HttpInvokerServiceExporter, SimpleHttpInvokerServiceExporter

public abstract class RemoteInvocationSerializingExporter
extends RemoteInvocationBasedExporter
implements InitializingBean

Abstract base class for remote service exporters that explicitly deserialize RemoteInvocation objects and serialize RemoteInvocationResult objects, for example Spring's HTTP invoker.

Provides template methods for ObjectInputStream and ObjectOutputStream handling.

Since:
2.5.1
Author:
Juergen Hoeller
See Also:
ObjectInputStream, ObjectOutputStream, doReadRemoteInvocation(java.io.ObjectInputStream), doWriteRemoteInvocationResult(org.springframework.remoting.support.RemoteInvocationResult, java.io.ObjectOutputStream)

Field Summary
static String CONTENT_TYPE_SERIALIZED_OBJECT
          Default content type: "application/x-java-serialized-object"
 
Fields inherited from class org.springframework.remoting.support.RemotingSupport
logger
 
Constructor Summary
RemoteInvocationSerializingExporter()
           
 
Method Summary
 void afterPropertiesSet()
          Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).
protected  ObjectInputStream createObjectInputStream(InputStream is)
          Create an ObjectInputStream for the given InputStream.
protected  ObjectOutputStream createObjectOutputStream(OutputStream os)
          Create an ObjectOutputStream for the given OutputStream.
protected  RemoteInvocation doReadRemoteInvocation(ObjectInputStream ois)
          Perform the actual reading of an invocation result object from the given ObjectInputStream.
protected  void doWriteRemoteInvocationResult(RemoteInvocationResult result, ObjectOutputStream oos)
          Perform the actual writing of the given invocation result object to the given ObjectOutputStream.
 String getContentType()
          Return the content type to use for sending remote invocation responses.
protected  Object getProxy()
           
 boolean isAcceptProxyClasses()
          Return whether to accept deserialization of proxy classes.
 void prepare()
          Initialize this service exporter.
 void setAcceptProxyClasses(boolean acceptProxyClasses)
          Set whether to accept deserialization of proxy classes.
 void setContentType(String contentType)
          Specify the content type to use for sending remote invocation responses.
 
Methods inherited from class org.springframework.remoting.support.RemoteInvocationBasedExporter
getRemoteInvocationExecutor, invoke, invokeAndCreateResult, setRemoteInvocationExecutor
 
Methods inherited from class org.springframework.remoting.support.RemoteExporter
checkService, checkServiceInterface, getExporterName, getProxyForService, getService, getServiceInterface, setInterceptors, setRegisterTraceInterceptor, setService, 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
 

Field Detail

CONTENT_TYPE_SERIALIZED_OBJECT

public static final String CONTENT_TYPE_SERIALIZED_OBJECT
Default content type: "application/x-java-serialized-object"

See Also:
Constant Field Values
Constructor Detail

RemoteInvocationSerializingExporter

public RemoteInvocationSerializingExporter()
Method Detail

setContentType

public void setContentType(String contentType)
Specify the content type to use for sending remote invocation responses.

Default is "application/x-java-serialized-object".


getContentType

public String getContentType()
Return the content type to use for sending remote invocation responses.


setAcceptProxyClasses

public void setAcceptProxyClasses(boolean acceptProxyClasses)
Set whether to accept deserialization of proxy classes.

Default is "true". May be deactivated as a security measure.


isAcceptProxyClasses

public boolean isAcceptProxyClasses()
Return whether to accept deserialization of proxy classes.


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

prepare

public void prepare()
Initialize this service exporter.


getProxy

protected final Object getProxy()

createObjectInputStream

protected ObjectInputStream createObjectInputStream(InputStream is)
                                             throws IOException
Create an ObjectInputStream for the given InputStream.

The default implementation creates a Spring CodebaseAwareObjectInputStream.

Parameters:
is - the InputStream to read from
Returns:
the new ObjectInputStream instance to use
Throws:
IOException - if creation of the ObjectInputStream failed

doReadRemoteInvocation

protected RemoteInvocation doReadRemoteInvocation(ObjectInputStream ois)
                                           throws IOException,
                                                  ClassNotFoundException
Perform the actual reading of an invocation result object from the given ObjectInputStream.

The default implementation simply calls ObjectInputStream.readObject(). Can be overridden for deserialization of a custom wrapper object rather than the plain invocation, for example an encryption-aware holder.

Parameters:
ois - the ObjectInputStream to read from
Returns:
the RemoteInvocationResult object
Throws:
IOException - in case of I/O failure
ClassNotFoundException - if case of a transferred class not being found in the local ClassLoader

createObjectOutputStream

protected ObjectOutputStream createObjectOutputStream(OutputStream os)
                                               throws IOException
Create an ObjectOutputStream for the given OutputStream.

The default implementation creates a plain ObjectOutputStream.

Parameters:
os - the OutputStream to write to
Returns:
the new ObjectOutputStream instance to use
Throws:
IOException - if creation of the ObjectOutputStream failed

doWriteRemoteInvocationResult

protected void doWriteRemoteInvocationResult(RemoteInvocationResult result,
                                             ObjectOutputStream oos)
                                      throws IOException
Perform the actual writing of the given invocation result object to the given ObjectOutputStream.

The default implementation simply calls ObjectOutputStream.writeObject(java.lang.Object). Can be overridden for serialization of a custom wrapper object rather than the plain invocation, for example an encryption-aware holder.

Parameters:
result - the RemoteInvocationResult object
oos - the ObjectOutputStream to write to
Throws:
IOException - if thrown by I/O methods