From 788fdc44a4ae5bd03799db3a73f0ab975fe3ac1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ce=C4=BEuch?= Date: Tue, 25 Jun 2024 14:47:34 +0200 Subject: [PATCH 1/4] orsr add support for the other orsr forms --- .../core/eforms/EFormResourcesBuilder.java | 7 ++++--- .../autogram/core/eforms/EFormUtils.java | 19 +++++++++++++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main/java/digital/slovensko/autogram/core/eforms/EFormResourcesBuilder.java b/src/main/java/digital/slovensko/autogram/core/eforms/EFormResourcesBuilder.java index bc252f43f..cd7c026aa 100644 --- a/src/main/java/digital/slovensko/autogram/core/eforms/EFormResourcesBuilder.java +++ b/src/main/java/digital/slovensko/autogram/core/eforms/EFormResourcesBuilder.java @@ -10,6 +10,7 @@ import eu.europa.esig.dss.model.DSSDocument; +import org.w3c.dom.Document; import org.w3c.dom.Element; public abstract class EFormResourcesBuilder { @@ -28,10 +29,10 @@ public static EFormResources build(DSSDocument document, String fsFormId, String public static EFormResources buildFromDocument(DSSDocument document, String fsFormId, String propertiesCanonicalization, String xsdIdentifier, XsltParams xsltParams) throws AutogramException { - var xml = getXmlFromDocument(document).getDocumentElement(); + var xml = getXmlFromDocument(document); EFormResources eformResources; if (isXDC(document.getMimeType())) - eformResources = buildFromXDC(xml, propertiesCanonicalization); + eformResources = buildFromXDC(xml.getDocumentElement(), propertiesCanonicalization); else eformResources = buildFromEFormXml(xml, propertiesCanonicalization, xsdIdentifier, xsltParams, fsFormId); @@ -76,7 +77,7 @@ private static EFormResources buildFromXDC(Element xdc, String canonicalizationM return buildFromEFormXml(canonicalizationMethod, formUri, xsdDigest, xsltDigest, xsdIdentifier, params); } - private static EFormResources buildFromEFormXml(Element xml, String canonicalizationMethod, String xsdIdentifier, XsltParams xsltParams, String fsFormId) + private static EFormResources buildFromEFormXml(Document xml, String canonicalizationMethod, String xsdIdentifier, XsltParams xsltParams, String fsFormId) throws XMLValidationException, UnknownEformException { if (fsFormId != null) return FsEFormResources.buildFromFsFormId(fsFormId, canonicalizationMethod, null, null); diff --git a/src/main/java/digital/slovensko/autogram/core/eforms/EFormUtils.java b/src/main/java/digital/slovensko/autogram/core/eforms/EFormUtils.java index ba3b420ba..1da3aa360 100644 --- a/src/main/java/digital/slovensko/autogram/core/eforms/EFormUtils.java +++ b/src/main/java/digital/slovensko/autogram/core/eforms/EFormUtils.java @@ -197,15 +197,26 @@ public static String getFormUri(Element xdc) { return xsiSchemaLocationNode.getNodeValue(); } - public static String getNamespaceFromEformXml(Node xml) { - var xmlns = xml.getAttributes().getNamedItem("xmlns"); - if (xmlns != null) + public static String getNamespaceFromEformXml(Document xml) { + var xmlns = xml.getDocumentElement().getAttributes().getNamedItem("xmlns"); + // Never use justice.gov.sk as identifier + if (xmlns != null && !xmlns.getNodeValue().contains("justice.gov.sk")) return xmlns.getNodeValue(); - xmlns = xml.getAttributes().getNamedItemNS("http://www.w3.org/2001/XMLSchema-instance", "schemaLocation"); + xmlns = xml.getDocumentElement().getAttributes().getNamedItemNS("http://www.w3.org/2001/XMLSchema-instance", "schemaLocation"); if (xmlns != null) return xmlns.getNodeValue(); + // extract "href" attribute from element + var nodes = xml.getChildNodes(); + for (var i = 0; i < nodes.getLength(); i++) + if (nodes.item(i).getNodeType() == Node.PROCESSING_INSTRUCTION_NODE && nodes.item(i).getNodeName().equals("xml-stylesheet")) + for (var attribute : nodes.item(i).getNodeValue().split("\\s+")) { + var keyValue = attribute.split("="); + if (keyValue.length == 2 && "href".equals(keyValue[0])) + return keyValue[1].replace("\"", "").replace(".xslt", ".xsd"); + } + return null; } From 675c8a44e188e28ab2e526f3b65e4ba4ca6b0b1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ce=C4=BEuch?= Date: Tue, 25 Jun 2024 14:56:25 +0200 Subject: [PATCH 2/4] add another orsr test file --- .../slovensko/autogram/TestMethodSources.java | 2 + .../digital/slovensko/autogram/fuzs_new.xml | 1687 +++++++++++++++++ 2 files changed, 1689 insertions(+) create mode 100644 src/test/resources/digital/slovensko/autogram/fuzs_new.xml diff --git a/src/test/java/digital/slovensko/autogram/TestMethodSources.java b/src/test/java/digital/slovensko/autogram/TestMethodSources.java index c6a56f5c1..5dec48f35 100644 --- a/src/test/java/digital/slovensko/autogram/TestMethodSources.java +++ b/src/test/java/digital/slovensko/autogram/TestMethodSources.java @@ -289,12 +289,14 @@ public static Stream validCadesDocumentsProvider() throws IOEx public static Stream orsrDocumentsProvider() throws IOException { var fupaXml = cls.getResourceAsStream("FUPA.xml").readAllBytes(); var fupsXml = cls.getResourceAsStream("FUPS.xml").readAllBytes(); + var fuzsNewXml = cls.getResourceAsStream("fuzs_new.xml").readAllBytes(); var fupsXdcXml = cls.getResourceAsStream("FUPS.xdc.xml").readAllBytes(); var fupsXdcNoNamespaceXml = cls.getResourceAsStream("FUPS_wo_namespace.xdc.xml").readAllBytes(); return Stream.of( new InMemoryDocument(fupaXml, "FUPA.xml", MimeTypeEnum.XML), new InMemoryDocument(fupsXml, "FUPS.xml", MimeTypeEnum.XML), + new InMemoryDocument(fuzsNewXml, "fuzs_new.xml", MimeTypeEnum.XML), new InMemoryDocument(fupsXdcXml, "FUPS.xdc.xml", MimeTypeEnum.XML), new InMemoryDocument(fupsXdcNoNamespaceXml, "FUPS_wo_namespace.xdc.xml", MimeTypeEnum.XML) ); diff --git a/src/test/resources/digital/slovensko/autogram/fuzs_new.xml b/src/test/resources/digital/slovensko/autogram/fuzs_new.xml new file mode 100644 index 000000000..10fd772e8 --- /dev/null +++ b/src/test/resources/digital/slovensko/autogram/fuzs_new.xml @@ -0,0 +1,1687 @@ + + + + + + + + + 1.0.0.1137 + ZSRO + + + + + + 0bd016e3-7bd1-4b62-bc05-4335625b55a3 + + + + 0 + true + + + Mestský súd Bratislava III + Námestie Biely Kríž + 7 + Bratislava III + 83607 + 2 + B + + + + + + + Place holder, s.r.o. + Bratislava + 2024-06-24 + true + false + + + 3 + Sro + + 12345 + B + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Place Holder, s.r.o. + 12345678 + + + Test + 123 + + 529397 + + Bratislava - mestská časť Karlova Ves + + + 84104 + + 703 + Slovenská republika + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 50238305c84b7de1f936c2784ec01272aa983f7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ce=C4=BEuch?= Date: Tue, 25 Jun 2024 15:43:25 +0200 Subject: [PATCH 3/4] orsr form api override embedded true --- .../slovensko/autogram/core/eforms/EFormUtils.java | 2 +- .../autogram/core/eforms/dto/EFormAttributes.java | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/digital/slovensko/autogram/core/eforms/EFormUtils.java b/src/main/java/digital/slovensko/autogram/core/eforms/EFormUtils.java index 1da3aa360..7a58c8875 100644 --- a/src/main/java/digital/slovensko/autogram/core/eforms/EFormUtils.java +++ b/src/main/java/digital/slovensko/autogram/core/eforms/EFormUtils.java @@ -364,7 +364,7 @@ public static String fillXsdIdentifier(String formIdentifier) { } public static boolean isOrsrUri(String uri) { - return uri != null && uri.contains("://eformulare.justice.sk"); + return uri != null && uri.contains("://eformulare.justice.sk") || uri.contains("justice.gov.sk/"); } public static String getFsFormIdFromFilename(String filename) { diff --git a/src/main/java/digital/slovensko/autogram/core/eforms/dto/EFormAttributes.java b/src/main/java/digital/slovensko/autogram/core/eforms/dto/EFormAttributes.java index 36f4e2aaf..73c89d4f1 100644 --- a/src/main/java/digital/slovensko/autogram/core/eforms/dto/EFormAttributes.java +++ b/src/main/java/digital/slovensko/autogram/core/eforms/dto/EFormAttributes.java @@ -34,8 +34,11 @@ private static EFormAttributes build(String identifier, String transformation, S } } - if (transformation != null) + if (transformation != null) { xsltParams = EFormUtils.fillXsltParams(transformation, identifier, xsltParams); + if (!transformation.isEmpty() && transformation.charAt(0) == '\uFEFF') + transformation = transformation.substring(1); + } if (containerXmlns != null && containerXmlns.contains("xmldatacontainer")) { @@ -52,6 +55,9 @@ private static EFormAttributes build(String identifier, String transformation, S throw new EFormException("Chýba identifikátor", "Identifikátor je povinný atribút pre XML Datacontainer"); } + if (EFormUtils.isOrsrUri(identifier)) + embedUsedSchemas = true; + return new EFormAttributes(identifier, transformation, schema, containerXmlns, xsdIdentifier, xsltParams, embedUsedSchemas); } } From 00cc54218fea8d949152333e9d1e7165452d39ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ce=C4=BEuch?= Date: Tue, 25 Jun 2024 16:12:05 +0200 Subject: [PATCH 4/4] final fix orsr --- .../digital/slovensko/autogram/core/eforms/EFormUtils.java | 2 +- .../slovensko/autogram/core/eforms/OrsrEFormResources.java | 5 +++++ .../slovensko/autogram/core/eforms/xdc/XDCBuilder.java | 5 ++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/digital/slovensko/autogram/core/eforms/EFormUtils.java b/src/main/java/digital/slovensko/autogram/core/eforms/EFormUtils.java index 7a58c8875..0387d5e6b 100644 --- a/src/main/java/digital/slovensko/autogram/core/eforms/EFormUtils.java +++ b/src/main/java/digital/slovensko/autogram/core/eforms/EFormUtils.java @@ -364,7 +364,7 @@ public static String fillXsdIdentifier(String formIdentifier) { } public static boolean isOrsrUri(String uri) { - return uri != null && uri.contains("://eformulare.justice.sk") || uri.contains("justice.gov.sk/"); + return uri != null && (uri.contains("://eformulare.justice.sk") || uri.contains("justice.gov.sk/")); } public static String getFsFormIdFromFilename(String filename) { diff --git a/src/main/java/digital/slovensko/autogram/core/eforms/OrsrEFormResources.java b/src/main/java/digital/slovensko/autogram/core/eforms/OrsrEFormResources.java index 9b5804667..fd5f0783c 100644 --- a/src/main/java/digital/slovensko/autogram/core/eforms/OrsrEFormResources.java +++ b/src/main/java/digital/slovensko/autogram/core/eforms/OrsrEFormResources.java @@ -38,4 +38,9 @@ public boolean findResources() throws XMLValidationException { return true; } + + @Override + public String getIdentifier() { + return "http://www.justice.gov.sk/Forms"; + } } diff --git a/src/main/java/digital/slovensko/autogram/core/eforms/xdc/XDCBuilder.java b/src/main/java/digital/slovensko/autogram/core/eforms/xdc/XDCBuilder.java index b02de589f..b061a9a64 100644 --- a/src/main/java/digital/slovensko/autogram/core/eforms/xdc/XDCBuilder.java +++ b/src/main/java/digital/slovensko/autogram/core/eforms/xdc/XDCBuilder.java @@ -103,11 +103,10 @@ private static Element createXMLData(Document document, String identifierUri, St boolean shouldEmbedSchemas) { var element = document.createElement("xdc:XMLData"); element.setAttribute("ContentType", "application/xml; charset=UTF-8"); + element.setAttribute("Identifier", identifierUri); - if (!shouldEmbedSchemas) { - element.setAttribute("Identifier", identifierUri); + if (!shouldEmbedSchemas) element.setAttribute("Version", identifierVersion); - } return element; }