felix-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Richard S. Hall" <he...@ungoverned.org>
Subject Re: Felix throwing IOException instead of FileNotFoundException
Date Wed, 08 Feb 2012 23:31:27 GMT
On 2/8/12 3:48 PM, Richard S. Hall wrote:
> On 2/8/12 15:19 , Irving Cordova wrote:
>> Hi,
>>
>> I am currently using a 3rd party component in a small project of 
>> mine. This
>> component tries to dynamically load resources from a given URL, it does
>> this by trying several extensions for a base name, and returns 
>> success when
>> it finds a resource that matches the base name and extension. For this
>> dynamic loading it depends on URL.openStream(). If openStream returns
>> FileNotFoundException it continues looking, but if openStream returns
>> IOException it assumes something is wrong with the resource, stops 
>> looking
>> and throws an exception. This works fine in a non OSGi environment, and
>> also inside equinox, however it does not work inside Felix. Felix 
>> throws a
>> IOException with the message: "Resource does not exist" instead of a
>> FileNotFoundException. Compare the stack traces:
>>
>> Felix:
>>
>> java.io.IOException: Resource does not exist:
>> bundle://93.0:1/resource/myresource.stg
>> at
>> org.apache.felix.framework.URLHandlersBundleURLConnection.<init>(URLHandlersBundleURLConnection.java:131)

>>
>> at
>> org.apache.felix.framework.URLHandlersBundleStreamHandler.openConnection(URLHandlersBundleStreamHandler.java:64)

>>
>> at java.net.URL.openConnection(URL.java:945)
>> at java.net.URL.openStream(URL.java:1010)
>>
>> Equinox:
>>
>> java.io.FileNotFoundException: /resource/myresource.stg
>> at
>> org.eclipse.osgi.framework.internal.protocol.bundleresource.Handler.findBundleEntry(Handler.java:51)

>>
>> at
>> org.eclipse.osgi.framework.internal.core.BundleResourceHandler.openConnection(BundleResourceHandler.java:175)

>>
>> at java.net.URL.openConnection(URL.java:945)
>> at java.net.URL.openStream(URL.java:1010)
>>
>> Shouldn't the appropriate exception be FileNotFoundException ?
>
> It doesn't necessarily seem like this is more appropriate. We are not 
> talking about a file in the file system, we are talking about a 
> resource in a JAR file. I see nothing in the API JavaDoc that 
> indicates that openConnection() should through a 
> FileNotFoundException, nor specifically should it through such an 
> exception to indicate a less severe error type than IOException.

s/through/throw/g

Sorry about that.

>
> So, I guess the question is, do should we modify the framework to 
> always throw FileNotFoundException when it cannot find the resource to 
> participate in this non-standard protocol?
>
> It's not clear to me that it makes sense to me, but you could open a 
> feature request in JIRA and assign it to the framework component for 
> consideration.

I talked with Thomas Watson (Equinox lead) about this and he agreed that 
IOException is completely reasonable. He said that Equinox throws FNFE 
because that is what URLClassLoader used to do when Equinox used that as 
its class loader, when they switched to a custom class loader a user 
complained when they started throwing IOExceptions so they switched back 
to FNFEs.

I still suggest you open up a feature request issue for the framework so 
we can track it. Thanks.

-> richard

>
> Thanks.
>
> -> richard
>
>>
>> Regards,
>>
>> Irving Cordova
>> http://irvingc.com
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Mime
View raw message