All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonj.sdo.impl.ExternalizableDelegator Maven / Gradle / Ivy

There is a newer version: 2.2.1
Show newest version
/**
 * 
 *
 * 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();
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy