johanhaleby / occurrent

Unintrusive Event Sourcing Library for the JVM
https://occurrent.org
120 stars 16 forks source link

Add XML based laissez-faire CloudEventConverter #100

Closed johanhaleby closed 2 years ago

johanhaleby commented 3 years ago
class LaissezFairCloudEventConverter : CloudEventConverter<GameEvent> {
    private val xstream = XStream().apply { allowTypesByWildcard(arrayOf(GameEvent::class.java.packageName + ".**")) }

    override fun toCloudEvent(e: GameEvent): CloudEvent = CloudEventBuilder.v1()
        .withId(UUID.randomUUID().toString())
        .withSource(URI.create("urn:rockpaperscissors:game"))
        .withType(e::class.simpleName)
        .withTime(OffsetDateTime.ofInstant(e.timestamp.value.toInstant(), e.timestamp.value.zone))
        .withDataContentType("application/xml")
        .withData(xstream.toXML(e).toByteArray())
        .build()

    override fun toDomainEvent(cloudEvent: CloudEvent): GameEvent =
        xstream.fromXML(String(cloudEvent.data!!.toBytes())) as GameEvent
}