Skip to content

Commit 0253994

Browse files
committed
Migrate from gson to jackson
1 parent 53b92fe commit 0253994

File tree

5 files changed

+56
-96
lines changed

5 files changed

+56
-96
lines changed

build.sbt

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,27 @@ crossScalaVersions := Seq("2.13.15", "3.5.1")
2929
Test / fork := true // Required to avoid "logger conflict" between sbt and code tests
3030

3131
lazy val versions = new {
32-
val drools = "9.44.0.Final"
33-
val jbpm = "1.44.1.Final"
32+
val drools = "9.44.0.Final"
33+
val jbpm = "1.44.1.Final"
34+
val jackson = "2.18.0"
3435
}
3536

3637
libraryDependencies ++= Seq(
37-
"org.drools" % "drools-core" % versions.drools,
38-
"org.drools" % "drools-xml-support" % versions.drools,
39-
"org.drools" % "drools-compiler" % versions.drools,
40-
"org.drools" % "drools-decisiontables" % versions.drools,
41-
"org.drools" % "drools-templates" % versions.drools,
42-
"org.drools" % "drools-serialization-protobuf" % versions.drools,
43-
"org.kie.kogito" % "jbpm-flow" % versions.jbpm,
44-
"org.kie.kogito" % "jbpm-bpmn2" % versions.jbpm,
45-
"org.slf4j" % "slf4j-api" % "2.0.16",
46-
"ch.qos.logback" % "logback-classic" % "1.5.8",
47-
"com.owlike" % "genson" % "1.6",
48-
"org.scala-lang.modules" %% "scala-collection-compat" % "2.12.0",
49-
"org.scalatest" %% "scalatest" % "3.2.19" % "test"
38+
"org.drools" % "drools-core" % versions.drools,
39+
"org.drools" % "drools-xml-support" % versions.drools,
40+
"org.drools" % "drools-compiler" % versions.drools,
41+
"org.drools" % "drools-decisiontables" % versions.drools,
42+
"org.drools" % "drools-templates" % versions.drools,
43+
"org.drools" % "drools-serialization-protobuf" % versions.drools,
44+
"org.kie.kogito" % "jbpm-flow" % versions.jbpm,
45+
"org.kie.kogito" % "jbpm-bpmn2" % versions.jbpm,
46+
"org.slf4j" % "slf4j-api" % "2.0.16",
47+
"ch.qos.logback" % "logback-classic" % "1.5.8",
48+
"com.fasterxml.jackson.core" % "jackson-databind" % versions.jackson,
49+
"com.fasterxml.jackson.datatype" % "jackson-datatype-jsr310" % versions.jackson,
50+
"com.fasterxml.jackson.datatype" % "jackson-datatype-jdk8" % versions.jackson,
51+
"org.scala-lang.modules" %% "scala-collection-compat" % "2.12.0",
52+
"org.scalatest" %% "scalatest" % "3.2.19" % "test"
5053
)
5154

