Поэтому я пытаюсь сериализовать / десериализовать RSS-каналы, используя Джексона XML в Kotlin. Тем не менее, в настоящее время это не делает ни правильно. Когда я создаю экземпляр объекта RSS вручную и распечатываю xml, создается впечатление, что он игнорирует параметры localName
и namespace
в @JacksonXmlProperty. Вот мой код:
@JacksonXmlRootElement(localName="rss")
class RSSFeed(
@JacksonXmlProperty(localName="channel")
var channel: Channel
) {
constructor() : this(Channel())
}
class Channel(
@JacksonXmlProperty(localName="title")
var title: String? = null,
@JacksonXmlCData
@JacksonXmlProperty(localName="description")
var description: String? = null,
@JacksonXmlProperty(localName="image")
var image: RSSImage? = null,
@JacksonXmlProperty(localName = "explicit", namespace="itunes")
var isExplicit: String? = "no",
@JacksonXmlProperty(localName = "pubDate")
var publishDate: String? = null,
@JacksonXmlProperty(localName = "type", namespace="itunes")
var episodeType: String? = null,
@JacksonXmlProperty(localName = "link", namespace="atom")
var atomLink: AtomLink? = null,
@JacksonXmlProperty(localName = "new-feed-url", namespace="itunes")
var newFeedUrl: String? = null
)
Тогда я просто делаю:
println(XmlMapper().writeValueAsString(RSSFeed(Channel(title = "blah", description = "blah", image = RSSImage(url = "https://someurl.com", link = "somelink"), isExplicit = "yes", atomLink = AtomLink(href="blah.com"), newFeedUrl = "thisisthenewfeed"))))
Однако, когда я распечатываю это, он игнорирует свойства namespace и localName и просто использует имена переменных. Что я делаю не так?
Xml output: <rss><channel><title>blah</title><description><![CDATA[blah]]></description><image><url>https://someurl.com</url><title/><link><![CDATA[somelink]]></link></image><publishDate/><episodeType/><atomLink href="blah.com"/><newFeedUrl>thisisthenewfeed</newFeedUrl></channel></rss>
edit: похоже, по какой-то причине оно не печатает свойство isExplicit, не знаю, о чем идет речь.