APIdia Launch Partner
Top Description Inners Fields Constructors Methods
com.sun.jndi.ldap

pack-priv final Class Obj

extends Object
Class Inheritance
Imports
javax.naming.*, javax.naming.directory.*, javax.naming.spi.DirectoryManager, .DirStateFactory, java.io.IOException, .ByteArrayInputStream, .ByteArrayOutputStream, .ObjectInputStream, .ObjectOutputStream, .ObjectStreamClass, .InputStream, java.util.ArrayList, .Base64, .Hashtable, .StringTokenizer, java.lang.reflect.Proxy, .Modifier

Class containing static methods and constants for dealing with encoding/decoding JNDI References and Serialized Objects in LDAP.
Authors
Vincent Ryan, Rosanna Lee

Nested and Inner Type Summary

Modifier and TypeClass and Description
private static class
Obj.LoaderInputStream

An ObjectInputStream that uses a class loader to find classes.

Field Summary

Modifier and TypeField and Description
pack-priv static final int
pack-priv static final int
pack-priv static final int
pack-priv static final int
pack-priv static final String[]
pack-priv static final String[]
pack-priv static final String[]
pack-priv static final int
pack-priv static final int
pack-priv static final int
pack-priv static final int
private static final int
REMOTE_LOC

Deprecated
pack-priv static final int
pack-priv static final int
pack-priv static final int
private static final boolean
trustSerialData

Determines whether objects may be deserialized or reconstructed from a content of 'javaSerializedData', 'javaRemoteLocation' or 'javaReferenceAddress' LDAP attributes.

pack-priv static final int

Constructor Summary

AccessConstructor and Description
private
Obj()

Method Summary

Modifier and TypeMethod and Description
pack-priv static Object
private static Reference
decodeReference(Attributes attrs, String[] codebases)

private static Object
decodeRmiObject(String className, String rmiName)

private static Object
pack-priv static Attributes
determineBindAttrs(char separator, Object obj, Attributes attrs, boolean cloned, Name name, Context ctx, Hashtable<?, ?> env)

Returns the attributes to bind given an object and its attributes.

private static Attributes
encodeObject(char separator, Object obj, Attributes attrs, Attribute objectClass, boolean cloned)

Encode an object in LDAP attributes.

private static Attributes
encodeReference(char separator, Reference ref, Attributes attrs, Object orig)

Convert a Reference object into several LDAP attributes.

private static String[]

Returns:

an array of URL strings for the codebase
getCodebases
(Attribute codebaseAttr)

Each value in javaCodebase contains a list of space-separated URLs.

private static byte[]
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

BASE_OBJECTback to summary
pack-priv static final int BASE_OBJECT
CLASSNAMEback to summary
pack-priv static final int CLASSNAME
CODEBASEback to summary
pack-priv static final int CODEBASE
FACTORYback to summary
pack-priv static final int FACTORY
JAVA_ATTRIBUTESback to summary
pack-priv static final String[] JAVA_ATTRIBUTES
JAVA_OBJECT_CLASSESback to summary
pack-priv static final String[] JAVA_OBJECT_CLASSES
JAVA_OBJECT_CLASSES_LOWERback to summary
pack-priv static final String[] JAVA_OBJECT_CLASSES_LOWER
MAR_OBJECTback to summary
pack-priv static final int MAR_OBJECT
OBJECT_CLASSback to summary
pack-priv static final int OBJECT_CLASS
REF_ADDRback to summary
pack-priv static final int REF_ADDR
REF_OBJECTback to summary
pack-priv static final int REF_OBJECT
REMOTE_LOCback to summary
private static final int REMOTE_LOC

Deprecated

Annotations
@Deprecated
SER_OBJECTback to summary
pack-priv static final int SER_OBJECT
SERIALIZED_DATAback to summary
pack-priv static final int SERIALIZED_DATA
STRUCTURALback to summary
pack-priv static final int STRUCTURAL
trustSerialDataback to summary
private static final boolean trustSerialData

Determines whether objects may be deserialized or reconstructed from a content of 'javaSerializedData', 'javaRemoteLocation' or 'javaReferenceAddress' LDAP attributes.

TYPENAMEback to summary
pack-priv static final int TYPENAME

Constructor Detail

Objback to summary
private Obj()

Method Detail

decodeObjectback to summary
pack-priv static Object decodeObject(Attributes attrs) throws NamingException
decodeReferenceback to summary
private static Reference decodeReference(Attributes attrs, String[] codebases) throws NamingException, IOException
decodeRmiObjectback to summary
private static Object decodeRmiObject(String className, String rmiName) throws NamingException
deserializeObjectback to summary
private static Object deserializeObject(byte[] obj, ClassLoader cl) throws NamingException
determineBindAttrsback to summary
pack-priv static Attributes determineBindAttrs(char separator, Object obj, Attributes attrs, boolean cloned, Name name, Context ctx, Hashtable<?, ?> env) throws NamingException

Returns the attributes to bind given an object and its attributes.

encodeObjectback to summary
private static Attributes encodeObject(char separator, Object obj, Attributes attrs, Attribute objectClass, boolean cloned) throws NamingException

Encode an object in LDAP attributes. Supports binding Referenceable or Reference, Serializable, and DirContext. If the object supports the Referenceable interface then encode the reference to the object. See encodeReference() for details.

If the object is serializable, it is stored as follows: javaClassName value: Object.getClass(); javaSerializedData value: serialized form of Object (in binary form). javaTypeName value: getTypeNames(Object.getClass());

encodeReferenceback to summary
private static Attributes encodeReference(char separator, Reference ref, Attributes attrs, Object orig) throws NamingException

