You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by vv...@apache.org on 2012/09/30 12:32:31 UTC

svn commit: r1391982 - /felix/trunk/webconsole-plugins/upnp/src/main/java/org/apache/felix/webconsole/plugins/upnp/internal/ControlServlet.java

Author: vvalchev
Date: Sun Sep 30 10:32:31 2012
New Revision: 1391982

URL: http://svn.apache.org/viewvc?rev=1391982&view=rev
Log:
Fixed FELIX-3669 : NPE in ControlServlet.deviceToJSON
https://issues.apache.org/jira/browse/FELIX-3669

Modified:
    felix/trunk/webconsole-plugins/upnp/src/main/java/org/apache/felix/webconsole/plugins/upnp/internal/ControlServlet.java

Modified: felix/trunk/webconsole-plugins/upnp/src/main/java/org/apache/felix/webconsole/plugins/upnp/internal/ControlServlet.java
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole-plugins/upnp/src/main/java/org/apache/felix/webconsole/plugins/upnp/internal/ControlServlet.java?rev=1391982&r1=1391981&r2=1391982&view=diff
==============================================================================
--- felix/trunk/webconsole-plugins/upnp/src/main/java/org/apache/felix/webconsole/plugins/upnp/internal/ControlServlet.java (original)
+++ felix/trunk/webconsole-plugins/upnp/src/main/java/org/apache/felix/webconsole/plugins/upnp/internal/ControlServlet.java Sun Sep 30 10:32:31 2012
@@ -55,6 +55,8 @@ import org.osgi.util.tracker.ServiceTrac
 public class ControlServlet extends HttpServlet implements ServiceTrackerCustomizer
 {
 
+    private static final long serialVersionUID = -5789642544511401813L;
+
     private static final SimpleDateFormat DATA_FORMAT = new SimpleDateFormat(
         "EEE, d MMM yyyy HH:mm:ss Z"); //$NON-NLS-1$
 
@@ -227,8 +229,11 @@ public class ControlServlet extends Http
 
     private final JSONObject deviceTreeToJSON(ServiceReference ref) throws JSONException
     {
-        UPnPDevice device = (UPnPDevice) tracker.getService(ref);
-        Object[] refs = tracker.getServiceReferences();
+        final UPnPDevice device = (UPnPDevice) tracker.getService(ref);
+        if (null == device)
+        {
+            return null; // the device is dynamically removed
+        }
 
         Object parentUdn = ref.getProperty(UPnPDevice.UDN);
         if (parentUdn == null)
@@ -241,6 +246,7 @@ public class ControlServlet extends Http
         JSONObject json = deviceToJSON(ref, device);
 
         // add child devices
+        final Object[] refs = tracker.getServiceReferences();
         for (int i = 0; refs != null && i < refs.length; i++)
         {
             ref = (ServiceReference) refs[i];
@@ -257,7 +263,6 @@ public class ControlServlet extends Http
             }
             else if (parentUdn.equals(parent))
             {
-                device = (UPnPDevice) tracker.getService(ref);
                 JSONObject deviceJSON = deviceTreeToJSON(ref);
                 if (null != deviceJSON)
                 {
@@ -456,14 +461,19 @@ public class ControlServlet extends Http
             _udn = (String) refs[i].getProperty(UPnPDevice.UDN);
             if (_udn != null && _udn.equals(udn))
             {
-                return (UPnPDevice) tracker.getService(refs[i]);
+                UPnPDevice upnpDevice = (UPnPDevice) tracker.getService(refs[i]);
+                if (null == upnpDevice)
+                {
+                    break; // device not found
+                }
+                return upnpDevice;
             }
         }
 
         throw new IllegalArgumentException("Device '" + udn + "' not found!");
     }
 
-    private final UPnPService getService(UPnPDevice device, String urn)
+    private static final UPnPService getService(UPnPDevice device, String urn)
     {
         UPnPService[] services = device.getServices();
         for (int i = 0; services != null && i < services.length; i++)