From 7cfab7b9a874e73929929cbec3bb691f273ea288 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Wed, 13 May 2020 12:07:35 -0400 Subject: [PATCH] Fix RESOLVABLE_TYPE header population * We should not build a RESOLVABLE_TYPE header when we map requests. Only for replies. See: https://github.com/spring-projects/spring-integration-samples/issues/277 * We should log `ClassNotFoundException` only at debug level - to noise with info or warn **Cherry-pick to 5.2.x** --- .../integration/json/JsonToObjectTransformer.java | 2 +- .../integration/mapping/AbstractHeaderMapper.java | 9 +++++---- .../json/JsonToObjectTransformerParserTests.java | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/json/JsonToObjectTransformer.java b/spring-integration-core/src/main/java/org/springframework/integration/json/JsonToObjectTransformer.java index 90d351688f..7646b77fd0 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/json/JsonToObjectTransformer.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/json/JsonToObjectTransformer.java @@ -197,7 +197,7 @@ public class JsonToObjectTransformer extends AbstractTransformer implements Bean } catch (Exception ex) { if (ex.getCause() instanceof ClassNotFoundException) { - logger.info("Cannot build a ResolvableType from the request message '" + message + + logger.debug("Cannot build a ResolvableType from the request message '" + message + "' evaluating expression '" + this.valueTypeExpression.getExpressionString() + "'", ex); return null; } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/mapping/AbstractHeaderMapper.java b/spring-integration-core/src/main/java/org/springframework/integration/mapping/AbstractHeaderMapper.java index 3e3cefce03..24d6a16ce5 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/mapping/AbstractHeaderMapper.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/mapping/AbstractHeaderMapper.java @@ -278,7 +278,9 @@ public abstract class AbstractHeaderMapper implements RequestReplyHeaderMappe if (shouldMapHeader(headerName, headerMatcher)) { Object value = entry.getValue(); target.put(headerName, value); - if (JsonHeaders.TYPE_ID.equals(headerName) && value != null) { + if (this.replyHeaderMatcher == headerMatcher && + JsonHeaders.TYPE_ID.equals(headerName) && value != null) { + ResolvableType resolvableType = createJsonResolvableTypHeaderInAny(value, source.get(JsonHeaders.CONTENT_TYPE_ID), source.get(JsonHeaders.KEY_TYPE_ID)); @@ -303,11 +305,10 @@ public abstract class AbstractHeaderMapper implements RequestReplyHeaderMappe @Nullable Object keyId) { try { - return JsonHeaders.buildResolvableType(getClassLoader(), typeId, - contentId, keyId); + return JsonHeaders.buildResolvableType(getClassLoader(), typeId, contentId, keyId); } catch (Exception e) { - this.logger.warn("Cannot build a ResolvableType from 'json__TypeId__' header", e); + this.logger.debug("Cannot build a ResolvableType from 'json__TypeId__' header", e); } return null; } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/json/JsonToObjectTransformerParserTests.java b/spring-integration-core/src/test/java/org/springframework/integration/json/JsonToObjectTransformerParserTests.java index a4be6e8073..25a374e4d3 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/json/JsonToObjectTransformerParserTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/json/JsonToObjectTransformerParserTests.java @@ -93,7 +93,7 @@ public class JsonToObjectTransformerParserTests { assertThat(person.getAddress().toString()).isEqualTo("123 Main Street"); ArgumentCaptor stringArgumentCaptor = ArgumentCaptor.forClass(String.class); - verify(logger).info(stringArgumentCaptor.capture(), any(Exception.class)); + verify(logger).debug(stringArgumentCaptor.capture(), any(Exception.class)); String logMessage = stringArgumentCaptor.getValue(); assertThat(logMessage).startsWith("Cannot build a ResolvableType from the request message");