[dwdunwetter] Improve server problem handling (#15405)
* Fix #14691 * Add country tag --------- Signed-off-by: lsiepel <leosiepel@gmail.com> Signed-off-by: Leo Siepel <leosiepel@gmail.com>
This commit is contained in:
parent
55789bd792
commit
3b30d5ab11
|
@ -51,10 +51,14 @@ public class DwdWarningDataAccess {
|
||||||
stringBuilder.append("&CQL_FILTER=");
|
stringBuilder.append("&CQL_FILTER=");
|
||||||
stringBuilder.append(URLEncoder.encode("WARNCELLID LIKE '" + cellId + "'", StandardCharsets.UTF_8));
|
stringBuilder.append(URLEncoder.encode("WARNCELLID LIKE '" + cellId + "'", StandardCharsets.UTF_8));
|
||||||
logger.debug("Refreshing Data for cell {}", cellId);
|
logger.debug("Refreshing Data for cell {}", cellId);
|
||||||
String rawData = HttpUtil.executeUrl("GET", stringBuilder.toString(), 5000);
|
String rawData = getByURL(stringBuilder.toString());
|
||||||
logger.trace("Raw request: {}", stringBuilder);
|
logger.trace("Raw request: {}", stringBuilder);
|
||||||
logger.trace("Raw response: {}", rawData);
|
logger.trace("Raw response: {}", rawData);
|
||||||
|
|
||||||
|
if (rawData == null || !rawData.startsWith("<?xml") || !rawData.contains("FeatureCollection")) {
|
||||||
|
logger.warn("Communication error occurred while getting data, response is not in expected XML-format");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
return rawData;
|
return rawData;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.warn("Communication error occurred while getting data: {}", e.getMessage());
|
logger.warn("Communication error occurred while getting data: {}", e.getMessage());
|
||||||
|
@ -63,4 +67,8 @@ public class DwdWarningDataAccess {
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getByURL(String url) throws IOException {
|
||||||
|
return HttpUtil.executeUrl("GET", url, 5000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -308,6 +308,6 @@ public class DwdWarningsData {
|
||||||
*/
|
*/
|
||||||
protected void setDataAccess(DwdWarningDataAccess dataAccess) {
|
protected void setDataAccess(DwdWarningDataAccess dataAccess) {
|
||||||
dataAccessCached = new ExpiringCache<>(Duration.ofMinutes(MIN_REFRESH_WAIT_MINUTES),
|
dataAccessCached = new ExpiringCache<>(Duration.ofMinutes(MIN_REFRESH_WAIT_MINUTES),
|
||||||
() -> dataAccess.getDataFromEndpoint(""));
|
() -> dataAccess.getDataFromEndpoint("TestCity"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,5 +7,5 @@
|
||||||
<name>DWD Unwetter Binding</name>
|
<name>DWD Unwetter Binding</name>
|
||||||
<description>This is the binding for DWD Unwetter.</description>
|
<description>This is the binding for DWD Unwetter.</description>
|
||||||
<connection>cloud</connection>
|
<connection>cloud</connection>
|
||||||
|
<countries>de</countries>
|
||||||
</addon:addon>
|
</addon:addon>
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2010-2023 Contributors to the openHAB project
|
||||||
|
*
|
||||||
|
* See the NOTICE file(s) distributed with this work for additional
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Public License 2.0 which is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-2.0
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
|
*/
|
||||||
|
package org.openhab.binding.dwdunwetter.internal.dto;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for {@link org.openhab.binding.dwdunwetter.internal.dto.DwdWarningsDataAccess}
|
||||||
|
*
|
||||||
|
* @author Leo Siepel - Initial contribution
|
||||||
|
*/
|
||||||
|
public class DwdWarningsDataAccessTest {
|
||||||
|
private TestDataProvider testDataProvider = new TestDataProvider();
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp() throws IOException {
|
||||||
|
this.testDataProvider = new TestDataProvider();
|
||||||
|
loadXmlFromFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNullOrBlank() {
|
||||||
|
assertEquals(testDataProvider.getDataFromEndpoint(null), "");
|
||||||
|
assertEquals(testDataProvider.getDataFromEndpoint(""), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testInvalidResponse() {
|
||||||
|
TestDataProvider testDataProvider = new TestDataProvider();
|
||||||
|
testDataProvider.rawData = "Server is not returning xml";
|
||||||
|
assertEquals(testDataProvider.getDataFromEndpoint("TestCity"), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadXmlFromFile() throws IOException {
|
||||||
|
InputStream stream = getClass().getResourceAsStream("warnings.xml");
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8));
|
||||||
|
String line = null;
|
||||||
|
|
||||||
|
StringWriter stringWriter = new StringWriter();
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
stringWriter.write(line);
|
||||||
|
}
|
||||||
|
reader.close();
|
||||||
|
testDataProvider.rawData = stringWriter.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TestDataProvider extends DwdWarningDataAccess {
|
||||||
|
|
||||||
|
private String rawData = "";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getByURL(String url) {
|
||||||
|
return rawData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -169,7 +169,7 @@ public class DwdWarningsDataTest {
|
||||||
private String rawData = "";
|
private String rawData = "";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDataFromEndpoint(String cellId) {
|
public String getByURL(String url) {
|
||||||
return rawData;
|
return rawData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue