[ http://issues.apache.org/jira/browse/JCR-586?page=all ]
Jukka Zitting updated JCR-586: ------------------------------ Fix Version/s: 1.1.1 > Removing a mixin that adds a same-name-sibling child node throws an > ItemNotFoundException > ----------------------------------------------------------------------------------------- > > Key: JCR-586 > URL: http://issues.apache.org/jira/browse/JCR-586 > Project: Jackrabbit > Issue Type: Bug > Components: core, nodetype > Affects Versions: 1.0, 1.0.1, 1.1, 0.9 > Environment: Tested with trunk from 04-Oct-2006 (1.1) > Reporter: Michael Daglian > Assigned To: Stefan Guggisberg > Priority: Minor > Fix For: 1.1.1 > > > Apologies in advance if this has previously been noted in JIRA or on the > lists but I couldn't find anything. When removing a mixin that defines a > same-name-sibling child an ItemNotFoundException is thrown due to child node > indicies not being maintained. A similar method of NodeImpl (onRemove) > recongnized this and amended to remove from the tail but the removeMixin also > has this issue. > Simple test reproduction: > Types: > [mix:foo] mixin > + bar (nt:bar) multiple > > [nt:bar] > nt:unstructured, mix:referenceable > Code: > public class RemoveMixinTest extends AbstractServerTest { > private static final String MIXIN = "mix:foo"; > private static final String CHILD = "bar"; > private static final String PTYPE = "nt:bar"; > > public void testRemoveMixin() throws RepositoryException { > Session session = getSession(); > Node root = session.getRootNode().addNode("root"); > root.addMixin(MIXIN); > > root.addNode(CHILD, PTYPE); > root.addNode(CHILD, PTYPE); > root.addNode(CHILD, PTYPE); > > session.save(); > > for (NodeIterator it = root.getNodes(); it.hasNext(); ) { > Node node = it.nextNode(); > System.out.println(node.getPath() + " : " + node.getUUID()); > } > > try { > root.removeMixin(MIXIN); > root.save(); > } catch (RepositoryException ex) { > ex.printStackTrace(); > } > } > } > Output: > /root/bar : 0b09e0b4-0727-4194-978a-4eadfbf93fa8 > /root/bar[2] : 84d5e556-6f12-43fb-98e3-614bcf1f7bb7 > /root/bar[3] : 8db95029-df3b-4e26-affb-438de0206cf5 > javax.jcr.ItemNotFoundException: 8db95029-df3b-4e26-affb-438de0206cf5 > at > org.apache.jackrabbit.core.ItemManager.createItemInstance(ItemManager.java:463) > at org.apache.jackrabbit.core.ItemManager.getItem(ItemManager.java:319) > at org.apache.jackrabbit.core.NodeImpl.removeMixin(NodeImpl.java:1212) > at org.apache.jackrabbit.core.NodeImpl.removeMixin(NodeImpl.java:2624) > at > com.ms.appmw.rcf.server.RemoveMixinTest.testRemoveMixin(RemoveMixinTest.java:48) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:585) > at junit.framework.TestCase.runTest(TestCase.java:154) > at msjava.base.testutils.junit3.MSTestCase.runTest(MSTestCase.java:203) > at > msjava.base.testutils.junit3.TestCaseTearDownEvenIfSetUpFails.runBare(TestCaseTearDownEvenIfSetUpFails.java:92) > at msjava.base.testutils.junit3.MSTestCase.runBare(MSTestCase.java:170) > at junit.framework.TestResult$1.protect(TestResult.java:106) > The missing UUID for the last node is the one not found because upon removal > of the second the index [2] is still valid. Thanks! -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira