[bondhome] Fix fatal Null Pointer errors (#14103)

* Fix fatal Null Pointer errors

Signed-off-by: Michael Lobstein <michael.lobstein@gmail.com>
This commit is contained in:
mlobstein 2022-12-30 02:23:45 -06:00 committed by GitHub
parent dbaf081daa
commit dd8eb4701e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 7 additions and 4 deletions

View File

@ -35,6 +35,7 @@ public enum BondDeviceType {
FIREPLACE(THING_TYPE_BOND_FIREPLACE), FIREPLACE(THING_TYPE_BOND_FIREPLACE),
@SerializedName("GX") @SerializedName("GX")
GENERIC_DEVICE(THING_TYPE_BOND_GENERIC); GENERIC_DEVICE(THING_TYPE_BOND_GENERIC);
// TODO: add Light ("LT") type
private ThingTypeUID deviceTypeUid; private ThingTypeUID deviceTypeUid;

View File

@ -120,7 +120,9 @@ public class BondHttpApi {
String json = request("/v2/devices/" + deviceId); String json = request("/v2/devices/" + deviceId);
logger.trace("BondHome device info : {}", json); logger.trace("BondHome device info : {}", json);
try { 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) { } catch (JsonParseException e) {
logger.debug("Could not parse device {}'s JSON '{}'", deviceId, json, e); logger.debug("Could not parse device {}'s JSON '{}'", deviceId, json, e);
throw new BondException("@text/offline.comm-error.unparseable-response"); 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); logger.debug("Repeated Bond API calls to {} failed.", uri);
bridgeHandler.setBridgeOffline(ThingStatusDetail.COMMUNICATION_ERROR, bridgeHandler.setBridgeOffline(ThingStatusDetail.COMMUNICATION_ERROR,
"@text/offline.comm-error.api-call-failed"); "@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); } while (true);

View File

@ -96,7 +96,7 @@ public class BondDiscoveryService extends AbstractDiscoveryService implements Th
for (final String deviceId : deviceList) { for (final String deviceId : deviceList) {
BondDevice thisDevice = api.getDevice(deviceId); BondDevice thisDevice = api.getDevice(deviceId);
String deviceName; 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 ThingUID deviceUid = new ThingUID(thisDevice.type.getThingTypeUID(), bridgeUid, deviceId);
final DiscoveryResult discoveryResult = DiscoveryResultBuilder.create(deviceUid) final DiscoveryResult discoveryResult = DiscoveryResultBuilder.create(deviceUid)
.withBridge(bridgeUid).withLabel(thisDevice.name) .withBridge(bridgeUid).withLabel(thisDevice.name)

View File

@ -82,7 +82,7 @@ channel-type.bondhome.timerChannelType.description = Starts a timer for s second
# thing status descriptions # 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.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-api = Bond Bridge API not available.
offline.comm-error.no-response = No response received! offline.comm-error.no-response = No response received!