diff --git a/src/main/kotlin/iofXml/JsonMarshal.kt b/src/main/kotlin/iofXml/JsonMarshal.kt index b40884679..8ef1e2f1d 100644 --- a/src/main/kotlin/iofXml/JsonMarshal.kt +++ b/src/main/kotlin/iofXml/JsonMarshal.kt @@ -3,6 +3,7 @@ package iofXml import com.fasterxml.jackson.annotation.JsonInclude import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.SerializationFeature +import com.fasterxml.jackson.databind.json.JsonMapper import java.util.Locale import java.util.TimeZone import kotlin.collections.HashMap @@ -62,7 +63,6 @@ fun iofV2JsonToXml(json: String) = iofJsonToXml(json, "v2") internal fun iofJsonToXml(json: String, iofVersion: String = "v3"): String { val mapper = ObjectMapper() mapper.setTimeZone(TimeZone.getDefault()) - //mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); val tempJsonMap = mapper.readValue(json, HashMap::class.java) val mainKeys = tempJsonMap.keys @@ -103,13 +103,13 @@ internal fun iofJsonToXml(json: String, iofVersion: String = "v3"): String { * @sample iofXml.JsonMarshalKtTest.marshalIofObjectToJson */ fun marshalIofObjectToJson(obj: Any, prettyPrint: Boolean = true): String { - val mapper = ObjectMapper() - mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL) // Else all fields not set will be 'null' + val builder = JsonMapper.builder() + .serializationInclusion(JsonInclude.Include.NON_NULL) if (prettyPrint) { - mapper.enable(SerializationFeature.INDENT_OUTPUT) + builder.enable(SerializationFeature.INDENT_OUTPUT) } + val mapper = builder.build() - //mapper.enable(SerializationFeature.WRAP_ROOT_VALUE) // Problem: root will be UpperCamelCase (need lowerCamelCase) val className = nameFromJavaClass(obj.javaClass) val objectWithRoot = mapOf(className to obj) diff --git a/src/main/kotlin/iofXml/Main.kt b/src/main/kotlin/iofXml/Main.kt index b39e7af8e..b89f71c99 100755 --- a/src/main/kotlin/iofXml/Main.kt +++ b/src/main/kotlin/iofXml/Main.kt @@ -6,7 +6,7 @@ import java.io.StringWriter import jakarta.xml.bind.JAXBContext import jakarta.xml.bind.Marshaller -private fun main() { +fun main() { val file = File("src/test/resources/v2-examples/ResultList_example.xml").readText() val (obj, name, theClass) = unmarshalGenericIofV2(file) println(ObjectMapper().writeValueAsString(obj)) @@ -72,7 +72,7 @@ val classesV3 = listOf( /** * List of all names for all main classes of IOF V3 XSD specification, generated from [classesV3][classesV3]. */ -val classNamesV3 = classesV3.map { nameFromJavaClass(it.javaClass) } +val classNamesV3 = classesV3.map { nameFromJavaClass(it) } /** * List of all main types / classes of IOF V2 XSD specification. Only these @@ -97,4 +97,4 @@ val classesV2 = listOf( /** * List of all names for all main classes of IOF V2 XSD specification, generated from [classesV2][classesV2]. */ -val classNamesV2 = classesV2.map { nameFromJavaClass(it.javaClass) } +val classNamesV2 = classesV2.map { nameFromJavaClass(it) } diff --git a/src/main/kotlin/iofXml/V2Unmarshallers.kt b/src/main/kotlin/iofXml/V2Unmarshallers.kt index 9b0395b8d..1f7820a54 100644 --- a/src/main/kotlin/iofXml/V2Unmarshallers.kt +++ b/src/main/kotlin/iofXml/V2Unmarshallers.kt @@ -1,7 +1,6 @@ package iofXml import java.io.StringReader -import java.lang.Class import jakarta.xml.bind.JAXBContext import javax.xml.parsers.SAXParserFactory import javax.xml.transform.sax.SAXSource @@ -35,7 +34,7 @@ fun unmarshalGenericIofV2(xml: String): Triple> { // Credit: https://stackoverflow.com/a/64931583/5550386 val spf = SAXParserFactory.newInstance() // Do not validate DTD - spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false) val xmlSource = SAXSource( spf.newSAXParser().xmlReader, InputSource(StringReader(xmlClean)) @@ -55,7 +54,7 @@ private fun unmarshalV2Xml(className: String, dirtyXml: String): Any { val xml = removeUTF8BOM(dirtyXml, mainElementName) if (mainElementName != className) { - println("ERROR V2: mainElementName=$mainElementName is not equal to className=$className") + throw IllegalArgumentException("V2: mainElementName=$mainElementName is not equal to className=$className") } val actualClass = Class.forName("iofXml.v2.$className") @@ -69,7 +68,7 @@ private fun unmarshalV2Xml(className: String, dirtyXml: String): Any { // Credit: https://stackoverflow.com/a/64931583/5550386 val spf = SAXParserFactory.newInstance() // Do not validate DTD - spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false) val xmlSource = SAXSource( spf.newSAXParser().xmlReader, InputSource(StringReader(xml)) diff --git a/src/main/kotlin/iofXml/V3Unmarshallers.kt b/src/main/kotlin/iofXml/V3Unmarshallers.kt index eb665da6d..09d6ee0bf 100644 --- a/src/main/kotlin/iofXml/V3Unmarshallers.kt +++ b/src/main/kotlin/iofXml/V3Unmarshallers.kt @@ -1,7 +1,6 @@ package iofXml import java.io.StringReader -import java.lang.Class import java.net.URL import jakarta.xml.bind.JAXBContext import javax.xml.XMLConstants @@ -45,7 +44,7 @@ private fun unmarshalV3Xml(className: String, dirtyXml: String, validateXml: Boo val mainElementName = getMainElementName(dirtyXml) ?: "" val xml = removeUTF8BOM(dirtyXml, mainElementName) if (mainElementName != className) { - println("ERROR V3: mainElementName=$mainElementName is not equal to className=$className") + throw IllegalArgumentException("V3: mainElementName=$mainElementName is not equal to className=$className") } val actualClass = Class.forName("iofXml.v3.$className") diff --git a/src/test/kotlin/iofXml/V2UnmarshallersKtTest.kt b/src/test/kotlin/iofXml/V2UnmarshallersKtTest.kt index eec114b50..8455dd42b 100644 --- a/src/test/kotlin/iofXml/V2UnmarshallersKtTest.kt +++ b/src/test/kotlin/iofXml/V2UnmarshallersKtTest.kt @@ -14,7 +14,7 @@ internal class V2UnmarshallersKtTest { val (obj) = unmarshalGenericIofV2(file) val xmlString = marshallIofObject(obj) - assert(xmlString.length > 0) + assert(xmlString.isNotEmpty()) assert(xmlString.contains("")) assert(xmlString.contains("Ejsing")) }