commonj.sdo.impl.ExternalizableDelegator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eclipselink Show documentation
Show all versions of eclipselink Show documentation
EclipseLink build based upon Git transaction f2b9fc5
/**
*
*
* Service Data Objects
* Version 2.1.1
* 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-2008. 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();
}
}