Bug 385112 - NPE when checking if a bundle is fragment
diff --git a/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/internal/BundleUtil.java b/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/internal/BundleUtil.java
index 0c166c4..3799aae 100644
--- a/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/internal/BundleUtil.java
+++ b/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/internal/BundleUtil.java
@@ -30,6 +30,7 @@
*
*/
public final class BundleUtil {
+ private static final String FRAGMENT_HOST_HEADER = "Fragment-Host";
/**
* Answer the string representation of the exported packages of the bundle
@@ -40,6 +41,9 @@
*/
public static String[] getBundleExportedPackages(Bundle bundle) {
BundleWiring wiring = bundle.adapt(BundleWiring.class);
+ if (wiring == null) {
+ return new String[0];
+ }
List<BundleWire> providedWires = wiring.getProvidedWires(BundleRevision.PACKAGE_NAMESPACE);
List<String> packages = new ArrayList<String>();
for(BundleWire wire: providedWires){
@@ -61,6 +65,9 @@
*/
public static String[] getBundleImportedPackages(Bundle bundle) {
BundleWiring wiring = bundle.adapt(BundleWiring.class);
+ if (wiring == null) {
+ return new String[0];
+ }
List<BundleWire> providedWires = wiring.getRequiredWires(BundleRevision.PACKAGE_NAMESPACE);
List<String> packages = new ArrayList<String>();
for(BundleWire wire: providedWires){
@@ -106,7 +113,11 @@
*/
public static boolean isBundleFragment(Bundle bundle) {
BundleWiring wiring = bundle.adapt(BundleWiring.class);
- return 0 != (wiring.getRevision().getTypes() & BundleRevision.TYPE_FRAGMENT);
+ if (wiring != null) {
+ return 0 != (wiring.getRevision().getTypes() & BundleRevision.TYPE_FRAGMENT);
+ } else {
+ return bundle.getHeaders().get(FRAGMENT_HOST_HEADER) != null;
+ }
}
/**
@@ -153,7 +164,11 @@
*/
public static boolean isRequired(Bundle bundle) {
BundleWiring wiring = bundle.adapt(BundleWiring.class);
- return wiring.getProvidedWires(BundleRevision.BUNDLE_NAMESPACE).size() > 0;
+ if (wiring != null) {
+ return wiring.getProvidedWires(BundleRevision.BUNDLE_NAMESPACE).size() > 0;
+ } else {
+ return false;
+ }
}
/**
@@ -165,7 +180,11 @@
*/
public static boolean isRemovalPending(Bundle bundle) {
BundleWiring wiring = bundle.adapt(BundleWiring.class);
- return (!wiring.isCurrent()) && wiring.isInUse();
+ if (wiring != null) {
+ return (!wiring.isCurrent()) && wiring.isInUse();
+ } else {
+ return false;
+ }
}
}