Rupert Westenthaler created STANBOL-898:
-------------------------------------------

             Summary: The Stanbol Enhancer StreamSource implementations MUST 
NOT close the parsed InputStream
                 Key: STANBOL-898
                 URL: https://issues.apache.org/jira/browse/STANBOL-898
             Project: Stanbol
          Issue Type: Bug
          Components: Enhancer
            Reporter: Rupert Westenthaler
            Assignee: Rupert Westenthaler
            Priority: Critical


As reported by Andrea Di Menna [1] the current StreamSource implementation my 
cause 

java.io.IOException: Stream closed
at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:308)
at 
org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:169)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1025)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:999)
at org.apache.commons.io.IOUtils.toByteArray(IOUtils.java:218)
at 
org.apache.stanbol.enhancer.servicesapi.impl.StreamSource.getData(StreamSource.java:136)
at 
org.apache.stanbol.enhancer.contentitem.inmemory.InMemoryContentItemFactory.createBlob(InMemoryContentItemFactory.java:80)
at 
org.apache.stanbol.enhancer.servicesapi.impl.AbstractContentItemFactory.createContentItem(AbstractContentItemFactory.java:121)
at 
org.apache.stanbol.enhancer.servicesapi.impl.AbstractContentItemFactory.createContentItem(AbstractContentItemFactory.java:90)
at 
org.apache.stanbol.enhancer.jersey.reader.ContentItemReader.readFrom(ContentItemReader.java:261)
at 
org.apache.stanbol.enhancer.jersey.reader.ContentItemReader.readFrom(ContentItemReader.java:69)

in cases where the Servlet Container reuses parsed InputStreams - what seams to 
be the case with Tomcat 7.

The reason for that is that the finalize() method of the StreamSource does call 
close() on the initially parsed InputStream. This might results in Situations 
where close() is called on an InputStream that is currently used by an other 
connection.

To Solve this the following two adaptions are planed:

1. The StreamSource MUST NOT close parsed Streams.
2. Add the Requirement that the ContentItemFactory needs to consume all data 
from parsed ContentSource implementation before returning from create** methods.

While (1) solves the reported issue and also allows for reusing streams by the 
container (2) is required to allow users outside a container to know when they 
can safely close streams.


[2] http://markmail.org/message/k4vh7ekar56flhvd

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to