From 5a4817d65dbc8ee4b8b70c83b2acb99ea75c2b72 Mon Sep 17 00:00:00 2001
From: Christoph Weitkamp <github@christophweitkamp.de>
Date: Sat, 3 Apr 2021 18:39:12 +0200
Subject: [PATCH] Use Util.getAndUnmarshalXML method to retreive phonebook
 (supports timeout 5s and cacheing)

Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>
---
 .../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);
         }
     }