From 3d5050f5149c1be2c3e332bdb65da59cd0a7b6e7 Mon Sep 17 00:00:00 2001 From: Christopher Coco Date: Tue, 3 Dec 2019 01:56:20 +0000 Subject: [PATCH] finatra-jackson: Update FieldInjection to catch ValueInstantiationException Problem/Solution Update `c.t.finatra.json.internal.caseclass.utils.FieldInjection` to also catch `ValueInstantiationException` due to https://github.com/FasterXML/jackson-databind/issues/2126. Differential Revision: https://phabricator.twitter.biz/D407296 --- CHANGELOG.rst | 4 ++++ .../json/internal/caseclass/utils/FieldInjection.scala | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 7f65761265..6bcb7d2f80 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,6 +10,10 @@ Unreleased Changed ~~~~~~~ +* finatra-jackson: Update `c.t.finatra.json.internal.caseclass.utils.FieldInjection` + to also catch `ValueInstantiationException` due to + https://github.com/FasterXML/jackson-databind/issues/2126. ``PHAB_ID=D407296`` + * finatra-http: Remove deprecated `c.t.finatra.http.HttpHeaders`. Users should use `com.twitter.finagle.http.Fields` instead. ``PHAB_ID=D407290`` diff --git a/jackson/src/main/scala/com/twitter/finatra/json/internal/caseclass/utils/FieldInjection.scala b/jackson/src/main/scala/com/twitter/finatra/json/internal/caseclass/utils/FieldInjection.scala index 2a769e80a6..48d75722a0 100644 --- a/jackson/src/main/scala/com/twitter/finatra/json/internal/caseclass/utils/FieldInjection.scala +++ b/jackson/src/main/scala/com/twitter/finatra/json/internal/caseclass/utils/FieldInjection.scala @@ -2,7 +2,7 @@ package com.twitter.finatra.json.internal.caseclass.utils import com.fasterxml.jackson.core.ObjectCodec import com.fasterxml.jackson.databind.deser.impl.ValueInjector -import com.fasterxml.jackson.databind.exc.InvalidDefinitionException +import com.fasterxml.jackson.databind.exc.{InvalidDefinitionException, ValueInstantiationException} import com.fasterxml.jackson.databind.{DeserializationContext, JavaType, PropertyName} import com.google.inject.{BindingAnnotation, ConfigurationException, Key} import com.twitter.finagle.http.Request @@ -68,7 +68,7 @@ private[json] class FieldInjection( try { Option(context.findInjectableValue(guiceKey, beanProperty, /* beanInstance = */ null)) } catch { - case _: InvalidDefinitionException => + case _: InvalidDefinitionException | _: ValueInstantiationException => throw JsonInjectionNotSupportedException(parentClass, name) case e: ConfigurationException => throw JsonInjectException(parentClass, name, guiceKey, e)