diff --git a/src/java/com/threerings/io/ObjectOutputStream.java b/src/java/com/threerings/io/ObjectOutputStream.java index 25e26426c..31e4e1a8e 100644 --- a/src/java/com/threerings/io/ObjectOutputStream.java +++ b/src/java/com/threerings/io/ObjectOutputStream.java @@ -93,16 +93,14 @@ public class ObjectOutputStream extends DataOutputStream _classmap = new HashMap(); } - // otherwise, look up the class mapping record (if the target class is - // an enum, convert it from its potentially enum-value specific class - // to the main class for that enum) + // otherwise, look up the class mapping record Class sclass = Streamer.getStreamerClass(object); ClassMapping cmap = _classmap.get(sclass); // create a class mapping for this class if we've not got one if (cmap == null) { // create a streamer instance and assign a code to this class - Streamer streamer = Streamer.getStreamer(object); + Streamer streamer = Streamer.getStreamer(sclass); // we specifically do not inline the getStreamer() call // into the ClassMapping constructor because we want to be // sure not to call _nextCode++ if getStreamer() throws an @@ -148,7 +146,8 @@ public class ObjectOutputStream extends DataOutputStream public void writeBareObject (Object object) throws IOException { - writeBareObject(object, Streamer.getStreamer(object), true); + writeBareObject(object, Streamer.getStreamer( + Streamer.getStreamerClass(object)), true); } /** diff --git a/src/java/com/threerings/io/Streamer.java b/src/java/com/threerings/io/Streamer.java index 04537bd02..775afaee3 100644 --- a/src/java/com/threerings/io/Streamer.java +++ b/src/java/com/threerings/io/Streamer.java @@ -98,11 +98,15 @@ public class Streamer * are shared among all {@link ObjectInputStream}s and {@link * ObjectOutputStream}s. * + * @param target the class that is desired to be streamed. This should be + * the result of a call to {@link #getStreamerClass} if the caller has an + * instance they wish to stream. + * * @throws IOException when a streamer is requested for an object that * does not implement {@link Streamable} and is not one of the basic * object types (@see {@link ObjectOutputStream}). */ - public synchronized static Streamer getStreamer (Object object) + public synchronized static Streamer getStreamer (final Class target) throws IOException { // if we have not yet initialized ourselves, do so now @@ -110,11 +114,11 @@ public class Streamer createStreamers(); } - final Class target = getStreamerClass(object); Streamer stream = _streamers.get(target); if (stream == null) { // make sure this is a streamable class if (!isStreamable(target)) { + Thread.dumpStack(); throw new IOException("Requested to stream invalid class '" + target.getName() + "'"); }