atom feed3 messages in org.apache.incubator.uima-devPotential problems in the XmlInputSou...
FromSent OnAttachments
Baptiste GaillardMar 10, 2010 8:35 am 
Thilo GoetzMar 11, 2010 1:26 am 
Baptiste GaillardMar 18, 2010 7:06 am 
Subject:Potential problems in the XmlInputSource class...
From:Baptiste Gaillard (b_ga@hotmail.com)
Date:Mar 10, 2010 8:35:08 am
List:org.apache.incubator.uima-dev

Hi,

I've read multiple messages about UIMA and OSGI on this forum.

On our project we have successfully integrated UIMA components inside OSGI
Bundle (our solution provides an automatic OSGI Bundle genration system which
take PEAR files so developpers do not have to worry about OSGI).

We have encountered a JAR locking problem inside the XmlInputSource class, the
problem comes from this instruction (WmlInputSource line 90) :

mInputStream = mURL.openStream()

When we do that with a URL which refers to a file inside a JAR file a
JarURLConnection is used.

JarURLConnection seems to have a bug because in the destroy method of
XmlInputSource those instruction do not close the ZipFile associated to the
JARUrlConnection.

if (mInputStream != null) { mInputStream.close(); // DO NOT CLOSE THE ASSOCIATED ZipFile !!! }

The bug has been reported in the SUN Bug Database: // see
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4386865

This is problematic with OSGI because we can unload our Bundles (UIMA components
in our case ;-) ) but never delete theme from the file system after...

The solution to close the ZipFiles in XmlInputSource is to add the following
instructions in the constructor and destroy method:

private URLConnection urlConnection;

public XMLInputSource(String aUrlOrFileName) throws IOException { //try as URL first, then as file name try { mURL = new URL(aUrlOrFileName); } catch (MalformedURLException e) { mURL = new File(aUrlOrFileName).toURL(); }

this.urlConnection = mURL.openConnection();

mInputStream = mURL.openStream(); }

public void close() throws IOException { if (mInputStream != null) { mInputStream.close(); }

if((this.urlConnection != null) && (this.urlConnection instanceof
JarURLConnection)) { ((JarURLConnection)urlConnection).getJarFile().close(); }

mURL = null; }

Is it possible to include those modifications in the next UIMA release ?

Thanks,