[
https://issues.apache.org/jira/browse/OCM-65?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Maxim Zinal updated OCM-65:
---------------------------
Fix Version/s: 2.0.1
Status: Patch Available (was: Open)
> ObjectContentManager.copy() does not work properly for objects containing
> collections
> -------------------------------------------------------------------------------------
>
> Key: OCM-65
> URL: https://issues.apache.org/jira/browse/OCM-65
> Project: Jackrabbit OCM
> Issue Type: Bug
> Affects Versions: 2.0.0, 2.0.1
> Environment: Debian/GNU Linux 7.2
> Oracle JDK 7
> Reporter: Maxim Zinal
> Fix For: 2.0.1
>
> Attachments: OCM-65.patch
>
>
> When trying to use ObjectContentManager.copy() service to create a copy of
> JCR-OCM serialized object containing bean collections, I have found that this
> method retains only the last collection entry.
> After some investigation I found that private static method
> ObjectContentManagerImpl.copy() does not properly handle indexed JCR nodes.
> Here are the relevant lines of code from current Subversion trunk:
> {noformat}
> 1119 for (NodeIterator iter = srcNode.getNodes(); iter.hasNext(); ) {
> 1120 Node node = iter.nextNode();
> 1121 Node child;
> 1122 // check if the subnode is autocreated
> 1123 if (!node.getDefinition().isAutoCreated() &&
> destNode.hasNode(node.getName())) {
> 1124 child = destNode.getNode(node.getName());
> 1125 } else {
> 1126 child = destNode.addNode(node.getName(),
> node.getPrimaryNodeType().getName());
> 1127 }
> 1128 copy(node, child);
> 1129 }
> {noformat}
> At line 1123 isAutoCreated() returns false for our case, and hasNode() always
> returns true for all but the first indexed node. So it ends with replacing
> every previous node with the next one, up to the last indexed node.
> I have added an additional condition to line 1123, to check for indexed
> nodes, so that it looks like this:
> {noformat}
> if (!node.getDefinition().isAutoCreated() && node.getIndex()==1 &&
> destNode.hasNode(node.getName()))
> {noformat}
> In that case ObjectContentManager.copy() performs properly.
--
This message was sent by Atlassian JIRA
(v6.2#6252)