Enable Jackson for 2.13 (#27136)
* Enable jackson for 2.13 * Fix 2.13 warnings in jackson module
This commit is contained in:
parent
893bd8b74b
commit
6e93bef605
5 changed files with 29 additions and 30 deletions
|
|
@ -157,10 +157,10 @@ class JacksonSerializationBench {
|
|||
|
||||
private def serializeDeserialize[T <: AnyRef](msg: T): T = {
|
||||
serialization.findSerializerFor(msg) match {
|
||||
case serializer: SerializerWithStringManifest ⇒
|
||||
case serializer: SerializerWithStringManifest =>
|
||||
val blob = serializer.toBinary(msg)
|
||||
serializer.fromBinary(blob, serializer.manifest(msg)).asInstanceOf[T]
|
||||
case serializer ⇒
|
||||
case serializer =>
|
||||
val blob = serializer.toBinary(msg)
|
||||
if (serializer.includeManifest)
|
||||
serializer.fromBinary(blob, Some(msg.getClass)).asInstanceOf[T]
|
||||
|
|
|
|||
|
|
@ -65,7 +65,8 @@ object JacksonObjectMapperProvider extends ExtensionId[JacksonObjectMapperProvid
|
|||
config: Config,
|
||||
dynamicAccess: DynamicAccess,
|
||||
log: Option[LoggingAdapter]) = {
|
||||
import scala.collection.JavaConverters._
|
||||
|
||||
import akka.util.ccompat.JavaConverters._
|
||||
|
||||
val mapper = objectMapperFactory.newObjectMapper(bindingName, jsonFactory)
|
||||
|
||||
|
|
@ -96,11 +97,11 @@ object JacksonObjectMapperProvider extends ExtensionId[JacksonObjectMapperProvid
|
|||
if (configuredModules.contains("*"))
|
||||
ObjectMapper.findModules(dynamicAccess.classLoader).asScala
|
||||
else
|
||||
configuredModules.flatMap { fqcn ⇒
|
||||
configuredModules.flatMap { fqcn =>
|
||||
if (isModuleEnabled(fqcn, dynamicAccess)) {
|
||||
dynamicAccess.createInstanceFor[Module](fqcn, Nil) match {
|
||||
case Success(m) ⇒ Some(m)
|
||||
case Failure(e) ⇒
|
||||
case Success(m) => Some(m)
|
||||
case Failure(e) =>
|
||||
log.foreach(
|
||||
_.error(
|
||||
e,
|
||||
|
|
@ -113,7 +114,7 @@ object JacksonObjectMapperProvider extends ExtensionId[JacksonObjectMapperProvid
|
|||
None
|
||||
}
|
||||
|
||||
val modules2 = modules1.map { module ⇒
|
||||
val modules2 = modules1.map { module =>
|
||||
if (module.isInstanceOf[ParameterNamesModule])
|
||||
// ParameterNamesModule needs a special case for the constructor to ensure that single-parameter
|
||||
// constructors are handled the same way as constructors with multiple parameters.
|
||||
|
|
@ -146,7 +147,7 @@ object JacksonObjectMapperProvider extends ExtensionId[JacksonObjectMapperProvid
|
|||
}
|
||||
|
||||
private def features(config: Config, section: String): immutable.Seq[(String, Boolean)] = {
|
||||
import scala.collection.JavaConverters._
|
||||
import akka.util.ccompat.JavaConverters._
|
||||
val cfg = config.getConfig(section)
|
||||
cfg.root.keySet().asScala.map(key => key -> cfg.getBoolean(key)).toList
|
||||
}
|
||||
|
|
|
|||
|
|
@ -150,16 +150,16 @@ import com.fasterxml.jackson.dataformat.smile.SmileFactory
|
|||
}
|
||||
}
|
||||
private val migrations: Map[String, JacksonMigration] = {
|
||||
import scala.collection.JavaConverters._
|
||||
import akka.util.ccompat.JavaConverters._
|
||||
conf.getConfig("migrations").root.unwrapped.asScala.toMap.map {
|
||||
case (k, v) ⇒
|
||||
case (k, v) =>
|
||||
val transformer = system.dynamicAccess.createInstanceFor[JacksonMigration](v.toString, Nil).get
|
||||
k -> transformer
|
||||
}
|
||||
}
|
||||
private val blacklist: GadgetClassBlacklist = new GadgetClassBlacklist
|
||||
private val whitelistClassPrefix = {
|
||||
import scala.collection.JavaConverters._
|
||||
import akka.util.ccompat.JavaConverters._
|
||||
conf.getStringList("whitelist-class-prefix").asScala.toVector
|
||||
}
|
||||
|
||||
|
|
@ -177,8 +177,8 @@ import com.fasterxml.jackson.dataformat.smile.SmileFactory
|
|||
checkAllowedClassName(className)
|
||||
checkAllowedClass(obj.getClass)
|
||||
migrations.get(className) match {
|
||||
case Some(transformer) ⇒ className + "#" + transformer.currentVersion
|
||||
case None ⇒ className
|
||||
case Some(transformer) => className + "#" + transformer.currentVersion
|
||||
case None => className
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -221,20 +221,20 @@ import com.fasterxml.jackson.dataformat.smile.SmileFactory
|
|||
val migration = migrations.get(manifestClassName)
|
||||
|
||||
val className = migration match {
|
||||
case Some(transformer) if fromVersion < transformer.currentVersion ⇒
|
||||
case Some(transformer) if fromVersion < transformer.currentVersion =>
|
||||
transformer.transformClassName(fromVersion, manifestClassName)
|
||||
case Some(transformer) if fromVersion > transformer.currentVersion ⇒
|
||||
case Some(transformer) if fromVersion > transformer.currentVersion =>
|
||||
throw new IllegalStateException(
|
||||
s"Migration version ${transformer.currentVersion} is " +
|
||||
s"behind version $fromVersion of deserialized type [$manifestClassName]")
|
||||
case _ ⇒ manifestClassName
|
||||
case _ => manifestClassName
|
||||
}
|
||||
if (className ne manifestClassName)
|
||||
checkAllowedClassName(className)
|
||||
|
||||
val clazz = system.dynamicAccess.getClassFor[AnyRef](className) match {
|
||||
case Success(c) ⇒ c
|
||||
case Failure(_) ⇒
|
||||
case Success(c) => c
|
||||
case Failure(_) =>
|
||||
throw new NotSerializableException(
|
||||
s"Cannot find manifest class [$className] for serializer [${getClass.getName}].")
|
||||
}
|
||||
|
|
@ -243,11 +243,11 @@ import com.fasterxml.jackson.dataformat.smile.SmileFactory
|
|||
val decompressBytes = if (compressed) decompress(bytes) else bytes
|
||||
|
||||
val result = migration match {
|
||||
case Some(transformer) if fromVersion < transformer.currentVersion ⇒
|
||||
case Some(transformer) if fromVersion < transformer.currentVersion =>
|
||||
val jsonTree = objectMapper.readTree(decompressBytes)
|
||||
val newJsonTree = transformer.transform(fromVersion, jsonTree)
|
||||
objectMapper.treeToValue(newJsonTree, clazz)
|
||||
case _ ⇒
|
||||
case _ =>
|
||||
objectMapper.readValue(decompressBytes, clazz)
|
||||
}
|
||||
|
||||
|
|
@ -386,8 +386,8 @@ import com.fasterxml.jackson.dataformat.smile.SmileFactory
|
|||
val buffer = new Array[Byte](BufferSize)
|
||||
|
||||
@tailrec def readChunk(): Unit = in.read(buffer) match {
|
||||
case -1 ⇒ ()
|
||||
case n ⇒
|
||||
case -1 => ()
|
||||
case n =>
|
||||
out.write(buffer, 0, n)
|
||||
readChunk()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -369,8 +369,8 @@ abstract class JacksonSerializerSpec(serializerName: String)
|
|||
|
||||
def serializerFor(obj: AnyRef, sys: ActorSystem = system): JacksonSerializer =
|
||||
serialization(sys).findSerializerFor(obj) match {
|
||||
case serializer: JacksonSerializer ⇒ serializer
|
||||
case s ⇒
|
||||
case serializer: JacksonSerializer => serializer
|
||||
case s =>
|
||||
throw new IllegalStateException(s"Wrong serializer ${s.getClass} for ${obj.getClass}")
|
||||
}
|
||||
|
||||
|
|
|
|||
10
build.sbt
10
build.sbt
|
|
@ -42,6 +42,8 @@ lazy val aggregatedProjects: Seq[ProjectReference] = List[ProjectReference](
|
|||
actorTestkitTyped,
|
||||
actorTyped,
|
||||
actorTypedTests,
|
||||
benchJmh,
|
||||
benchJmhTyped,
|
||||
cluster,
|
||||
clusterMetrics,
|
||||
clusterSharding,
|
||||
|
|
@ -52,6 +54,7 @@ lazy val aggregatedProjects: Seq[ProjectReference] = List[ProjectReference](
|
|||
discovery,
|
||||
distributedData,
|
||||
docs,
|
||||
jackson,
|
||||
multiNodeTestkit,
|
||||
osgi,
|
||||
persistence,
|
||||
|
|
@ -68,10 +71,7 @@ lazy val aggregatedProjects: Seq[ProjectReference] = List[ProjectReference](
|
|||
streamTests,
|
||||
streamTestsTck,
|
||||
streamTyped,
|
||||
testkit) ++
|
||||
(if (isScala213) List.empty[ProjectReference]
|
||||
else
|
||||
List[ProjectReference](jackson, benchJmh, benchJmhTyped)) // FIXME #27019 remove 2.13 condition when Jackson ScalaModule has been released for Scala 2.13
|
||||
testkit)
|
||||
|
||||
lazy val root = Project(id = "akka", base = file("."))
|
||||
.aggregate(aggregatedProjects: _*)
|
||||
|
|
@ -247,8 +247,6 @@ lazy val jackson = akkaModule("akka-serialization-jackson")
|
|||
.settings(AutomaticModuleName.settings("akka.serialization.jackson"))
|
||||
.settings(OSGi.jackson)
|
||||
.settings(javacOptions += "-parameters")
|
||||
// FIXME #27019 remove when Jackson ScalaModule has been released for Scala 2.13
|
||||
.settings(crossScalaVersions -= Dependencies.scala213Version)
|
||||
.enablePlugins(ScaladocNoVerificationOfDiagrams)
|
||||
.disablePlugins(MimaPlugin)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue