]> git.basschouten.com Git - openhab-addons.git/commitdiff
[bondhome] Fix fatal Null Pointer errors (#14103)
authormlobstein <michael.lobstein@gmail.com>
Fri, 30 Dec 2022 08:23:45 +0000 (02:23 -0600)
committerGitHub <noreply@github.com>
Fri, 30 Dec 2022 08:23:45 +0000 (09:23 +0100)
* Fix fatal Null Pointer errors

Signed-off-by: Michael Lobstein <michael.lobstein@gmail.com>
bundles/org.openhab.binding.bondhome/src/main/java/org/openhab/binding/bondhome/internal/api/BondDeviceType.java
bundles/org.openhab.binding.bondhome/src/main/java/org/openhab/binding/bondhome/internal/api/BondHttpApi.java
bundles/org.openhab.binding.bondhome/src/main/java/org/openhab/binding/bondhome/internal/discovery/BondDiscoveryService.java
bundles/org.openhab.binding.bondhome/src/main/resources/OH-INF/i18n/bondhome.properties

index e22517437c783122d5e3728a2da25cb22b45d1d5..e8003e8332827dd1c854913c9be18e50db99c853 100644 (file)
@@ -35,6 +35,7 @@ public enum BondDeviceType {
     FIREPLACE(THING_TYPE_BOND_FIREPLACE),
     @SerializedName("GX")
     GENERIC_DEVICE(THING_TYPE_BOND_GENERIC);
+    // TODO: add Light ("LT") type
 
     private ThingTypeUID deviceTypeUid;
 
index c9fd6cd22e8572c596e2e541bee77b20ea470b28..7338d2c3211ba9c66cc3581811f36629e8d6226c 100644 (file)
@@ -120,7 +120,9 @@ public class BondHttpApi {
         String json = request("/v2/devices/" + deviceId);
         logger.trace("BondHome device info : {}", json);
         try {
-            return Objects.requireNonNull(gson.fromJson(json, BondDevice.class));
+            BondDevice device = Objects.requireNonNull(gson.fromJson(json, BondDevice.class));
+            device.actions.removeIf(Objects::isNull);
+            return device;
         } catch (JsonParseException e) {
             logger.debug("Could not parse device {}'s JSON '{}'", deviceId, json, e);
             throw new BondException("@text/offline.comm-error.unparseable-response");
@@ -250,7 +252,7 @@ public class BondHttpApi {
                     logger.debug("Repeated Bond API calls to {} failed.", uri);
                     bridgeHandler.setBridgeOffline(ThingStatusDetail.COMMUNICATION_ERROR,
                             "@text/offline.comm-error.api-call-failed");
-                    throw new BondException("@text/offline.conf-error.api-call-failed", true);
+                    throw new BondException("@text/offline.comm-error.api-call-failed", true);
                 }
             }
         } while (true);
index 46d6dd05469f3a7460b4d25bbc744e9d50866dcb..b839898a0db842e4e24b1ecfbf0284d329179c99 100644 (file)
@@ -96,7 +96,7 @@ public class BondDiscoveryService extends AbstractDiscoveryService implements Th
                 for (final String deviceId : deviceList) {
                     BondDevice thisDevice = api.getDevice(deviceId);
                     String deviceName;
-                    if ((deviceName = thisDevice.name) != null) {
+                    if (thisDevice.type != null && (deviceName = thisDevice.name) != null) {
                         final ThingUID deviceUid = new ThingUID(thisDevice.type.getThingTypeUID(), bridgeUid, deviceId);
                         final DiscoveryResult discoveryResult = DiscoveryResultBuilder.create(deviceUid)
                                 .withBridge(bridgeUid).withLabel(thisDevice.name)
index b102047a2c75acbd69e65cf1851e36dcc829e639..3c0e779f91aea8933ba069fccf78b75b0710dc54 100644 (file)
@@ -82,7 +82,7 @@ channel-type.bondhome.timerChannelType.description = Starts a timer for s second
 
 # thing status descriptions
 
-offline.comm-error.api-call-failed = Bond API call to {} failed: {}
+offline.comm-error.api-call-failed = Bond API call failed.
 offline.comm-error.device-not-found = No Bond device found with the given device id.
 offline.comm-error.no-api = Bond Bridge API not available.
 offline.comm-error.no-response = No response received!