Fixed issue: NETTY-178 ObjectEncoder encodes array fields incorrectly.

* Made sure CompactObjectOutputStream encodes the class descriptor of an array type correctly.
This commit is contained in:
Trustin Lee 2009-06-18 14:26:39 +00:00
parent 2b0ec506ec
commit 46a7f6ff5f
2 changed files with 8 additions and 7 deletions

View File

@ -67,9 +67,9 @@ class CompactObjectInputStream extends ObjectInputStream {
throw new EOFException(); throw new EOFException();
} }
switch (type) { switch (type) {
case CompactObjectOutputStream.TYPE_PRIMITIVE: case CompactObjectOutputStream.TYPE_FAT_DESCRIPTOR:
return super.readClassDescriptor(); return super.readClassDescriptor();
case CompactObjectOutputStream.TYPE_NON_PRIMITIVE: case CompactObjectOutputStream.TYPE_THIN_DESCRIPTOR:
String className = readUTF(); String className = readUTF();
Class<?> clazz = loadClass(className); Class<?> clazz = loadClass(className);
return ObjectStreamClass.lookup(clazz); return ObjectStreamClass.lookup(clazz);

View File

@ -36,8 +36,8 @@ import java.io.OutputStream;
*/ */
class CompactObjectOutputStream extends ObjectOutputStream { class CompactObjectOutputStream extends ObjectOutputStream {
static final int TYPE_PRIMITIVE = 0; static final int TYPE_FAT_DESCRIPTOR = 0;
static final int TYPE_NON_PRIMITIVE = 1; static final int TYPE_THIN_DESCRIPTOR = 1;
CompactObjectOutputStream(OutputStream out) throws IOException { CompactObjectOutputStream(OutputStream out) throws IOException {
super(out); super(out);
@ -50,11 +50,12 @@ class CompactObjectOutputStream extends ObjectOutputStream {
@Override @Override
protected void writeClassDescriptor(ObjectStreamClass desc) throws IOException { protected void writeClassDescriptor(ObjectStreamClass desc) throws IOException {
if (desc.forClass().isPrimitive()) { Class<?> clazz = desc.forClass();
write(TYPE_PRIMITIVE); if (clazz.isPrimitive() || clazz.isArray()) {
write(TYPE_FAT_DESCRIPTOR);
super.writeClassDescriptor(desc); super.writeClassDescriptor(desc);
} else { } else {
write(TYPE_NON_PRIMITIVE); write(TYPE_THIN_DESCRIPTOR);
writeUTF(desc.getName()); writeUTF(desc.getName());
} }
} }