From 4bd91fc9786cfb5be4b6ffbc95d6a78fb3f0a7f9 Mon Sep 17 00:00:00 2001 From: Christoph Weitkamp Date: Wed, 7 Apr 2021 18:38:22 +0200 Subject: [PATCH] [tr064] Use Util.getAndUnmarshalXML method to retrieve phonebook (supports timeout 5s and caching) (#10447) Fixes #10436 Signed-off-by: Christoph Weitkamp Signed-off-by: John Marshall --- .../phonebook/Tr064PhonebookImpl.java | 34 ++----------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/bundles/org.openhab.binding.tr064/src/main/java/org/openhab/binding/tr064/internal/phonebook/Tr064PhonebookImpl.java b/bundles/org.openhab.binding.tr064/src/main/java/org/openhab/binding/tr064/internal/phonebook/Tr064PhonebookImpl.java index 44a2b60dc0ad7..43ad0ab78798b 100644 --- a/bundles/org.openhab.binding.tr064/src/main/java/org/openhab/binding/tr064/internal/phonebook/Tr064PhonebookImpl.java +++ b/bundles/org.openhab.binding.tr064/src/main/java/org/openhab/binding/tr064/internal/phonebook/Tr064PhonebookImpl.java @@ -12,29 +12,15 @@ */ package org.openhab.binding.tr064.internal.phonebook; -import java.io.ByteArrayInputStream; -import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Optional; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; import java.util.stream.Collectors; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import javax.xml.transform.stream.StreamSource; - import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.api.ContentResponse; -import org.eclipse.jetty.http.HttpMethod; import org.openhab.binding.tr064.internal.dto.additions.PhonebooksType; +import org.openhab.binding.tr064.internal.util.Util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,21 +47,9 @@ public Tr064PhonebookImpl(HttpClient httpClient, String phonebookUrl) { } private void getPhonebook() { - try { - ContentResponse contentResponse = httpClient.newRequest(phonebookUrl).method(HttpMethod.GET) - .timeout(2, TimeUnit.SECONDS).send(); - InputStream xml = new ByteArrayInputStream(contentResponse.getContent()); - - JAXBContext context = JAXBContext.newInstance(PhonebooksType.class); - XMLInputFactory xif = XMLInputFactory.newFactory(); - xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false); - xif.setProperty(XMLInputFactory.SUPPORT_DTD, false); - XMLStreamReader xsr = xif.createXMLStreamReader(new StreamSource(xml)); - Unmarshaller um = context.createUnmarshaller(); - PhonebooksType phonebooksType = um.unmarshal(xsr, PhonebooksType.class).getValue(); - + PhonebooksType phonebooksType = Util.getAndUnmarshalXML(httpClient, phonebookUrl, PhonebooksType.class); + if (phonebooksType != null) { phonebookName = phonebooksType.getPhonebook().getName(); - phonebook = phonebooksType.getPhonebook().getContact().stream().map(contact -> { String contactName = contact.getPerson().getRealName(); return contact.getTelephony().getNumber().stream() @@ -83,8 +57,6 @@ private void getPhonebook() { this::mergeSameContactNames)); }).collect(HashMap::new, HashMap::putAll, HashMap::putAll); logger.debug("Downloaded phonebook {}: {}", phonebookName, phonebook); - } catch (JAXBException | InterruptedException | ExecutionException | TimeoutException | XMLStreamException e) { - logger.warn("Failed to get phonebook with URL {}:", phonebookUrl, e); } }