From 23e4132fe5bbe917067a4b5721457173781247e0 Mon Sep 17 00:00:00 2001 From: Ken Wenzel Date: Tue, 13 Dec 2022 15:48:43 +0100 Subject: [PATCH] Allow to use custom instances of XMLInputFactory and XMLOutputFactory. Fixes #53 --- .../aas4j/v3/dataformat/aasx/AASXDeserializer.java | 3 ++- .../aas4j/v3/dataformat/aasx/AASXSerializer.java | 3 ++- .../aas4j/v3/dataformat/xml/XmlDeserializer.java | 10 +++++++++- .../aas4j/v3/dataformat/xml/XmlSerializer.java | 9 ++++++++- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/dataformat-aasx/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/aasx/AASXDeserializer.java b/dataformat-aasx/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/aasx/AASXDeserializer.java index d419ef4dc..227d4bb4c 100644 --- a/dataformat-aasx/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/aasx/AASXDeserializer.java +++ b/dataformat-aasx/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/aasx/AASXDeserializer.java @@ -47,7 +47,7 @@ public class AASXDeserializer { private static final String XML_TYPE = "http://www.admin-shell.io/aasx/relationships/aas-spec"; private static final String AASX_ORIGIN = "/aasx/aasx-origin"; - private XmlDeserializer deserializer = new XmlDeserializer(); + private final XmlDeserializer deserializer; private Environment environment; private final OPCPackage aasxRoot; @@ -61,6 +61,7 @@ public class AASXDeserializer { */ public AASXDeserializer(InputStream inputStream) throws InvalidFormatException, IOException { aasxRoot = OPCPackage.open(inputStream); + this.deserializer = new XmlDeserializer(); } /** diff --git a/dataformat-aasx/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/aasx/AASXSerializer.java b/dataformat-aasx/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/aasx/AASXSerializer.java index 37b456c3b..4b7a76ad0 100644 --- a/dataformat-aasx/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/aasx/AASXSerializer.java +++ b/dataformat-aasx/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/aasx/AASXSerializer.java @@ -63,12 +63,13 @@ public class AASXSerializer { private static final String AASSUPPL_RELTYPE = "http://www.admin-shell.io/aasx/relationships/aas-suppl"; - private Serializer xmlSerializer = new XmlSerializer(); + private final Serializer xmlSerializer; /** * Default constructor */ public AASXSerializer() { + this.xmlSerializer = new XmlSerializer(); } /** diff --git a/dataformat-xml/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/xml/XmlDeserializer.java b/dataformat-xml/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/xml/XmlDeserializer.java index e8fe7102f..7d9eb1ff7 100644 --- a/dataformat-xml/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/xml/XmlDeserializer.java +++ b/dataformat-xml/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/xml/XmlDeserializer.java @@ -31,10 +31,12 @@ import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.module.SimpleAbstractTypeResolver; import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.dataformat.xml.XmlFactory; import com.fasterxml.jackson.dataformat.xml.XmlMapper; public class XmlDeserializer implements Deserializer { + protected final XmlFactory xmlFactory; protected XmlMapper mapper; protected SimpleAbstractTypeResolver typeResolver; @SuppressWarnings("rawtypes") @@ -42,12 +44,18 @@ public class XmlDeserializer implements Deserializer { SubmodelElement.class, new SubmodelElementDeserializer()); public XmlDeserializer() { + this(new XmlFactory()); + } + + public XmlDeserializer(XmlFactory xmlFactory) { + this.xmlFactory = xmlFactory; initTypeResolver(); buildMapper(); } protected void buildMapper() { - mapper = XmlMapper.builder().enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY) + mapper = XmlMapper.builder(xmlFactory) + .enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY) .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) .serializationInclusion(JsonInclude.Include.NON_NULL) .annotationIntrospector(new XmlDataformatAnnotationIntrospector()) diff --git a/dataformat-xml/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/xml/XmlSerializer.java b/dataformat-xml/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/xml/XmlSerializer.java index e83485740..f6f294e7e 100644 --- a/dataformat-xml/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/xml/XmlSerializer.java +++ b/dataformat-xml/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/xml/XmlSerializer.java @@ -36,11 +36,13 @@ import com.fasterxml.jackson.databind.ObjectWriter; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.dataformat.xml.XmlFactory; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator; public class XmlSerializer implements Serializer { + protected final XmlFactory xmlFactory; protected XmlMapper mapper; protected Map namespacePrefixes; @@ -49,12 +51,17 @@ public XmlSerializer() { } public XmlSerializer(Map namespacePrefixes) { + this(new XmlFactory(), namespacePrefixes); + } + + public XmlSerializer(XmlFactory xmlFactory, Map namespacePrefixes) { + this.xmlFactory = xmlFactory; this.namespacePrefixes = namespacePrefixes; buildMapper(); } protected void buildMapper() { - mapper = XmlMapper.builder() + mapper = XmlMapper.builder(xmlFactory) .enable(SerializationFeature.INDENT_OUTPUT) .enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY) .serializationInclusion(JsonInclude.Include.NON_NULL)