felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Marco (JIRA)" <j...@apache.org>
Subject [jira] Commented: (FELIX-2318) Possible NPE for jars with null Manifest
Date Tue, 04 May 2010 15:20:55 GMT

    [ https://issues.apache.org/jira/browse/FELIX-2318?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12863839#action_12863839

Marco commented on FELIX-2318:

Yesterday, I stumbled exactly over this NPE, which was not very developer friendly and forced
me to dig quite deep into it (decompiling & debugging).

I'm not sure whether I can agree to Sahoo's suggestion to return a value in this case. I mean,
if there is no proper MANIFEST, it is not a valid OSGi bundle and thus the method installOrUpdateBundle(...)
cannot really return anything meaningful. Or am I overlooking anything?

Anyway, for me (and everyone else not being aware of the MANIFEST.MF being required at the
very beginning of the JAR) a simple exception with a precise error message would have been
most helpful. I therefore recommend to simply add sth. like this:

if (m == null)
  throw new BundleException(
      "The bundle %s does not have a META-INF/MANIFEST.MF! "+
      "Make sure, META-INF and MANIFEST.MF are the first 2 entries in your JAR!",

> Possible NPE for jars with null Manifest
> ----------------------------------------
>                 Key: FELIX-2318
>                 URL: https://issues.apache.org/jira/browse/FELIX-2318
>             Project: Felix
>          Issue Type: Bug
>          Components: File Install
>            Reporter: Sahoo
> JarFile.getManifest() can return null, so caller must check return value for null-ness
to avoid NPE. I see two such occurrences in fileinstall:
> DirectoryWatcher.java:
>     private Bundle installOrUpdateBundle(
>         String bundleLocation, BufferedInputStream is, long checksum)
>         throws IOException, BundleException
>     {
>         is.mark(256 * 1024);
>         JarInputStream jar = new JarInputStream(is);
>         Manifest m = jar.getManifest();
>         String sn = m.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME);
> ...
> BundleTransformer.java:
>             Manifest m = jar.getManifest();
>             if (m.getMainAttributes().getValue(new Attributes.Name("Bundle-SymbolicName"))
!= null)
>             ...

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message