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 1c358ec9e6..85165e3699 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 @@ -146,23 +146,24 @@ public class JsonToObjectTransformer extends AbstractTransformer implements Bean private ResolvableType obtainResolvableTypeFromHeadersIfAny(MessageHeaders headers) { - ResolvableType valueType = null; - if (headers.containsKey(JsonHeaders.TYPE_ID) || headers.containsKey(JsonHeaders.RESOLVABLE_TYPE)) { - valueType = headers.get(JsonHeaders.RESOLVABLE_TYPE, ResolvableType.class); - if (valueType == null) { - Class targetClass = getClassForValue(headers.get(JsonHeaders.TYPE_ID)); - Class contentClass = null; - Class keyClass = null; - if (headers.containsKey(JsonHeaders.CONTENT_TYPE_ID)) { - contentClass = getClassForValue(headers.get(JsonHeaders.CONTENT_TYPE_ID)); - } - if (headers.containsKey(JsonHeaders.KEY_TYPE_ID)) { - keyClass = getClassForValue(headers.get(JsonHeaders.KEY_TYPE_ID)); - } - - valueType = JsonObjectMapper.buildResolvableType(targetClass, contentClass, keyClass); + ResolvableType valueType = headers.get(JsonHeaders.RESOLVABLE_TYPE, ResolvableType.class); + Object typeIdHeader = headers.get(JsonHeaders.TYPE_ID); + if (valueType == null && typeIdHeader != null) { + Class targetClass = getClassForValue(typeIdHeader); + Class contentClass = null; + Class keyClass = null; + Object contentTypeHeader = headers.get(JsonHeaders.CONTENT_TYPE_ID); + if (contentTypeHeader != null) { + contentClass = getClassForValue(contentTypeHeader); } + Object keyTypeHeader = headers.get(JsonHeaders.KEY_TYPE_ID); + if (keyTypeHeader != null) { + keyClass = getClassForValue(keyTypeHeader); + } + + valueType = JsonObjectMapper.buildResolvableType(targetClass, contentClass, keyClass); } + return valueType; } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/json/ObjectToJsonTransformer.java b/spring-integration-core/src/main/java/org/springframework/integration/json/ObjectToJsonTransformer.java index 92837c8f91..718a03c543 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/json/ObjectToJsonTransformer.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/json/ObjectToJsonTransformer.java @@ -120,11 +120,9 @@ public class ObjectToJsonTransformer extends AbstractTransformer { headers.putAll(message.getHeaders()); if (headers.containsKey(MessageHeaders.CONTENT_TYPE)) { - if (this.contentTypeExplicitlySet) { - // override, unless empty - if (StringUtils.hasLength(this.contentType)) { - headers.put(MessageHeaders.CONTENT_TYPE, this.contentType); - } + // override, unless empty + if (this.contentTypeExplicitlySet && StringUtils.hasLength(this.contentType)) { + headers.put(MessageHeaders.CONTENT_TYPE, this.contentType); } } else if (StringUtils.hasLength(this.contentType)) { diff --git a/spring-integration-jmx/src/main/java/org/springframework/integration/monitor/IntegrationMBeanExporter.java b/spring-integration-jmx/src/main/java/org/springframework/integration/monitor/IntegrationMBeanExporter.java index 497958ce35..95a056eea6 100644 --- a/spring-integration-jmx/src/main/java/org/springframework/integration/monitor/IntegrationMBeanExporter.java +++ b/spring-integration-jmx/src/main/java/org/springframework/integration/monitor/IntegrationMBeanExporter.java @@ -1038,26 +1038,10 @@ public class IntegrationMBeanExporter extends MBeanExporter implements Applicati String endpointName = null; String source = "endpoint"; - Object endpoint = null; + AbstractEndpoint endpoint = getEndpointForMonitor(monitor); - String[] names = this.applicationContext.getBeanNamesForType(AbstractEndpoint.class); - for (String beanName : names) { - endpoint = this.applicationContext.getBean(beanName); - Object target = null; - if (monitor instanceof MessagingGatewaySupport && endpoint.equals(monitor)) { - target = monitor; - } - else if (endpoint instanceof SourcePollingChannelAdapter) { - target = ((SourcePollingChannelAdapter) endpoint).getMessageSource(); - } - if (monitor.equals(target)) { - endpointName = beanName; - break; - } - } - - if (endpointName == null) { - endpoint = null; + if (endpoint != null) { + endpointName = endpoint.getBeanName(); } if (endpointName != null && endpointName.startsWith('_' + SI_PACKAGE)) { endpointName = getInternalComponentName(endpointName); @@ -1072,6 +1056,22 @@ public class IntegrationMBeanExporter extends MBeanExporter implements Applicati return messageSourceMetrics; } + private AbstractEndpoint getEndpointForMonitor(MessageSourceMetrics monitor) { + for (AbstractEndpoint endpoint : this.applicationContext.getBeansOfType(AbstractEndpoint.class).values()) { + Object target = null; + if (monitor instanceof MessagingGatewaySupport && endpoint.equals(monitor)) { + target = monitor; + } + else if (endpoint instanceof SourcePollingChannelAdapter) { + target = ((SourcePollingChannelAdapter) endpoint).getMessageSource(); + } + if (monitor.equals(target)) { + return endpoint; + } + } + return null; + } + private MessageSourceMetrics buildMessageSourceMetricsIfAny(MessageSourceMetrics monitor, String name, String source, Object endpoint) {