|
17 | 17 | package org.springframework.integration.mongodb.store; |
18 | 18 |
|
19 | 19 | import java.util.ArrayList; |
| 20 | +import java.util.Arrays; |
20 | 21 | import java.util.Collection; |
| 22 | +import java.util.Collections; |
21 | 23 | import java.util.HashMap; |
22 | 24 | import java.util.Iterator; |
23 | 25 | import java.util.List; |
@@ -140,13 +142,12 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore |
140 | 142 |
|
141 | 143 | private final String collectionName; |
142 | 144 |
|
143 | | - private volatile ClassLoader classLoader = ClassUtils.getDefaultClassLoader(); |
| 145 | + private ClassLoader classLoader = ClassUtils.getDefaultClassLoader(); |
144 | 146 |
|
145 | 147 | private ApplicationContext applicationContext; |
146 | 148 |
|
147 | 149 | private String[] whiteListPatterns; |
148 | 150 |
|
149 | | - |
150 | 151 | /** |
151 | 152 | * Create a MongoDbMessageStore using the provided {@link MongoDbFactory}.and the default collection name. |
152 | 153 | * @param mongoDbFactory The mongodb factory. |
@@ -186,14 +187,28 @@ public void setApplicationContext(ApplicationContext applicationContext) throws |
186 | 187 | * @param patterns the patterns. |
187 | 188 | */ |
188 | 189 | public void addWhiteListPatterns(String... patterns) { |
189 | | - this.whiteListPatterns = patterns; |
| 190 | + this.whiteListPatterns = patterns != null ? Arrays.copyOf(patterns, patterns.length) : null; |
| 191 | + } |
| 192 | + |
| 193 | + /** |
| 194 | + * Configure a set of converters to use in the {@link MappingMongoConverter}. |
| 195 | + * Must be instances of {@code org.springframework.core.convert.converter.Converter}, |
| 196 | + * {@code org.springframework.core.convert.converter.ConverterFactory}, |
| 197 | + * {@code org.springframework.core.convert.converter.GenericConverter} or |
| 198 | + * {@code org.springframework.data.convert.ConverterBuilder.ConverterAware}. |
| 199 | + * @param customConverters the converters to use. |
| 200 | + * @since 5.1.6 |
| 201 | + */ |
| 202 | + public void setCustomConverters(Object... customConverters) { |
| 203 | + this.converter.setCustomConverters(customConverters); |
190 | 204 | } |
191 | 205 |
|
192 | 206 | @Override |
193 | 207 | public void afterPropertiesSet() throws Exception { |
194 | 208 | if (this.applicationContext != null) { |
195 | 209 | this.converter.setApplicationContext(this.applicationContext); |
196 | 210 | } |
| 211 | + |
197 | 212 | this.converter.afterPropertiesSet(); |
198 | 213 |
|
199 | 214 | IndexOperations indexOperations = this.template.indexOps(this.collectionName); |
@@ -512,26 +527,38 @@ private static Map<String, Object> asMap(Bson bson) { |
512 | 527 | */ |
513 | 528 | private final class MessageReadingMongoConverter extends MappingMongoConverter { |
514 | 529 |
|
| 530 | + private Object[] customConverters; |
| 531 | + |
515 | 532 | MessageReadingMongoConverter(MongoDbFactory mongoDbFactory, |
516 | 533 | MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext) { |
517 | 534 | super(new DefaultDbRefResolver(mongoDbFactory), mappingContext); |
518 | 535 | } |
519 | 536 |
|
| 537 | + void setCustomConverters(Object... customConverters) { |
| 538 | + this.customConverters = |
| 539 | + customConverters != null ? Arrays.copyOf(customConverters, customConverters.length) : null; |
| 540 | + } |
| 541 | + |
520 | 542 | @Override |
521 | 543 | public void afterPropertiesSet() { |
522 | | - List<Object> customConverters = new ArrayList<>(); |
523 | | - customConverters.add(new MessageHistoryToDocumentConverter()); |
524 | | - customConverters.add(new DocumentToGenericMessageConverter()); |
525 | | - customConverters.add(new DocumentToMutableMessageConverter()); |
| 544 | + List<Object> converters = new ArrayList<>(); |
| 545 | + converters.add(new MessageHistoryToDocumentConverter()); |
| 546 | + converters.add(new DocumentToGenericMessageConverter()); |
| 547 | + converters.add(new DocumentToMutableMessageConverter()); |
526 | 548 | DocumentToErrorMessageConverter docToErrorMessageConverter = new DocumentToErrorMessageConverter(); |
527 | 549 | if (MongoDbMessageStore.this.whiteListPatterns != null) { |
528 | 550 | docToErrorMessageConverter.deserializingConverter |
529 | 551 | .addWhiteListPatterns(MongoDbMessageStore.this.whiteListPatterns); |
530 | 552 | } |
531 | | - customConverters.add(docToErrorMessageConverter); |
532 | | - customConverters.add(new DocumentToAdviceMessageConverter()); |
533 | | - customConverters.add(new ThrowableToBytesConverter()); |
534 | | - this.setCustomConversions(new MongoCustomConversions(customConverters)); |
| 553 | + converters.add(docToErrorMessageConverter); |
| 554 | + converters.add(new DocumentToAdviceMessageConverter()); |
| 555 | + converters.add(new ThrowableToBytesConverter()); |
| 556 | + |
| 557 | + if (this.customConverters != null) { |
| 558 | + Collections.addAll(converters, this.customConverters); |
| 559 | + } |
| 560 | + |
| 561 | + setCustomConversions(new MongoCustomConversions(converters)); |
535 | 562 | super.afterPropertiesSet(); |
536 | 563 | } |
537 | 564 |
|
|
0 commit comments