From 2ff48a9367e3ad29a4be0a04986af43645a964ac Mon Sep 17 00:00:00 2001 From: Maxim Kirilov Date: Tue, 17 Jan 2017 08:14:11 -0500 Subject: [PATCH] Reuse `MessageConverterConfigurer.PartitionHandler` Fixes spring-cloud/spring-cloud-stream#764 (https://github.com/spring-cloud/spring-cloud-stream/issues/764) (cherry picked from commit 5faf1d8) --- .../binding/MessageConverterConfigurer.java | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/MessageConverterConfigurer.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/MessageConverterConfigurer.java index d3c3864d9..a8c3f4b92 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/MessageConverterConfigurer.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/MessageConverterConfigurer.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 the original author or authors. + * Copyright 2015-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,6 @@ import org.springframework.cloud.stream.config.BindingProperties; import org.springframework.cloud.stream.config.BindingServiceProperties; import org.springframework.cloud.stream.converter.CompositeMessageConverterFactory; import org.springframework.cloud.stream.converter.MessageConverterUtils; -import org.springframework.expression.EvaluationContext; import org.springframework.integration.channel.AbstractMessageChannel; import org.springframework.integration.expression.ExpressionUtils; import org.springframework.integration.support.MessageBuilderFactory; @@ -52,8 +51,10 @@ import org.springframework.util.StringUtils; * {@link org.springframework.messaging.support.ChannelInterceptor} to * the message channel to set the `ContentType` header for the message (if not already set) based on the `ContentType` * binding property of the channel. + * * @author Ilayaperumal Gopinathan * @author Marius Bogoevici + * @author Maxim Kirilov */ public class MessageConverterConfigurer implements MessageChannelConfigurer, BeanFactoryAware, InitializingBean { @@ -208,21 +209,26 @@ public class MessageConverterConfigurer implements MessageChannelConfigurer, Bea private final BindingProperties bindingProperties; - private PartitioningInterceptor(BindingProperties bindingProperties) { + private final PartitionHandler partitionHandler; + + PartitioningInterceptor(BindingProperties bindingProperties) { this.bindingProperties = bindingProperties; + this.partitionHandler = new PartitionHandler(MessageConverterConfigurer.this.beanFactory, + ExpressionUtils.createStandardEvaluationContext(MessageConverterConfigurer.this.beanFactory), + null, + this.bindingProperties.getProducer()); } @Override public Message preSend(Message message, MessageChannel channel) { - EvaluationContext evaluationContext = ExpressionUtils.createStandardEvaluationContext( - MessageConverterConfigurer.this.beanFactory); - PartitionHandler partitionHandler = new PartitionHandler(MessageConverterConfigurer.this - .beanFactory, evaluationContext, null, - this.bindingProperties.getProducer()); - int partition = partitionHandler.determinePartition(message); - return new MutableMessageBuilderFactory().fromMessage(message) - .setHeader(BinderHeaders.PARTITION_HEADER, partition).build(); + int partition = this.partitionHandler.determinePartition(message); + return MessageConverterConfigurer.this.messageBuilderFactory + .fromMessage(message) + .setHeader(BinderHeaders.PARTITION_HEADER, partition) + .build(); } + } + }