import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
-import org.apache.commons.lang3.exception.ExceptionUtils;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.jetty.client.HttpResponseException;
import org.openhab.binding.weathercompany.internal.config.WeatherCompanyBridgeConfig;
+import org.openhab.binding.weathercompany.internal.util.ExceptionUtils;
import org.openhab.core.io.net.http.HttpUtil;
import org.openhab.core.thing.Bridge;
import org.openhab.core.thing.ChannelUID;
updateStatus(ThingStatus.ONLINE);
cancelValidateApiKeyJob();
} catch (IOException e) {
- Throwable rootcause = ExceptionUtils.getRootCause(e);
+ Throwable rootcause = ExceptionUtils.getRootThrowable(e);
if (rootcause instanceof HttpResponseException
&& rootcause.getMessage().contains("Authentication challenge without")) {
logger.debug("Bridge: HttpResponseException: API key is not valid");
--- /dev/null
+/**
+ * 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.weathercompany.internal.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
+
+/**
+ * The {@link ExceptionUtils} class defines some static utility methods
+ *
+ * @author Leo Siepel - Initial contribution
+ */
+@NonNullByDefault
+public class ExceptionUtils {
+
+ public static @Nullable Throwable getRootThrowable(@Nullable Throwable throwable) {
+ List<Throwable> list = new ArrayList<>();
+ while (throwable != null && !list.contains(throwable)) {
+ list.add(throwable);
+ throwable = throwable.getCause();
+ }
+ return throwable;
+ }
+}