On Sunday 09 October 2005 11:27, Stefan Guggisberg wrote:
> hi martin
>
> On 10/9/05, Martin Perez <mpermar@gmail.com> wrote:
> > Hi.
> >
> > I'm having problems when removing a node. This is my source code (very
> > simple):
> >
> > javax.jcr.Node directory = session.getNodeByUUID(directoryId);
> > directory.remove();
> > session.save();
> >
> > But strangely this throws an exception:
> >
> > java.lang.UnsupportedOperationException: IteratorChains must contain at
> > least one Iterator
> > at
> > org.apache.commons.collections.iterators.IteratorChain.checkChainIntegrit
> >y(Unknown Source)
> > at
> > org.apache.commons.collections.iterators.IteratorChain.lockChain(Unknown
> > Source)
> > at org.apache.commons.collections.iterators.IteratorChain.hasNext(Unknown
> > Source)
> > at
> > org.apache.jackrabbit.core.ItemImpl.getTransientStates(ItemImpl.java:376)
> > at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1215)
> > at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:765)
> > at org.jlibrary.core.jcr.JCRRepositoryService.removeDirectory(
> > JCRRepositoryService.java:127)
> > at
> > org.jlibrary.client.ui.repository.actions.DeleteAction.deleteDirectory(
> > DeleteAction.java:275)
> > at org.jlibrary.client.ui.repository.actions.DeleteAction.deleteItem(
> > DeleteAction.java:350)
> > at org.jlibrary.client.ui.repository.actions.DeleteAction.access$1(
> > DeleteAction.java:343)
> > at org.jlibrary.client.ui.repository.actions.DeleteAction$1.run(
> > DeleteAction.java:158)
> > at org.eclipse.core.internal.jobs.Worker.run(Worker.java:76)
> >
> > Am I doing something wrong?
>
> don't think so, looks like a bug to me;) i'll have a look at it tomorrow.
>
> thanks
> stefan
>
> > Regards,
> >
> > Martin
This occurs when commons-collections-2.1 is on the classpath before 3.1. The
implementation of IteratorChain in 2.1 throws an exception if there are no
members to iterate over when hasNext() or next() are called. IMO this is
plain wrong as it changes the definition of Iterator which is the interface
anyone is likely to use the class with. I think this is why it changed in
3.1. My current fix was to write a simple wrapper class that caught the
exception and made the iterator act as I would expect.
Campbell
________________________________________________________________________________
This email (and any attachments) is private and confidential, and is intended
solely for the addressee. If you have received this communication in error
please remove it and inform us via telephone or email.
Although we take all possible steps to ensure mail and attachments are free
from malicious content, malware and viruses, we cannot accept any responsibility
whatsoever for any changes to content outwith our administrative bounds.
The views represented within this mail are solely the view of the
author and do not reflect the views of the organisation as a whole.
________________________________________________________________________________
Graham Technology plc http:// www.grahamtechnology.com
________________________________________________________________________________
|