From 107a05aa5edde80369350c6fb018c40a01e31599 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20L=27hopital?= Date: Thu, 24 Mar 2022 14:59:33 +0100 Subject: [PATCH] [openuv] Correcting an uncatched exception in json deserialization (#12511) * Correcting an uncatched exception in json deserialization Signed-off-by: clinique --- .../openuv/internal/OpenUVBindingConstants.java | 4 ++-- .../openuv/internal/OpenUVHandlerFactory.java | 2 +- .../internal/discovery/OpenUVDiscoveryService.java | 12 ++++++------ .../openuv/internal/handler/OpenUVBridgeHandler.java | 12 +++++++----- .../openuv/internal/handler/OpenUVReportHandler.java | 4 ++-- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/OpenUVBindingConstants.java b/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/OpenUVBindingConstants.java index 63ed8835681..00eb53cbe8e 100644 --- a/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/OpenUVBindingConstants.java +++ b/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/OpenUVBindingConstants.java @@ -47,6 +47,6 @@ public class OpenUVBindingConstants { public static final String SAFE_EXPOSURE = "SafeExposure"; public static final String ELEVATION = "elevation"; - public static final Set BRIDGE_THING_TYPES_UIDS = Set.of(APIBRIDGE_THING_TYPE); - public static final Set SUPPORTED_THING_TYPES_UIDS = Set.of(LOCATION_REPORT_THING_TYPE); + public static final Set SUPPORTED_THING_TYPES_UIDS = Set.of(APIBRIDGE_THING_TYPE, + LOCATION_REPORT_THING_TYPE); } diff --git a/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/OpenUVHandlerFactory.java b/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/OpenUVHandlerFactory.java index f34e7150a92..90cae2868b2 100644 --- a/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/OpenUVHandlerFactory.java +++ b/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/OpenUVHandlerFactory.java @@ -71,7 +71,7 @@ public class OpenUVHandlerFactory extends BaseThingHandlerFactory { @Override public boolean supportsThingType(ThingTypeUID thingTypeUID) { - return SUPPORTED_THING_TYPES_UIDS.contains(thingTypeUID) || BRIDGE_THING_TYPES_UIDS.contains(thingTypeUID); + return SUPPORTED_THING_TYPES_UIDS.contains(thingTypeUID); } @Override diff --git a/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/discovery/OpenUVDiscoveryService.java b/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/discovery/OpenUVDiscoveryService.java index 29092f49047..db825f6c033 100644 --- a/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/discovery/OpenUVDiscoveryService.java +++ b/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/discovery/OpenUVDiscoveryService.java @@ -13,10 +13,10 @@ package org.openhab.binding.openuv.internal.discovery; import static org.openhab.binding.openuv.internal.OpenUVBindingConstants.*; +import static org.openhab.binding.openuv.internal.config.ReportConfiguration.LOCATION; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; -import org.openhab.binding.openuv.internal.config.ReportConfiguration; import org.openhab.binding.openuv.internal.handler.OpenUVBridgeHandler; import org.openhab.core.config.discovery.AbstractDiscoveryService; import org.openhab.core.config.discovery.DiscoveryResultBuilder; @@ -75,11 +75,11 @@ public class OpenUVDiscoveryService extends AbstractDiscoveryService implements PointType location = bridge.getLocation(); if (location != null) { ThingUID bridgeUID = bridge.getThing().getUID(); - thingDiscovered(DiscoveryResultBuilder - .create(new ThingUID(LOCATION_REPORT_THING_TYPE, bridgeUID, LOCAL)) - .withLabel("@text/discovery.openuv.uvreport.local.label") - .withProperty(ReportConfiguration.LOCATION, location.toString()) - .withRepresentationProperty(ReportConfiguration.LOCATION).withBridge(bridgeUID).build()); + thingDiscovered( + DiscoveryResultBuilder.create(new ThingUID(LOCATION_REPORT_THING_TYPE, bridgeUID, LOCAL)) + .withLabel("@text/discovery.openuv.uvreport.local.label") + .withProperty(LOCATION, location.toString()).withRepresentationProperty(LOCATION) + .withBridge(bridgeUID).build()); } else { logger.debug("LocationProvider.getLocation() is not set -> Will not provide any discovery results"); } diff --git a/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/handler/OpenUVBridgeHandler.java b/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/handler/OpenUVBridgeHandler.java index 4868bf5034f..541b53409b5 100644 --- a/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/handler/OpenUVBridgeHandler.java +++ b/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/handler/OpenUVBridgeHandler.java @@ -46,6 +46,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; /** * {@link OpenUVBridgeHandler} is the handler for OpenUV API and connects it @@ -114,9 +115,10 @@ public class OpenUVBridgeHandler extends BaseBridgeHandler { } public @Nullable OpenUVResult getUVData(String latitude, String longitude, String altitude) { + String url = String.format(QUERY_URL, latitude, longitude, altitude); + String jsonData = ""; try { - String jsonData = HttpUtil.executeUrl("GET", String.format(QUERY_URL, latitude, longitude, altitude), - header, null, null, REQUEST_TIMEOUT_MS); + jsonData = HttpUtil.executeUrl("GET", url, header, null, null, REQUEST_TIMEOUT_MS); OpenUVResponse uvResponse = gson.fromJson(jsonData, OpenUVResponse.class); if (uvResponse != null) { String error = uvResponse.getError(); @@ -126,13 +128,13 @@ public class OpenUVBridgeHandler extends BaseBridgeHandler { } throw new OpenUVException(error); } + } catch (JsonSyntaxException e) { + logger.debug("No valid json received when calling `{}` : {}", url, jsonData); } catch (IOException e) { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage()); } catch (OpenUVException e) { if (e.isQuotaError()) { - LocalDate today = LocalDate.now(); - LocalDate tomorrow = today.plusDays(1); - LocalDateTime tomorrowMidnight = tomorrow.atStartOfDay().plusMinutes(2); + LocalDateTime tomorrowMidnight = LocalDate.now().plusDays(1).atStartOfDay().plusMinutes(2); updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, String .format("@text/offline.comm-error-quota-exceeded [ \"%s\" ]", tomorrowMidnight.toString())); diff --git a/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/handler/OpenUVReportHandler.java b/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/handler/OpenUVReportHandler.java index a51a59f0a13..30940a74d30 100644 --- a/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/handler/OpenUVReportHandler.java +++ b/bundles/org.openhab.binding.openuv/src/main/java/org/openhab/binding/openuv/internal/handler/OpenUVReportHandler.java @@ -159,13 +159,13 @@ public class OpenUVReportHandler extends BaseThingHandler { @Override public void dispose() { logger.debug("Disposing the OpenUV handler."); - ScheduledFuture refresh = this.refreshJob; + ScheduledFuture refresh = refreshJob; if (refresh != null && !refresh.isCancelled()) { refresh.cancel(true); } refreshJob = null; - ScheduledFuture uxMax = this.uvMaxJob; + ScheduledFuture uxMax = uvMaxJob; if (uxMax != null && !uxMax.isCancelled()) { uxMax.cancel(true); }