Skip to content
10 changes: 5 additions & 5 deletions src/main/kotlin/iofXml/JsonMarshal.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)

Expand Down
6 changes: 3 additions & 3 deletions src/main/kotlin/iofXml/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down Expand Up @@ -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
Expand All @@ -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) }
7 changes: 3 additions & 4 deletions src/main/kotlin/iofXml/V2Unmarshallers.kt
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -35,7 +34,7 @@ fun unmarshalGenericIofV2(xml: String): Triple<Any, String, Class<*>> {
// 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))
Expand All @@ -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")
Expand All @@ -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))
Expand Down
3 changes: 1 addition & 2 deletions src/main/kotlin/iofXml/V3Unmarshallers.kt
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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")
Expand Down
2 changes: 1 addition & 1 deletion src/test/kotlin/iofXml/V2UnmarshallersKtTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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("<PersonName>"))
assert(xmlString.contains("Ejsing"))
}
Expand Down
Loading