diff --git a/river/src/main/java/org/jboss/marshalling/river/RiverMarshaller.java b/river/src/main/java/org/jboss/marshalling/river/RiverMarshaller.java index 9f19cacc..746f59aa 100644 --- a/river/src/main/java/org/jboss/marshalling/river/RiverMarshaller.java +++ b/river/src/main/java/org/jboss/marshalling/river/RiverMarshaller.java @@ -1481,7 +1481,12 @@ protected void writeNewSerializableClass(final Class objClass) throws IOExcep } else { write(ID_SERIALIZABLE_CLASS); } - writeString(classResolver.getClassName(objClass)); + final String className = classResolver.getClassName(objClass); + if (configuredVersion >= 4) { + writeObject(className); + } else { + writeString(className); + } writeLong(info.getEffectiveSerialVersionUID()); classCache.put(objClass, classSeq++); classResolver.annotateClass(this, objClass); @@ -1490,7 +1495,11 @@ protected void writeNewSerializableClass(final Class objClass) throws IOExcep writeInt(cnt); for (int i = 0; i < cnt; i++) { SerializableField field = fields[i]; - writeUTF(field.getName()); + if (configuredVersion >= 4) { + writeObject(field.getName()); + } else { + writeUTF(field.getName()); + } try { writeClass(field.getKind() == Kind.OBJECT ? Object.class : field.getType()); } catch (ClassNotFoundException e) { diff --git a/river/src/main/java/org/jboss/marshalling/river/RiverUnmarshaller.java b/river/src/main/java/org/jboss/marshalling/river/RiverUnmarshaller.java index a5026eba..029b8776 100644 --- a/river/src/main/java/org/jboss/marshalling/river/RiverUnmarshaller.java +++ b/river/src/main/java/org/jboss/marshalling/river/RiverUnmarshaller.java @@ -1018,7 +1018,7 @@ ClassDescriptor doReadClassDescriptor(final int classType, final boolean require case ID_SERIALIZABLE_CLASS: { int idx = classCache.size(); classCache.add(null); - final String className = readString(); + final String className = configuredVersion >= 4 ? readObject(String.class) : readString(); final long uid = readLong(); Class clazz = null; try { @@ -1033,7 +1033,7 @@ ClassDescriptor doReadClassDescriptor(final int classType, final boolean require final ClassDescriptor[] descriptors = new ClassDescriptor[cnt]; final boolean[] unshareds = new boolean[cnt]; for (int i = 0; i < cnt; i ++) { - names[i] = readUTF(); + names[i] = configuredVersion >= 4 ? readObject(String.class) : readUTF(); descriptors[i] = doReadClassDescriptor(readUnsignedByte(), true); unshareds[i] = readBoolean(); }