[ 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

        

Reply via email to