diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xdomea/XdomeaXMLValueReader.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xdomea/XdomeaXMLValueReader.java index 961231e9ad05e5ef208c05f5218493ebddd0b44e..a94e189b394b396001768386244c08a4cd750250 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xdomea/XdomeaXMLValueReader.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xdomea/XdomeaXMLValueReader.java @@ -22,7 +22,11 @@ import de.ozgcloud.eingang.common.formdata.IncomingFile; public class XdomeaXMLValueReader { private static final String DATEINAME_NODE_QUERY_STRING = "//Hauptobjekt//Dateiname"; - private static final XPathExpression DATEINAME_NODE_QUERY = compileXPathExpression(DATEINAME_NODE_QUERY_STRING); + // Interpret XML-Attachments as representations + // XML filetype code: 030 (see https://www.xrepository.de/details/urn:xoev-de:xdomea:codeliste:dateiformat) + private static final String DATEINAME_NODE_FOR_XML_ANHANG_QUERY_STRING = "//Anlage//Format/Name[contains(., '030')]/..//Dateiname"; + private static final XPathExpression DATEINAME_NODE_QUERY = compileXPathExpression( + DATEINAME_NODE_QUERY_STRING + "|" + DATEINAME_NODE_FOR_XML_ANHANG_QUERY_STRING); public List<String> readRepresentationFileNames(IncomingFile xdomeaXMLFile) { return getTextsFromNodes( diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xdomea/XdomeaXMLValueReaderTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xdomea/XdomeaXMLValueReaderTest.java index fdc793156871725f8e9ce415f05b652ae0dcc435..88d7d7cdae588621eee777d12af476eda7cd7abb 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xdomea/XdomeaXMLValueReaderTest.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xdomea/XdomeaXMLValueReaderTest.java @@ -4,7 +4,6 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; import java.nio.charset.StandardCharsets; -import java.util.List; import org.apache.commons.io.IOUtils; import org.junit.jupiter.api.DisplayName; @@ -22,6 +21,7 @@ import lombok.SneakyThrows; class XdomeaXMLValueReaderTest { private static final String XML_FILE_NAME = "file.xml"; private static final String PDF_FILE_NAME = "file.pdf"; + private static final String XML_ATTACHMENT_FILE_NAME = "saml-attachment-file.xml"; @Spy @InjectMocks @@ -34,7 +34,7 @@ class XdomeaXMLValueReaderTest { @Mock IncomingFile incomingXmlFile; - @DisplayName("should find 'Dateiname' elements in MSR mantelantrag") + @DisplayName("should find 'Dateiname' elements and all XML-files in MSR mantelantrag") @ParameterizedTest @ValueSource(strings = { "xdomea/mantelantrag_Geschaeftsgang.Geschaeftsgang.0201.xml", @@ -45,12 +45,13 @@ class XdomeaXMLValueReaderTest { var xmlString = TestUtils.loadTextFile( antragXMLFilename, XML_FILE_NAME + "\n", - PDF_FILE_NAME); + PDF_FILE_NAME, + "\n" + XML_ATTACHMENT_FILE_NAME + "\n"); when(incomingXmlFile.getContentStream()).thenReturn(IOUtils.toInputStream(xmlString, StandardCharsets.UTF_8)); var names = valueReader.readRepresentationFileNames(incomingXmlFile); - assertThat(names).isEqualTo(List.of(XML_FILE_NAME, PDF_FILE_NAME)); + assertThat(names).containsExactly(XML_FILE_NAME, PDF_FILE_NAME, XML_ATTACHMENT_FILE_NAME); } } diff --git a/xta-adapter/src/test/resources/xdomea/dfoerdermittel_Geschaeftsgang.Geschaeftsgang.0201.xml b/xta-adapter/src/test/resources/xdomea/dfoerdermittel_Geschaeftsgang.Geschaeftsgang.0201.xml index 28200a104f3cb7ded5851105ad2d9fd80034bc3c..06068ed7f11a66915d42260f0bb8c10774965b0f 100644 --- a/xta-adapter/src/test/resources/xdomea/dfoerdermittel_Geschaeftsgang.Geschaeftsgang.0201.xml +++ b/xta-adapter/src/test/resources/xdomea/dfoerdermittel_Geschaeftsgang.Geschaeftsgang.0201.xml @@ -104,4 +104,35 @@ </Verfuegung> </Beteiligungsschritt> </ExternerGeschaeftsgang> + <Anlage> + <Dokument> + <Identifikation> + <ID>1d8ca22a-9d20-4507-aa5e-b764bb5642f0</ID> + </Identifikation> + <Typ>Anlage</Typ> + <Version> + <Nummer>1</Nummer> + <Format> + <Name listURI="urn:xoev-de:xdomea:codeliste:dateiformat" listVersionID="1.0" xsi:type="DateiformatCodeType"> + <code xmlns="">030</code> + <name xmlns="">xml-eXtensible Markup Language</name> + </Name> + <Version>0.0</Version> + <Primaerdokument> + <Dateiname>%s</Dateiname> + </Primaerdokument> + </Format> + <Format> + <Name listURI="urn:xoev-de:xdomea:codeliste:dateiformat" listVersionID="1.0" xsi:type="DateiformatCodeType"> + <code xmlns="">018</code> + <name xmlns="">pdf-Portable Document Format</name> + </Name> + <Version>0.0</Version> + <Primaerdokument> + <Dateiname>anhang.pdf</Dateiname> + </Primaerdokument> + </Format> + </Version> + </Dokument> + </Anlage> </Geschaeftsgang.Geschaeftsgang.0201> diff --git a/xta-adapter/src/test/resources/xdomea/mantelantrag_Geschaeftsgang.Geschaeftsgang.0201.xml b/xta-adapter/src/test/resources/xdomea/mantelantrag_Geschaeftsgang.Geschaeftsgang.0201.xml index 349a7a5c3a2406981d48091a319a7aa8f63b16f0..7bed65db92efc3fb0109240b75e19cef0ba7023f 100644 --- a/xta-adapter/src/test/resources/xdomea/mantelantrag_Geschaeftsgang.Geschaeftsgang.0201.xml +++ b/xta-adapter/src/test/resources/xdomea/mantelantrag_Geschaeftsgang.Geschaeftsgang.0201.xml @@ -96,4 +96,37 @@ </xdomea:Verfuegung> </xdomea:Beteiligungsschritt> </xdomea:ExternerGeschaeftsgang> + <xdomea:Anlage> + <xdomea:Dokument> + <xdomea:Identifikation> + <xdomea:ID>1d8ca22a-9d20-4507-aa5e-b764bb5642f0</xdomea:ID> + </xdomea:Identifikation> + <xdomea:Typ>Anlage</xdomea:Typ> + <xdomea:Version> + <xdomea:Nummer>1</xdomea:Nummer> + <xdomea:Format> + <xdomea:Name codeName="xml - eXtensible Markup Language" + codelistAgencyName="AG XDOMEA des KoopA ADV" codelistVersionIdentifier="2.0.0" + languageCode="de" codelistName="Dateiformat">030 + </xdomea:Name> + <xdomea:Version>0.0</xdomea:Version> + <xdomea:Primaerdokument> + <xdomea:Dateiname>%s</xdomea:Dateiname> + </xdomea:Primaerdokument> + </xdomea:Format> + </xdomea:Version> + <xdomea:Version> + <xdomea:Nummer>1</xdomea:Nummer> + <xdomea:Format> + <xdomea:Name codeName="pdf - Portable Document Format" codelistAgencyName="AG XDOMEA des KoopA ADV" + codelistVersionIdentifier="2.0.0" languageCode="de" codelistName="Dateiformat">018 + </xdomea:Name> + <xdomea:Version>0.0</xdomea:Version> + <xdomea:Primaerdokument> + <xdomea:Dateiname>anhang.pdf</xdomea:Dateiname> + </xdomea:Primaerdokument> + </xdomea:Format> + </xdomea:Version> + </xdomea:Dokument> + </xdomea:Anlage> </xdomea:Geschaeftsgang.Geschaeftsgang.0201>