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

Reply via email to