Well, that solves the mystery. When running in Eclipse, what you get returned is a real system path, as you can find it with your file explorer. When running as a standalone version, there is no such thing. Of course, you can find a URL to the resource, but you can't create a valid File instance (you could only point to a jar, but not inside). The URL btw. is also something proprietary to Equinox, so don't expect your solution to work in any other FW. This is a part of the OSGi spec, that is left to implementers. Best way to go is define a user property with a search path or use something like a relative location to your user directory.
Cheers, Mirko On Tue, Feb 2, 2010 at 9:50 AM, Asier Aranbarri Beldarrain <[email protected]> wrote: > Sorry Mirko, but I think it's not a problem of me making bad paths. I mean, > this is the code I have that DOES load the .properties from a relative path: > > URL entry = bc.getBundle().getEntry("."); > if (entry != null) > { > URLConnection connection = entry.openConnection(); > if (connection instanceof BundleURLConnection) > { > URL fileURL = ((BundleURLConnection) connection).getFileURL(); > URI uri = new URI(fileURL.toString()); > path = new File(uri).getAbsolutePath(); > System.out.printf("This is the path: %s\n", path); > } > } //then make the load(), ... > > It works on Eclipse, but not outside it. The code you passed me just writes > the path eclipse is working on, but what I need is to pass a .jar to another > client and load the .properties WITHOUT knowing in what path he will put the > .properties file. The only thing he needs is to put the .properties and the > .jar in the same folder, don't know if I explain. > Anyway, thanks for all, > > > Asier > > On 1 February 2010 14:36, Mirko Jahn <[email protected]> wrote: >> >> For what it's worth, if it seems to work within Eclipse but not >> outside of it and you're using relative paths... Most likely you're >> path is just wrong. Just print out the path you're in: >> >> System.out.println("Dir: "+new File(".").getAbsolutePath()); >> or >> System.out.println("Dir: "+System.getProperty("user.dir")); >> >> This should be different in the two scenarios you described. Fix your >> path I ensure you, it'll work. >> >> Cheers, >> Mirko >> >> On Mon, Feb 1, 2010 at 11:28 AM, Neil Bartlett <[email protected]> >> wrote: >> > Asier, >> > >> > What you asked for was a way to read a file that is external to the >> > classpath. FileInputStream gives you that. Of course the file must >> > exist on the filesystem of the machine on which the bundle ends up >> > running. Ensuring it exists is something you must handle -- since I >> > have no idea of your environment, build system, deployment >> > methodology, etc. >> > >> > For what it's worth, your use-case (user-modifiable, external >> > configuration data) is exactly what the OSGi Configuration Admin >> > service is intended for, and furthermore Apache FileInstall gives you >> > a nice front-end for Config Admin. But you insist that you don't want >> > to deploy any other bundles, so... >> > >> > Regards, >> > Neil >> > >> > On Mon, Feb 1, 2010 at 10:11 AM, Asier Aranbarri Beldarrain >> > <[email protected]> wrote: >> >> Hi Neil: >> >> >> >> I can load any file with FileInputStream but it certainly doesn't work >> >> when >> >> I export the bundle (except if I declare an static path). What I need >> >> is to >> >> export the .jar, put the .properties in the same folder as the .jar, >> >> and >> >> load from there. And I cannot get it with FileInputStream , really. I >> >> may be >> >> doing something wrong but I tested (almost) everyway with that method. >> >> >> >> Thanks, >> >> >> >> Asier >> >> >> >> On 1 February 2010 10:58, Neil Bartlett <[email protected]> wrote: >> >>> >> >>> Asier, >> >>> >> >>> FileInputStream certainly does work for loading files outside the >> >>> classpath. It can be used to read any file in the filesystem (subject >> >>> to the O/S security policy, of course). I recommend reading JavaDocs. >> >>> >> >>> Neil >> >>> >> >>> On Mon, Feb 1, 2010 at 9:51 AM, Asier Aranbarri Beldarrain >> >>> <[email protected]> wrote: >> >>> > Hi Miguel: >> >>> > >> >>> > I have an issue with that solution; I need to send just two things, >> >>> > the >> >>> > bundle (bundleX.jar) and a config.properties file, just that. With >> >>> > the >> >>> > file >> >>> > install, wouldn't I need another .jar? >> >>> > >> >>> > Hi Jean: >> >>> > >> >>> > I don't understand that solution(sorry, newby here). Should I >> >>> > implement >> >>> > that >> >>> > code in the META-INF? How could I load it from the .java classes? >> >>> > >> >>> > Hi Neil: >> >>> > >> >>> > NewFileInputStream, getResourceasStream, ... don't work to load >> >>> > files >> >>> > from >> >>> > outside the classpath. They do work inside Eclipse-Equinox, but not >> >>> > when >> >>> > you >> >>> > export the .jar. I tested them all, I think: >> >>> > >> >>> > - propertiesFile.load(new >> >>> > FileInputStream("/config/BD.properties")); >> >>> > - InputStream is = >> >>> > ConfigIni.class.getResourceAsStream("/config/BD.properties"); >> >>> > - InputStream is= >> >>> > this.getClass().getResourceAsStream("/BD.properties"); >> >>> > >> >>> > But they just load dinamically inside Eclipse. >> >>> > >> >>> > Thanks, >> >>> > >> >>> > Asier >> >>> > >> >>> > On 1 February 2010 10:41, Jean-Baptiste Onofré <[email protected]> >> >>> > wrote: >> >>> >> >> >>> >> Hi Neil, >> >>> >> >> >>> >> The FileInputStream() usage is correct too. I simply focus on >> >>> >> another >> >>> >> way >> >>> >> to do it using blueprint :) >> >>> >> >> >>> >> Regards >> >>> >> JB >> >>> >> >> >>> >> Neil Bartlett wrote: >> >>> >>> >> >>> >>> Sorry if I am missing something obvious, but what is wrong with >> >>> >>> "new >> >>> >>> FileInputStream(...)" ? >> >>> >>> >> >>> >>> Neil >> >>> >>> >> >>> >>> On Mon, Feb 1, 2010 at 9:12 AM, Asier Aranbarri Beldarrain >> >>> >>> <[email protected]> wrote: >> >>> >>>> >> >>> >>>> Hi everyone: >> >>> >>>> >> >>> >>>> I need to load a config.properties file from outside an osgi >> >>> >>>> bundle >> >>> >>>> and >> >>> >>>> I'm >> >>> >>>> having real issues getting it. The .properties MUST be outisde >> >>> >>>> the >> >>> >>>> classpath, since it must be modified by the user( put user and >> >>> >>>> password >> >>> >>>> from >> >>> >>>> mysql) and then read from the bundle (bundle.jar). >> >>> >>>> >> >>> >>>> I have no problem loading from outside with an static path or a >> >>> >>>> dynamic >> >>> >>>> path >> >>> >>>> INSIDE eclipse. But when I try to load it dinamycally from the >> >>> >>>> eclipse-independent osgi, I cannot read the file. >> >>> >>>> >> >>> >>>> Is there any way to load a file outside the classpath with a >> >>> >>>> .jar? I >> >>> >>>> repeat >> >>> >>>> that the .properties MUST be outside the classpath. Static paths >> >>> >>>> don't >> >>> >>>> do >> >>> >>>> the work for me since I am forcing the user to put in an specific >> >>> >>>> location >> >>> >>>> and that's not acceptable(also, he's on linux and I on windows, >> >>> >>>> so >> >>> >>>> the >> >>> >>>> path >> >>> >>>> C:\ ... doesnt work). >> >>> >>>> >> >>> >>>> Thank you very much, >> >>> >>>> >> >>> >>>> Asier >> >>> >>>> >> >>> >>>> _______________________________________________ >> >>> >>>> OSGi Developer Mail List >> >>> >>>> [email protected] >> >>> >>>> https://mail.osgi.org/mailman/listinfo/osgi-dev >> >>> >>>> >> >>> >>> _______________________________________________ >> >>> >>> OSGi Developer Mail List >> >>> >>> [email protected] >> >>> >>> https://mail.osgi.org/mailman/listinfo/osgi-dev >> >>> >> >> >>> >> _______________________________________________ >> >>> >> OSGi Developer Mail List >> >>> >> [email protected] >> >>> >> https://mail.osgi.org/mailman/listinfo/osgi-dev >> >>> > >> >>> > >> >>> > _______________________________________________ >> >>> > OSGi Developer Mail List >> >>> > [email protected] >> >>> > https://mail.osgi.org/mailman/listinfo/osgi-dev >> >>> > >> >>> >> >>> _______________________________________________ >> >>> OSGi Developer Mail List >> >>> [email protected] >> >>> https://mail.osgi.org/mailman/listinfo/osgi-dev >> >> >> >> >> >> _______________________________________________ >> >> OSGi Developer Mail List >> >> [email protected] >> >> https://mail.osgi.org/mailman/listinfo/osgi-dev >> >> >> > >> > _______________________________________________ >> > OSGi Developer Mail List >> > [email protected] >> > https://mail.osgi.org/mailman/listinfo/osgi-dev >> > >> >> _______________________________________________ >> OSGi Developer Mail List >> [email protected] >> https://mail.osgi.org/mailman/listinfo/osgi-dev > > > _______________________________________________ > OSGi Developer Mail List > [email protected] > https://mail.osgi.org/mailman/listinfo/osgi-dev > _______________________________________________ OSGi Developer Mail List [email protected] https://mail.osgi.org/mailman/listinfo/osgi-dev