5255
Test / testOptions += {

src/main/scala/fr/janalyse/droolscripting/Converters.scala

Lines changed: 0 additions & 58 deletions
This file was deleted.

src/main/scala/fr/janalyse/droolscripting/DroolsEngine.scala

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@
1515
*/
1616
package fr.janalyse.droolscripting
1717

18-
import java.io.File
19-
import java.text.SimpleDateFormat
20-
import java.time.format.DateTimeFormatter
18+
import com.fasterxml.jackson.databind.{MapperFeature, ObjectMapper}
19+
import com.fasterxml.jackson.databind.json.JsonMapper
20+
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module
21+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
2122

23+
import java.io.File
2224
import org.slf4j._
2325

2426
import scala.jdk.CollectionConverters._
@@ -27,9 +29,8 @@ import org.kie.api._
2729
import org.kie.api.runtime.KieSession
2830
import org.kie.api.time.{SessionClock, SessionPseudoClock}
2931
import org.kie.api.definition.`type`.FactType
30-
import java.util.concurrent.TimeUnit
3132

32-
import com.owlike.genson.{Converter, GensonBuilder}
33+
import java.util.concurrent.TimeUnit
3334
import org.kie.api.runtime.rule.FactHandle
3435

3536

@@ -43,18 +44,28 @@ import org.kie.api.runtime.rule.FactHandle
4344
class DroolsEngine(kbaseName: String, drl: String, config: DroolsEngineConfig) extends RuntimeDrools {
4445
private val logger = org.slf4j.LoggerFactory.getLogger("DroolsEngine")
4546

47+
// private val genson =
48+
// new GensonBuilder()
49+
// .setSkipNull(true)
50+
// .withConverters(
51+
// OffsetDateTimeConverter(),
52+
// ZonedDateTimeConverter(),
53+
// LocalDateTimeConverter(),
54+
// DateConverter()
55+
// )
56+
// .useClassMetadata(true)
57+
// .useConstructorWithArguments(false) // Take care, with true you may encounter IllegalArgumentException within asm.ClassReader
58+
// .create()
59+
4660
private val genson =
47-
new GensonBuilder()
48-
.setSkipNull(true)
49-
.withConverters(
50-
OffsetDateTimeConverter(),
51-
ZonedDateTimeConverter(),
52-
LocalDateTimeConverter(),
53-
DateConverter()
54-
)
55-
.useClassMetadata(true)
56-
.useConstructorWithArguments(false) // Take care, with true you may encounter IllegalArgumentException within asm.ClassReader
57-
.create()
61+
JsonMapper
62+
.builder()
63+
.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS)
64+
.addModule(new JavaTimeModule())
65+
.addModule(new Jdk8Module())
66+
.build()
67+
68+
5869

5970
LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME) match {
6071
case rootLogger: ch.qos.logback.classic.Logger if config.withDroolsLogging =>
@@ -204,7 +215,7 @@ class DroolsEngine(kbaseName: String, drl: String, config: DroolsEngineConfig) e
204215
def insertJson(json: String, typeInfo: String): FactHandle = {
205216
val cl = container.getClassLoader
206217
val clazz = cl.loadClass(typeInfo)
207-
val result = genson.deserialize(json, clazz).asInstanceOf[Object]
218+
val result = genson.readValue(json, clazz).asInstanceOf[Object]
208219
insert(result)
209220
}
210221

@@ -233,7 +244,11 @@ class DroolsEngine(kbaseName: String, drl: String, config: DroolsEngineConfig) e
233244
*
234245
* @return json strings iterable
235246
*/
236-
def getObjectsAsJson:Iterable[String] = session.getObjects().asScala.map(genson.serialize)
247+
def getObjectsAsJson:Iterable[String] =
248+
session
249+
.getObjects()
250+
.asScala
251+
.map(genson.writeValueAsString)
237252

238253
/**
239254
* Get all facts which have the given type or inheritate from it
@@ -253,7 +268,7 @@ class DroolsEngine(kbaseName: String, drl: String, config: DroolsEngineConfig) e
253268
* @return json strings iterable
254269
*/
255270
def getModelInstancesAsJson(declaredType:String): Iterable[String] = {
256-
getModelInstances(declaredType).map(genson.serialize)
271+
getModelInstances(declaredType).map(genson.writeValueAsString)
257272
}
258273

259274
/**
@@ -289,7 +304,7 @@ class DroolsEngine(kbaseName: String, drl: String, config: DroolsEngineConfig) e
289304
* @return json string option
290305
*/
291306
def getModelFirstInstanceAsJson(declaredType: String): Option[String] = {
292-
getModelFirstInstance(declaredType).map(genson.serialize)
307+
getModelFirstInstance(declaredType).map(genson.writeValueAsString)
293308
}
294309

295310
/**

src/test/scala/fr/janalyse/droolscripting/DroolsEngineJsonTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,8 @@ class DroolsEngineJsonTest extends AnyFlatSpec with should.Matchers {
147147
|end
148148
|""".stripMargin
149149
val engine = DroolsEngine(drl)
150-
engine.insertJson("""LOW""", "test.Priority")
151-
engine.insertJson("""RED""", "test.Color")
150+
engine.insertJson(""""LOW"""", "test.Priority")
151+
engine.insertJson(""""RED"""", "test.Color")
152152
engine.insertJson("""{"priority":"LOW", "color":"GREEN"}""", "test.Combo")
153153
engine.fireAllRules()
154154
engine.getObjects should have size 3

version.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ThisBuild / version := "1.1.1-SNAPSHOT"
1+
ThisBuild / version := "1.2.0-SNAPSHOT"

0 commit comments

Comments
 (0)