Convert a Reference object into several LDAP attributes. A Reference is stored as into the following attributes: javaClassName value: Reference.getClassName(); javaFactory value: Reference.getFactoryClassName(); javaCodeBase value: Reference.getFactoryClassLocation(); javaReferenceAddress value: #0#typeA#valA value: #1#typeB#valB value: #2#typeC##[serialized RefAddr C] value: #3#typeD#valD where - the first character denotes the separator - the number following the first separator denotes the position of the RefAddr within the Reference - "typeA" is RefAddr.getType() - ## denotes that the Base64-encoded form of the non-StringRefAddr is to follow; otherwise the value that follows is StringRefAddr.getContents() The default separator is the hash character (#). May provide property for this in future.

getCodebasesback to summary
private static String[] getCodebases(Attribute codebaseAttr) throws NamingException

Each value in javaCodebase contains a list of space-separated URLs. Each value is independent; we can pick any of the values so we just use the first one.

Returns:String[]

an array of URL strings for the codebase

serializeObjectback to summary
private static byte[] serializeObject(Object obj) throws NamingException
com.sun.jndi.ldap back to summary

private final Class Obj.LoaderInputStream

extends ObjectInputStream
Class Inheritance

An ObjectInputStream that uses a class loader to find classes.

Field Summary

Modifier and TypeField and Description
private ClassLoader

Constructor Summary

AccessConstructor and Description
pack-priv

Method Summary

Modifier and TypeMethod and Description
protected Class<?>
resolveClass(ObjectStreamClass desc)

Overrides java.io.ObjectInputStream.resolveClass.

Load the local class equivalent of the specified stream class description.

protected Class<?>
resolveProxyClass(String[] interfaces)

Overrides java.io.ObjectInputStream.resolveProxyClass.

Returns a proxy class that implements the interfaces named in a proxy class descriptor; subclasses may implement this method to read custom data from the stream along with the descriptors for dynamic proxy classes, allowing them to use an alternate loading mechanism for the interfaces and the proxy class.

Inherited from java.io.ObjectInputStream:
availableclosedefaultReadObjectenableResolveObjectgetObjectInputFilterreadreadreadBooleanreadBytereadCharreadClassDescriptorreadDoublereadFieldsreadFloatreadFullyreadFullyreadIntreadLinereadLongreadObjectreadObjectOverridereadShortreadStreamHeaderreadUnsharedreadUnsignedBytereadUnsignedShortreadUTFregisterValidationresolveObjectsetObjectInputFilterskipBytes

Field Detail

classLoaderback to summary
private ClassLoader classLoader

Constructor Detail

LoaderInputStreamback to summary
pack-priv LoaderInputStream(InputStream in, ClassLoader cl) throws IOException

Method Detail

resolveClassback to summary
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException

Overrides java.io.ObjectInputStream.resolveClass.

Doc from java.io.ObjectInputStream.resolveClass.

Load the local class equivalent of the specified stream class description. Subclasses may implement this method to allow classes to be fetched from an alternate source.

The corresponding method in ObjectOutputStream is annotateClass. This method will be invoked only once for each unique class in the stream. This method can be implemented by subclasses to use an alternate loading mechanism but must return a Class object. Once returned, if the class is not an array class, its serialVersionUID is compared to the serialVersionUID of the serialized class, and if there is a mismatch, the deserialization fails and an InvalidClassException is thrown.

The default implementation of this method in ObjectInputStream returns the result of calling

Class.forName(desc.getName(), false, loader)
Class.forName(desc.getName(), false, loader)
where loader is the first class loader on the current thread's stack (starting from the currently executing method) that is neither the platform class loader nor its ancestor; otherwise, loader is the platform class loader. If this call results in a ClassNotFoundException and the name of the passed ObjectStreamClass instance is the Java language keyword for a primitive type or void, then the Class object representing that primitive type or void will be returned (e.g., an ObjectStreamClass with the name "int" will be resolved to Integer.TYPE). Otherwise, the ClassNotFoundException will be thrown to the caller of this method.
Exceptions
IOException:
any of the usual Input/Output exceptions.
ClassNotFoundException:
if class of a serialized object cannot be found.
resolveProxyClassback to summary
protected Class<?> resolveProxyClass(String[] interfaces) throws IOException, ClassNotFoundException

Overrides java.io.ObjectInputStream.resolveProxyClass.

Doc from java.io.ObjectInputStream.resolveProxyClass.

Returns a proxy class that implements the interfaces named in a proxy class descriptor; subclasses may implement this method to read custom data from the stream along with the descriptors for dynamic proxy classes, allowing them to use an alternate loading mechanism for the interfaces and the proxy class.

This method is called exactly once for each unique proxy class descriptor in the stream.

The corresponding method in ObjectOutputStream is annotateProxyClass. For a given subclass of ObjectInputStream that overrides this method, the annotateProxyClass method in the corresponding subclass of ObjectOutputStream must write any data or objects read by this method.

The default implementation of this method in ObjectInputStream returns the result of calling Proxy.getProxyClass with the list of Class objects for the interfaces that are named in the interfaces parameter. The Class object for each interface name i is the value returned by calling

Class.forName(i, false, loader)
Class.forName(i, false, loader)
where loader is the first class loader on the current thread's stack (starting from the currently executing method) that is neither the platform class loader nor its ancestor; otherwise, loader is the platform class loader. Unless any of the resolved interfaces are non-public, this same value of loader is also the class loader passed to Proxy.getProxyClass; if non-public interfaces are present, their class loader is passed instead (if more than one non-public interface class loader is encountered, an IllegalAccessError is thrown). If Proxy.getProxyClass throws an IllegalArgumentException, resolveProxyClass will throw a ClassNotFoundException containing the IllegalArgumentException.
Exceptions
IOException:
any exception thrown by the underlying InputStream
ClassNotFoundException:
if the proxy class or any of the named interfaces could not be found