JBoss Marshalling 1.3.0.CR9

org.jboss.marshalling
Class ModularClassResolver

java.lang.Object
  extended by org.jboss.marshalling.ModularClassResolver
All Implemented Interfaces:
ClassResolver

public final class ModularClassResolver
extends Object
implements ClassResolver

A class table which implements an alternate class resolution strategy based on JBoss Modules. Each class name is stored along with its corresponding module identifier, which allows the object graph to be exactly reconstituted on the remote side. This class should be used when the marshalling and unmarshalling side may have differing class files.

Author:
David M. Lloyd

Method Summary
 void annotateClass(Marshaller marshaller, Class<?> clazz)
          Add optional information about a class to a stream.
 void annotateProxyClass(Marshaller marshaller, Class<?> proxyClass)
          Add optional information about a proxy class to a stream.
 String getClassName(Class<?> clazz)
          Get the class name to write for a given class.
static ModularClassResolver getInstance(org.jboss.modules.ModuleLoader moduleLoader)
          Construct a new instance using the given module loader.
 String[] getProxyInterfaces(Class<?> proxyClass)
          Get the interface names to write for a given proxy class.
 Class<?> resolveClass(Unmarshaller unmarshaller, String className, long serialVersionUID)
          Load the local class for a class descriptor.
 Class<?> resolveProxyClass(Unmarshaller unmarshaller, String[] names)
          Load a proxy class that implements the given interfaces.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

getInstance

public static ModularClassResolver getInstance(org.jboss.modules.ModuleLoader moduleLoader)
Construct a new instance using the given module loader.

Parameters:
moduleLoader - the module loader
Returns:
the new instance

annotateClass

public void annotateClass(Marshaller marshaller,
                          Class<?> clazz)
                   throws IOException
Add optional information about a class to a stream. The class descriptor will already have been written.

Specified by:
annotateClass in interface ClassResolver
Parameters:
marshaller - the marshaller to write to
clazz - the class that was written
Throws:
IOException - if an error occurs
See Also:
ObjectOutputStream.annotateClass(Class)

annotateProxyClass

public void annotateProxyClass(Marshaller marshaller,
                               Class<?> proxyClass)
                        throws IOException
Add optional information about a proxy class to a stream. The class descriptor will already have been written.

Specified by:
annotateProxyClass in interface ClassResolver
Parameters:
marshaller - the marshaller to write to
proxyClass - the class that was written
Throws:
IOException - if an error occurs
See Also:
ObjectOutputStream.annotateProxyClass(Class)

getClassName

public String getClassName(Class<?> clazz)
                    throws IOException
Get the class name to write for a given class. The class name will be written as part of the class descriptor.

Specified by:
getClassName in interface ClassResolver
Parameters:
clazz - the class
Returns:
the class name
Throws:
IOException - if an error occurs

getProxyInterfaces

public String[] getProxyInterfaces(Class<?> proxyClass)
                            throws IOException
Get the interface names to write for a given proxy class. The interface names will be written as part of the class descriptor.

Specified by:
getProxyInterfaces in interface ClassResolver
Parameters:
proxyClass - the proxy class
Returns:
the proxy class interface names
Throws:
IOException - if an error occurs

resolveClass

public Class<?> resolveClass(Unmarshaller unmarshaller,
                             String className,
                             long serialVersionUID)
                      throws IOException,
                             ClassNotFoundException
Load the local class for a class descriptor. The class descriptor has already been read, but any data written by ClassResolver.annotateClass(Marshaller, Class) should be read by this method.

Specified by:
resolveClass in interface ClassResolver
Parameters:
unmarshaller - the unmarshaller from which to read annotation data, if any
className - the class name
serialVersionUID - the serial version UID
Returns:
the corresponding class
Throws:
IOException - if an I/O error occurs
ClassNotFoundException - if the class could not be loaded
See Also:
ObjectInputStream.resolveClass(java.io.ObjectStreamClass)

resolveProxyClass

public Class<?> resolveProxyClass(Unmarshaller unmarshaller,
                                  String[] names)
                           throws IOException,
                                  ClassNotFoundException
Load a proxy class that implements the given interfaces.

Specified by:
resolveProxyClass in interface ClassResolver
Parameters:
unmarshaller - the unmarshaller from which to read annotation data, if any
names - the class descriptor
Returns:
the proxy class
Throws:
IOException - if an I/O error occurs
ClassNotFoundException - if the proxy class could not be loaded
See Also:
ObjectInputStream.resolveProxyClass(String[])

JBoss Marshalling 1.3.0.CR9

Copyright © 2011 JBoss, a division of Red Hat, Inc.