You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2021/08/08 10:27:42 UTC

[felix-dev] branch FELIX-6442 updated: FELIX-6442 : NPE when generating ServiceReferenceDTOs

This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch FELIX-6442
in repository https://gitbox.apache.org/repos/asf/felix-dev.git


The following commit(s) were added to refs/heads/FELIX-6442 by this push:
     new 72c9f17  FELIX-6442 : NPE when generating ServiceReferenceDTOs
72c9f17 is described below

commit 72c9f17d66dda12ba591840016f05bd4ba1d5622
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Sun Aug 8 12:27:35 2021 +0200

    FELIX-6442 : NPE when generating ServiceReferenceDTOs
---
 .../org/apache/felix/framework/DTOFactory.java     | 35 ++++++++++++++--------
 1 file changed, 22 insertions(+), 13 deletions(-)

diff --git a/framework/src/main/java/org/apache/felix/framework/DTOFactory.java b/framework/src/main/java/org/apache/felix/framework/DTOFactory.java
index 7d38e40..2133e61 100644
--- a/framework/src/main/java/org/apache/felix/framework/DTOFactory.java
+++ b/framework/src/main/java/org/apache/felix/framework/DTOFactory.java
@@ -18,6 +18,15 @@
  */
 package org.apache.felix.framework;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import org.osgi.dto.DTO;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -53,15 +62,6 @@ import org.osgi.resource.dto.RequirementDTO;
 import org.osgi.resource.dto.RequirementRefDTO;
 import org.osgi.resource.dto.WireDTO;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 /**
  * Creates various DTOs provided by the core framework.
  */
@@ -335,18 +335,27 @@ public class DTOFactory
         if (svcs == null)
             return new ServiceReferenceDTO[0];
 
-        ServiceReferenceDTO[] dtos = new ServiceReferenceDTO[svcs.length];
+        List<ServiceReferenceDTO> dtos = new ArrayList<>();
         for (int i=0; i < svcs.length; i++)
         {
-            dtos[i] = createServiceReferenceDTO(svcs[i]);
+            ServiceReferenceDTO dto = createServiceReferenceDTO(svcs[i]);
+            if ( dto != null )
+            {
+                dtos.add(dto);
+            }
         }
-        return dtos;
+        return dtos.toArray(new ServiceReferenceDTO[dtos.size()]);
     }
 
     private static ServiceReferenceDTO createServiceReferenceDTO(ServiceReference<?> svc)
     {
+        final Bundle bundle = svc.getBundle();
+        if ( bundle == null )
+        {
+            return null;
+        }
         ServiceReferenceDTO dto = new ServiceReferenceDTO();
-        dto.bundle = svc.getBundle().getBundleId();
+        dto.bundle = bundle.getBundleId();
         dto.id = (Long) svc.getProperty(Constants.SERVICE_ID);
         Map<String, Object> props = new HashMap<String, Object>();
         for (String key : svc.getPropertyKeys())