Return-Path: X-Original-To: apmail-felix-commits-archive@www.apache.org Delivered-To: apmail-felix-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 2556BD971 for ; Sun, 30 Sep 2012 10:33:25 +0000 (UTC) Received: (qmail 94786 invoked by uid 500); 30 Sep 2012 10:33:24 -0000 Delivered-To: apmail-felix-commits-archive@felix.apache.org Received: (qmail 94485 invoked by uid 500); 30 Sep 2012 10:33:18 -0000 Mailing-List: contact commits-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list commits@felix.apache.org Received: (qmail 94439 invoked by uid 99); 30 Sep 2012 10:33:16 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 30 Sep 2012 10:33:16 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 30 Sep 2012 10:33:14 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id E9F0D2388900 for ; Sun, 30 Sep 2012 10:32:31 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1391982 - /felix/trunk/webconsole-plugins/upnp/src/main/java/org/apache/felix/webconsole/plugins/upnp/internal/ControlServlet.java Date: Sun, 30 Sep 2012 10:32:31 -0000 To: commits@felix.apache.org From: vvalchev@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120930103231.E9F0D2388900@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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++)