Enable Jackson for 2.13 (#27136)

* Enable jackson for 2.13

* Fix 2.13 warnings in jackson module
This commit is contained in:
Christopher Batey 2019-06-13 16:17:04 +01:00 committed by GitHub
parent 893bd8b74b
commit 6e93bef605
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 29 additions and 30 deletions

View file

@ -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]

View file

@ -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
}

View file

@ -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()
}

View file

@ -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}")
}

View file

@ -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)