From b9bfac8dafbe8c0a9523b81b0e49fcb72304f2a7 Mon Sep 17 00:00:00 2001 From: Felix Reichenbach <felix.reichenbach@mgm-tp.com> Date: Fri, 20 Dec 2024 17:14:35 +0100 Subject: [PATCH] OZG-7038 create XztaFileReader --- .../archive/common/xta/XtaFileReader.java | 33 +++++++++++ .../archive/common/xta/XtaFileReaderTest.java | 55 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReader.java create mode 100644 archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReaderTest.java diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReader.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReader.java new file mode 100644 index 0000000..770f225 --- /dev/null +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReader.java @@ -0,0 +1,33 @@ +package de.ozgcloud.archive.common.xta; + +import java.io.IOException; + +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; + +import de.ozgcloud.common.errorhandling.TechnicalException; +import de.ozgcloud.xta.client.model.XtaFile; + +class XtaFileReader<T> { + + private final Unmarshaller unmarshaller; + + XtaFileReader(Class<T> clazz) { + try { + unmarshaller = JAXBContext.newInstance(clazz).createUnmarshaller(); + } catch (JAXBException e) { + throw new TechnicalException("Error reading xta file content", e); + } + } + + @SuppressWarnings("unchecked") + public T read(XtaFile xtaFile) { + try { + return (T) unmarshaller.unmarshal(xtaFile.content().getInputStream()); + } catch (JAXBException | IOException e) { + throw new TechnicalException("Error on reading file %s.".formatted(xtaFile.name()), e); + } + } + +} diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReaderTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReaderTest.java new file mode 100644 index 0000000..8cd4ed8 --- /dev/null +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReaderTest.java @@ -0,0 +1,55 @@ +package de.ozgcloud.archive.common.xta; + +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; + +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.Unmarshaller; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import de.ozgcloud.common.errorhandling.TechnicalException; +import de.ozgcloud.common.test.ReflectionTestUtils; +import de.ozgcloud.xta.client.model.XtaFile; +import de.xoev.xdomea.AbgabeImportBestaetigen0402; +import lombok.SneakyThrows; + +class XtaFileReaderTest { + + @Nested + class TestConstruction { + + @Test + @SneakyThrows + void shouldSetUnmarshaller() { + var reader = new XtaFileReader<AbgabeImportBestaetigen0402>(AbgabeImportBestaetigen0402.class); + + assertThat(ReflectionTestUtils.getField(reader, "unmarshaller", Unmarshaller.class)).usingRecursiveComparison() + .isEqualTo(JAXBContext.newInstance(AbgabeImportBestaetigen0402.class).createUnmarshaller()); + } + } + + @Nested + class TestRead { + + @Test + @SneakyThrows + void shouldReadContent() { + var reader = new XtaFileReader<AbgabeImportBestaetigen0402>(AbgabeImportBestaetigen0402.class); + + var abgabe = reader.read(XtaFileTestFactory.create(AbgabeImportBestaetigen0402TestFactory.FILE_PATH)); + + assertThat(abgabe).usingRecursiveComparison().isEqualTo(AbgabeImportBestaetigen0402TestFactory.create()); + } + + @Test + @SneakyThrows + void shouldThrowTechnicalException() { + var reader = new XtaFileReader<AbgabeImportBestaetigen0402>(AbgabeImportBestaetigen0402.class); + XtaFile unknownFile = XtaFileTestFactory.create(); + + assertThrows(TechnicalException.class, () -> reader.read(unknownFile)); + } + } +} -- GitLab