History | Log In     View a printable version of the current page. Get help!  
Issue Details [XML]

Key: SES-225
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Arjohn Kampman
Reporter: Christiaan Fluit
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Sesame

CloseableIterator.close throws NPE when immediately closed

Created: 26/Jan/06 10:10 AM   Updated: 07/Feb/06 11:53 AM
Component/s: Repository API
Affects Version/s: 2.0-alpha-2
Fix Version/s: 2.0-alpha-3


 Description   
When a CloseableIterator obtained from Repository.getStatements is immediately closed, a NullPointerException is thrown, as demonstrated by the following unit test:

    public void testAlpha2() throws SailInitializationException {
        MemoryStore memoryStore = new MemoryStore();

        Repository repository = new Repository(memoryStore);
        repository.initialize();

        CloseableIterator i = repository.getStatements(null, null, null);
        i.close();
    }

This gives the following stacktrace:

java.lang.NullPointerException
at org.openrdf.sesame.sail.query.ConstructQuery$ConstructQueryIterator.close(ConstructQuery.java:255)
at org.openrdf.util.iterator.Iterators.closeCloseable(Iterators.java:61)
at org.openrdf.util.iterator.FilterIterator.close(FilterIterator.java:107)
at org.openrdf.util.iterator.LockingIterator.close(LockingIterator.java:51)
at org.openrdf.sesame.query.GraphQuery$TupleConvertingIterator.close(GraphQuery.java:194)
at org.openrdf.sesame.repository.RStatementIterator.close(RStatementIterator.java:47)
at org.semanticdesktop.aperture.rdf.sesame.TestAlpha2.testAlpha2(TestAlpha2.java:19)
at ... (junit framework)

When i.hasNext() is invoked before i.close(), everything works fine.

The reason for this behaviour is probably the lazy initialization inside org.openrdf.sesame.sail.query.ConstructQuery.ConstructQueryIterator, which never takes place, resulting in an invocation on an internal queue which has not yet been created.

 All   Comments   Change History      Sort Order:
Comment by Arjohn Kampman [26/Jan/06 11:45 AM]
Cleaned up all classes implementing the CloseableIterator interface, fixing several potential issues.