Index: src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleDbPersistenceManager.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleDbPersistenceManager.java (revision 598977) +++ src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleDbPersistenceManager.java (working copy) @@ -31,7 +31,6 @@ import org.apache.jackrabbit.core.persistence.bundle.util.BundleBinding; import org.apache.jackrabbit.core.persistence.bundle.util.ErrorHandling; import org.apache.jackrabbit.core.persistence.bundle.util.StringIndex; -import org.apache.jackrabbit.core.persistence.util.Serializer; import org.apache.jackrabbit.core.persistence.util.BLOBStore; import org.apache.jackrabbit.core.persistence.util.FileSystemBLOBStore; import org.apache.jackrabbit.core.fs.FileSystemResource; @@ -1052,7 +1051,7 @@ } ResultSet rs = null; - InputStream in = null; + DataInputStream din = null; try { Statement stmt = connectionManager.executeStmt( nodeReferenceSelectSQL, getKey(targetId.getTargetId().getUUID())); @@ -1061,10 +1060,8 @@ throw new NoSuchItemStateException(targetId.toString()); } - in = rs.getBinaryStream(1); - NodeReferences refs = new NodeReferences(targetId); - Serializer.deserialize(refs, in); - + din = new DataInputStream(rs.getBinaryStream(1)); + NodeReferences refs = binding.readState(din, targetId, this); return refs; } catch (Exception e) { if (e instanceof NoSuchItemStateException) { @@ -1074,7 +1071,7 @@ log.error(msg, e); throw new ItemStateException(msg, e); } finally { - closeStream(in); + closeStream(din); closeResultSet(rs); } } @@ -1101,7 +1098,9 @@ ByteArrayOutputStream out = new ByteArrayOutputStream(INITIAL_BUFFER_SIZE); // serialize references - Serializer.serialize(refs, out); + DataOutputStream dout = new DataOutputStream(out); + binding.writeState(new DataOutputStream(out), refs); + dout.close(); Object[] params = createParams(refs.getTargetId().getUUID(), out.toByteArray(), true); connectionManager.executeStmt(sql, params); Index: src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleFsPersistenceManager.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleFsPersistenceManager.java (revision 598977) +++ src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleFsPersistenceManager.java (working copy) @@ -27,7 +27,6 @@ import org.apache.jackrabbit.core.persistence.bundle.util.ErrorHandling; import org.apache.jackrabbit.core.persistence.bundle.util.BundleBinding; import org.apache.jackrabbit.core.persistence.bundle.util.TrackingInputStream; -import org.apache.jackrabbit.core.persistence.util.Serializer; import org.apache.jackrabbit.core.persistence.util.BLOBStore; import org.apache.jackrabbit.core.persistence.util.FileSystemBLOBStore; import org.apache.jackrabbit.core.NodeId; @@ -527,16 +526,15 @@ if (!initialized) { throw new IllegalStateException("not initialized"); } - InputStream in = null; + DataInputStream din = null; try { String path = buildNodeReferencesFilePath(null, targetId).toString(); if (!itemFs.exists(path)) { // special case throw new NoSuchItemStateException(targetId.toString()); } - in = itemFs.getInputStream(path); - NodeReferences refs = new NodeReferences(targetId); - Serializer.deserialize(refs, in); + din = new DataInputStream(itemFs.getInputStream(path)); + NodeReferences refs = binding.readState(din, targetId, this); return refs; } catch (NoSuchItemStateException e) { throw e; @@ -545,7 +543,7 @@ BundleFsPersistenceManager.log.error(msg, e); throw new ItemStateException(msg, e); } finally { - closeStream(in); + closeStream(din); } } @@ -567,7 +565,11 @@ itemFs.createFolder(dir); } OutputStream out = itemFs.getOutputStream(fileName); - Serializer.serialize(refs, out); + + DataOutputStream dout = new DataOutputStream(out); + binding.writeState(new DataOutputStream(out), refs); + dout.close(); + out.close(); } catch (Exception e) { String msg = "failed to write property state: " + refs.getTargetId(); Index: src/main/java/org/apache/jackrabbit/core/persistence/bundle/Oracle9PersistenceManager.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/persistence/bundle/Oracle9PersistenceManager.java (revision 598977) +++ src/main/java/org/apache/jackrabbit/core/persistence/bundle/Oracle9PersistenceManager.java (working copy) @@ -20,7 +20,6 @@ import org.slf4j.LoggerFactory; import org.apache.jackrabbit.core.persistence.PMContext; import org.apache.jackrabbit.core.persistence.bundle.util.NodePropBundle; -import org.apache.jackrabbit.core.persistence.util.Serializer; import org.apache.jackrabbit.core.state.ItemStateException; import org.apache.jackrabbit.core.state.NodeReferences; @@ -153,7 +152,9 @@ ByteArrayOutputStream out = new ByteArrayOutputStream(INITIAL_BUFFER_SIZE); // serialize references - Serializer.serialize(refs, out); + DataOutputStream dout = new DataOutputStream(out); + binding.writeState(new DataOutputStream(out), refs); + dout.close(); // we are synchronized on this instance, therefore we do not // not have to additionally synchronize on the preparedStatement Index: src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java (revision 598977) +++ src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java (working copy) @@ -138,10 +138,16 @@ throws IOException { NodeReferences state = new NodeReferences(id); int count = in.readInt(); // count & version - // int version = (count >> 24) | 0x0ff; + int version = (count >> 24) & 0x0ff; count &= 0x00ffffff; for (int i = 0; i < count; i++) { - state.addReference(readPropertyId(in)); // propertyId + if (version >= VERSION_1) { + state.addReference(readPropertyId(in)); // propertyId + } + else { + // for backward compatibility + state.addReference(PropertyId.valueOf(in.readUTF())); + } } return state; } @@ -423,7 +429,7 @@ */ public void writePropertyId(DataOutputStream out, PropertyId id) throws IOException { writeID(out, id.getParentId()); - writeQName(out, id.getName()); + writeIndexedQName(out, id.getName()); } /** @@ -434,7 +440,7 @@ */ public PropertyId readPropertyId(DataInputStream in) throws IOException { UUID uuid = readUUID(in); - Name name = readQName(in); + Name name = readIndexedQName(in); return new PropertyId(new NodeId(uuid), name); } }