[openuv] Correcting an uncatched exception in json deserialization (#12511)

* Correcting an uncatched exception in json deserialization

Signed-off-by: clinique <gael@lhopital.org>
This commit is contained in:
Gaël L'hopital 2022-03-24 14:59:33 +01:00 committed by GitHub
parent 5cd28f7096
commit 107a05aa5e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 18 additions and 16 deletions

View File

@ -47,6 +47,6 @@ public class OpenUVBindingConstants {
public static final String SAFE_EXPOSURE = "SafeExposure";
public static final String ELEVATION = "elevation";
public static final Set<ThingTypeUID> BRIDGE_THING_TYPES_UIDS = Set.of(APIBRIDGE_THING_TYPE);
public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(LOCATION_REPORT_THING_TYPE);
public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(APIBRIDGE_THING_TYPE,
LOCATION_REPORT_THING_TYPE);
}

View File

@ -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

View File

@ -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");
}

View File

@ -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()));

View File

@ -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);
}