diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/github/GitHub338.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/github/GitHub338.kt new file mode 100644 index 00000000..1f513c47 --- /dev/null +++ b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/github/GitHub338.kt @@ -0,0 +1,86 @@ +package com.fasterxml.jackson.module.kotlin.test.github + +import com.fasterxml.jackson.annotation.JsonCreator +import com.fasterxml.jackson.databind.DeserializationFeature +import com.fasterxml.jackson.dataformat.xml.XmlMapper +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement +import com.fasterxml.jackson.module.kotlin.readValue +import com.fasterxml.jackson.module.kotlin.registerKotlinModule +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals + +class GitHub338 { + data class Properties( + @JacksonXmlProperty(localName = "NEW_DATE") + val newDate: String?, + @JacksonXmlProperty(localName = "BC_1MONTH") + val oneMonth: String? + ) + + data class Content( + val properties: Properties + ) + + data class Entry( + val id: String, + val updated: String, + val content: Content + ) + + @JacksonXmlRootElement(namespace = "http://www.w3.org/2005/Atom", localName = "feed") + data class Feed @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) constructor( + @JacksonXmlElementWrapper(useWrapping = false) + val entry: List + ) + + val xml = """ + + + http://data.treasury.gov/Feed.svc/DailyTreasuryYieldCurveRateData(1) + 2020-05-08T22:36:11Z + + + 1997-01-02T00:00:00 + + + + + + http://data.treasury.gov/Feed.svc/DailyTreasuryYieldCurveRateData(2) + 2020-05-08T22:36:11Z + + + 1996-12-31T00:00:00 + + + + + + """.trimIndent() + + @Test + fun test() { + val mapper = XmlMapper() + .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .registerKotlinModule() + val expected = Feed( + listOf( + Entry( + "http://data.treasury.gov/Feed.svc/DailyTreasuryYieldCurveRateData(1)", + "2020-05-08T22:36:11Z", + Content(Properties("1997-01-02T00:00:00", "")) + ), + Entry( + "http://data.treasury.gov/Feed.svc/DailyTreasuryYieldCurveRateData(2)", + "2020-05-08T22:36:11Z", + Content(Properties("1996-12-31T00:00:00", "")) + ) + ) + ) + val actual = mapper.readValue(xml) + + assertEquals(expected, actual) + } +}