My use case is the following:

I want to modify the bytecode of some classes at runtime.

I thought that I could get a url.getConnection().getOutputStream() to do that,
but it does not seems to work (sort of non supported protocol).

Thanks Jeff and Richard again for the reponses.


Quoting Jeff McAffer <[EMAIL PROTECTED]>:

> 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