yes, the usecases for this are somewhat rare but they do come up.  Most of 
the time it relates to bundles that supply files to non-OSGi aware 
systems.  For example:
- a bundle that supplies an executable that is in turn exec()'d by the 
bundle.  The executalbe must be directly in the filesystem since the OS 
does not know how to read JARs.  Native headers don't do it for you since 
you actually need the real path fo the executable in the file system
- a bundle that supplies content to a browser.  A help or doc system for 
exampe.  Again, the browser does not know how to look into JARs so the 
content must be directly in the filesystem and you need a file: url to 
pass to the browser

We've seen both of these (and more) in Eclipse and so added the 
FileLocator.toFileURL() helper method Erik mentioned.    Here is the 
Javadoc

        /**
         * Converts a URL that uses a user-defined protocol into a URL 
that uses the file
         * protocol. The contents of the URL may be extracted into a cache 
on the file-system
         * in order to get a file URL. 
         * <p>
         * If the protocol for the given URL is not recognized by this 
converter, the original
         * URL is returned as-is.
         * </p>
         * @param url the original URL
         * @return the converted file URL or the original URL passed in if 
it is 
         *      not recognized by this converter
         * @throws IOException if an error occurs during the conversion
         */

In practice this takes things that you would get back from getResource or 
getEntry and converts them to file:.  In the case of a directory based 
bundle, the file is likely already directly in the filesystem so its file: 
url is returned.  In the case of a JAR'd bundle, the file (or directory) 
is extracted to a cache and that location returned. 

Jeff




"Richard S. Hall" <[EMAIL PROTECTED]> 
09/13/2006 07:52 PM
Please respond to
felix-dev@incubator.apache.org


To
felix-dev@incubator.apache.org
cc

Subject
Re: OSGi URL to file






No, there is no standard way, nor any equivalent method in Felix.

This is something you could construct for Felix, perhaps, but it seems 
like bad form since the whole point of getResource() is to eliminate the 
dependencies on file locations.

And what happens if the resource is in a JAR file, then it will never be 
a file: resource?

You might be trying to do something and this is the only way to do it, 
but it would certainly be better if there was another way.

-> richard

Erik Bengtson wrote:
> Hi,
>
> I need to convert the URL given by
> URL url =
> 
Bundle.loadClass('something').getClassLoader().getResource('anotherthing');
>
> Using equinox I get "bundleresource://" protocol, so I want to convert 
to
> file://.
>
> To convert I use:
>
> URL fileURL = org.eclipse.core.runtime.FileLocator.toFileURL(url);
>
> Is there an Felix equivalent or in the OSGI standard?
>
> Thanks,
>
> Erik Bengtson
>
>
> PS:
> Richard,
>
> thanks for the previous answer regarding best pratices on dependencies.
> 

Reply via email to