commonj.sdo.impl.ExternalizableDelegator Maven / Gradle / Ivy
/**
*
*
* Service Data Objects
* Version 2.1.0
* Licensed Materials
*
* (c) Copyright BEA Systems, Inc., International Business Machines Corporation,
* Oracle Corporation, Primeton Technologies Ltd., Rogue Wave Software, SAP AG.,
* Software AG., Sun Microsystems, Sybase Inc., Xcalia, Zend Technologies,
* 2005, 2006. All rights reserved.
*
*
*
*/
package commonj.sdo.impl;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.io.ObjectStreamException;
/**
* Delegates DataObject serialization while ensuring implementation independent
* java.io.Serialization. An implementation of DataObject
* returns an ExternalizableDelegator from its writeReplace() method.
*
* The root DataObject is the object returned from do.getRootObject() where
* do is the DataObject being serialized in a java.io.ObjectOutputStream.
* When do.getContainer() == null then do is a root object.
*
* The byte format for each DataObject in the stream is:
* [0] [path] [root] // when do is not a root object
* [1] [rootXML] // when do is a root object
*
* where:
* [0] is the byte 0, serialized using writeByte(0).
* [1] is the byte 1, serialized using writeByte(1).
*
* [path] is an SDO path expression from the root DataObject to the serialized
* DataObject such that root.getDataObject(path) == do.
* Serialized using writeUTF(path).
*
* [root] is the root object serialized using writeObject(root).
*
* [rootXML] is the GZip of the XML serialization of the root DataObject.
* The XML serialization is the same as
* XMLHelper.INSTANCE.save(root, "commonj.sdo", "dataObject", stream);
* where stream is a GZIPOutputStream, length is the number of bytes
* in the stream, and bytes are the contents of the stream.
* Serialized using writeInt(length), write(bytes).
*
*/
public class ExternalizableDelegator implements Externalizable
{
public interface Resolvable extends Externalizable
{
Object readResolve() throws ObjectStreamException;
}
static final long serialVersionUID = 1;
transient Resolvable delegate;
public ExternalizableDelegator()
{
delegate = HelperProvider.createResolvable();
}
public ExternalizableDelegator(Object target)
{
delegate = HelperProvider.createResolvable(target);
}
public void writeExternal(ObjectOutput out) throws IOException
{
delegate.writeExternal(out);
}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
{
delegate.readExternal(in);
}
public Object readResolve() throws ObjectStreamException
{
return delegate.readResolve();
}
}