diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java index 6dd87bd4b8bb2423fe933e8d4e098e056890f8fc..07c961a2ea1358c9f6ffb50daf83c30b4433ea8f 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java @@ -120,23 +120,29 @@ class SmartDocumentsBescheidRemoteService implements BescheidRemoteService { } Optional<String> extractTextFormXmlFile(File xmlFile) { - var xPath = XPathFactory.newInstance().newXPath(); try { - var document = DocumentBuilderFactory.newDefaultInstance().newDocumentBuilder().parse(xmlFile); - var expr = xPath.compile("/root/SmartDocument/Fields/NachrichtenText/text()"); - var text = (Text) expr.evaluate(document, XPathConstants.NODE); - - return Optional.ofNullable(text.getTextContent()); + return doExtractText(xmlFile); } catch (XPathExpressionException | SAXException | IOException | ParserConfigurationException e) { - LOG.error("XML-Parsing error on extracting Nachricht-Text: {}", e.getMessage(), e); + LOG.warn("XML-Parsing error on extracting Nachricht-Text: {}", e.getMessage(), e); } catch (ClassCastException e) { - LOG.error("Error on extraction Nachricht-Text. XPath return unexpected Type.", e); + LOG.warn("Error on extraction Nachricht-Text. XPath return unexpected Type.", e); } catch (RuntimeException e) { - LOG.error("Unexpected Error on extracting NachrichtText: {}", e.getMessage(), e); + LOG.warn("Unexpected Error on extracting NachrichtText: {}", e.getMessage(), e); } return Optional.empty(); } + Optional<String> doExtractText(File xmlFile) + throws SAXException, IOException, ParserConfigurationException, XPathExpressionException { + var xPath = XPathFactory.newInstance().newXPath(); + + var document = DocumentBuilderFactory.newDefaultInstance().newDocumentBuilder().parse(xmlFile); + var expr = xPath.compile("/root/SmartDocument/Fields/NachrichtenText/text()"); + + return Optional.ofNullable((Text) expr.evaluate(document, XPathConstants.NODE)) + .map(Text::getTextContent); + } + Optional<File> getXMLFile(SmartDocumentsResponse response) { return getSmartDocumentsFile(response, FILE_TYPE_XML) .map(SmartDocumentFile::getDocument) diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java index 9696b3cba965a5c2a3c9cdfb50e87dc330b7e37a..41ad8368a3b350af6790e6cc20c0d3e327d792ae 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java @@ -20,6 +20,7 @@ import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsRequest.CustomerData.Us import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; import de.ozgcloud.common.binaryfile.TempFileUtils; import de.ozgcloud.common.test.TestUtils; +import lombok.SneakyThrows; class SmartDocumentsBescheidRemoteServiceTest { @@ -84,6 +85,16 @@ class SmartDocumentsBescheidRemoteServiceTest { assertThat(text).isEmpty(); } + @Test + @SneakyThrows + void shouldExpectMissingTextNode() { + File xmlFileWithoutText = TempFileUtils.writeTmpFile(TestUtils.loadFile("SD_answer_without_text.xml")); + + var text = service.doExtractText(xmlFileWithoutText); + + assertThat(text).isEmpty(); + } + } } } diff --git a/bescheid-manager/src/test/resources/SD_answer_without_text.xml b/bescheid-manager/src/test/resources/SD_answer_without_text.xml new file mode 100644 index 0000000000000000000000000000000000000000..62f2d02636091f1b13e7ce9c05208096415be20f --- /dev/null +++ b/bescheid-manager/src/test/resources/SD_answer_without_text.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<root> + <SmartDocument Version="2.0"> + <Fields> + + </Fields> + </SmartDocument> +</root> \ No newline at end of file