On 16/05/07, Duc Lam Vu <[EMAIL PROTECTED]> wrote:
Hi,
Warmly thanks for your reply.
I want to know value of parameter that is passed to method
Bundle.getEntry(String) and Bundle.getEntryPath(String). Assumed that I
installed a bundle by invoking and passing parameter like that
Bundle.Install("Install//BundleA", inputStream), then I should call
you would normally install a bundle from an existing bundle context, ie:
Bundle newBundle = bundleContext.installBundle(location, input);
BUndle.getEntry("Install/BundleA") and
Bundle.getEntryPath("Install/BundleA")?
once you have your newBundle you could call getEntryPaths to
get a list of all the known paths inside that bundle, for example:
Enumeration e = newBundle .getEntryPaths("/"); // all entries
from bundle root
you can then iterate over this enumeration using 'getEntry' to find
the URL for each path entry - and given the URL you can access
the data and write that out to a JarOutputStream (there are plenty
of examples of writing out jarfiles on the web)
As Thomas said, you must make sure META-INF/MANIFEST.MF
is the first entry in the Jar, followed by other META-INF/* entries.
check out the OSGi javadoc at:
http://www2.osgi.org/javadoc/r4/org/osgi/framework/Bundle.html#getEntryPaths(java.lang.String)
It is very nice if you can give me any code snippet that does the same
thing as what I want to have or give me hints a bit more in detail what I
have to do.
Regards,
Lam.
Thomas Watson <[EMAIL PROTECTED]> wrote:
The only framework independent way I can think of doing this is to create
your own JarOutputStream. Then read all the entries from the bundle using
Bundle.getEntryPaths and Bundle.getEntry and populate the JarOutputStream
with each entry from the bundle. Note that you should ensure all the files
under META-INF are included first in the JarOutputStream. In particular
META-INF/MANIFEST.MF should be the very first entry. You cannot use
Bundle.findEntries because that searches attached fragment bundles which you
do not want to do.
The problem with this approach is the content will likely not be byte for
byte identical to the one you used to install the bundle with. You will
likely use a different compression ratio and you may not use the same entry
order from the original content. But this approach should preserve the
signers if the bundle was signed.
Tom
Duc Lam Vu <[EMAIL PROTECTED]>
Sent by: [EMAIL PROTECTED]
05/15/2007 12:52 PM
Please respond to
OSGi Developer Mail List <[email protected]>
To OSGi Developer Mail List <[email protected]>
cc
Subject Re: [osgi-dev] Install an OSGi Bundle from a Jar file
Thanks for your nice answer.
If I can not get a raw file path of a specific installed bundle but my
purpose is to read a binary content of a specific bundle and store it in a
stream or an array of byte. My question now is that how I can get a binary
content of a specified installed bundle? For instance, I know its BundleID,
SymbolicName. Can getEntry, findEntries methods help me?
Many thanks in advance.
Lam.
Thomas Watson <[EMAIL PROTECTED]> wrote:
The Framework implementation stores the bundle content from an InputStream
in an implementation specific way. The OSGi specification does not specify
that the bundle content must be stored in a File format. For example, the
bundle content could be stored in flash memory or a database or it could be
transformed into a VM specific format for optimization. There is no OSGi
API to get to the raw File path of the bundle content installed.
There are various methods on the Bundle interface for getting bundle
content entries (see getEntry, findEntries, getEntryPaths and getResources).
Tom
Duc Lam Vu <[EMAIL PROTECTED]>
Sent by: [EMAIL PROTECTED]
05/13/2007 08:40 AM
Please respond to
OSGi Developer Mail List <[email protected]>
To OSGi Developer Mail List <[email protected]>
cc
Subject [osgi-dev] Install an OSGi Bundle from a Jar file
Hi all,
I have got a content of a Jar file representing an OSGi bundle in a form of
an InputStream object via Network communication. I want to install this Jar
file by
invoking BundleContext.Install(param1, InputStream stream. If I assign
Param1 with a value of an arbitrary string then later on, when I try to get
a File path of the installed bundle by executing
ServiceReference.getBundle.getLocation, it returns me a
value of the passed string. In fact, I want to get the string that
represents a real File path of the installed OSGi bundle. What should I
assign for the Param1 of the method BundleContext.Install.
Any suggestion?
Best Regards,
Lam.
________________________________
Don't get soaked. Take a quick peak at the forecast
with theYahoo! Search weather
shortcut._______________________________________________
OSGi Developer Mail List
[email protected]
http://www2.osgi.org/mailman/listinfo/osgi-dev
_______________________________________________
OSGi Developer Mail List
[email protected]
http://www2.osgi.org/mailman/listinfo/osgi-dev
________________________________
Sucker-punch spam with award-winning protection.
Try the free Yahoo! Mail
Beta._______________________________________________
OSGi Developer Mail List
[email protected]
http://www2.osgi.org/mailman/listinfo/osgi-dev
_______________________________________________
OSGi Developer Mail List
[email protected]
http://www2.osgi.org/mailman/listinfo/osgi-dev
________________________________
Moody friends. Drama queens. Your life? Nope! - their life, your story.
Play Sims Stories at Yahoo! Games.
_______________________________________________
OSGi Developer Mail List
[email protected]
http://www2.osgi.org/mailman/listinfo/osgi-dev
--
Cheers, Stuart
_______________________________________________
OSGi Developer Mail List
[email protected]
http://www2.osgi.org/mailman/listinfo/osgi-dev