Closed
Description
In what version(s) of Spring Integration are you seeing this issue?
6.1.4
Describe the bug
So here (in ConfigurableMongoDbMessageStore) the resultClass is hardcoded to String but it could be for example UUID.
@Override
public Iterator<MessageGroup> iterator() {
Query query = Query.query(Criteria.where(MessageDocumentFields.GROUP_ID).exists(true));
Iterable<String> groupIds = getMongoTemplate().getCollection(collectionName)
.distinct(MessageDocumentFields.GROUP_ID, query.getQueryObject(), String.class);
return StreamSupport.stream(groupIds.spliterator(), false)
.map(this::getMessageGroup)
.iterator();
}
The stack trace when using the UUID as id below:
org.bson.BsonInvalidOperationException: readString can only be called when CurrentBSONType is STRING, not when CurrentBSONType is BINARY.
at org.bson.AbstractBsonReader.verifyBSONType(AbstractBsonReader.java:689)
at org.bson.AbstractBsonReader.checkPreconditions(AbstractBsonReader.java:721)
at org.bson.AbstractBsonReader.readString(AbstractBsonReader.java:456)
at org.bson.codecs.StringCodec.decode(StringCodec.java:80)
at org.bson.codecs.StringCodec.decode(StringCodec.java:31)
at com.mongodb.internal.operation.CommandResultArrayCodec.decode(CommandResultArrayCodec.java:52)
at com.mongodb.internal.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:60)
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:87)
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:42)
at com.mongodb.internal.connection.ReplyMessage.<init>(ReplyMessage.java:48)
at com.mongodb.internal.connection.InternalStreamConnection.getCommandResult(InternalStreamConnection.java:560)
at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:450)
at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:365)
at com.mongodb.internal.connection.UsageTrackingInternalConnection.sendAndReceive(UsageTrackingInternalConnection.java:114)
at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.sendAndReceive(DefaultConnectionPool.java:643)
at com.mongodb.internal.connection.CommandProtocolImpl.execute(CommandProtocolImpl.java:73)
at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:204)
at com.mongodb.internal.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:122)
at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:87)
at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:76)
at com.mongodb.internal.connection.DefaultServer$OperationCountTrackingConnection.command(DefaultServer.java:288)
at com.mongodb.internal.operation.CommandOperationHelper.createReadCommandAndExecute(CommandOperationHelper.java:239)
at com.mongodb.internal.operation.CommandOperationHelper.lambda$executeRetryableRead$4(CommandOperationHelper.java:220)
at com.mongodb.internal.operation.OperationHelper.lambda$withSourceAndConnection$0(OperationHelper.java:358)
at com.mongodb.internal.operation.OperationHelper.withSuppliedResource(OperationHelper.java:383)
at com.mongodb.internal.operation.OperationHelper.lambda$withSourceAndConnection$1(OperationHelper.java:357)
at com.mongodb.internal.operation.OperationHelper.withSuppliedResource(OperationHelper.java:383)
at com.mongodb.internal.operation.OperationHelper.withSourceAndConnection(OperationHelper.java:356)
at com.mongodb.internal.operation.CommandOperationHelper.lambda$executeRetryableRead$5(CommandOperationHelper.java:218)
at com.mongodb.internal.async.function.RetryingSyncSupplier.get(RetryingSyncSupplier.java:67)
at com.mongodb.internal.operation.CommandOperationHelper.executeRetryableRead(CommandOperationHelper.java:223)
at com.mongodb.internal.operation.CommandOperationHelper.executeRetryableRead(CommandOperationHelper.java:204)
at com.mongodb.internal.operation.DistinctOperation.execute(DistinctOperation.java:122)
at com.mongodb.internal.operation.DistinctOperation.execute(DistinctOperation.java:54)
at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:185)
at com.mongodb.client.internal.MongoIterableImpl.execute(MongoIterableImpl.java:130)
at com.mongodb.client.internal.MongoIterableImpl.iterator(MongoIterableImpl.java:90)
at com.mongodb.client.internal.MongoIterableImpl.iterator(MongoIterableImpl.java:37)
at java.base/java.lang.Iterable.spliterator(Iterable.java:101)
at org.springframework.integration.mongodb.store.ConfigurableMongoDbMessageStore.iterator(ConfigurableMongoDbMessageStore.java:245)
at org.springframework.integration.store.AbstractMessageGroupStore.expireMessageGroups(AbstractMessageGroupStore.java:128)
To Reproduce
In CorrelationStrategy -> Object getCorrelationKey(Message<?> message) return UUID.
Expected behavior
It should be able to handle different types of IDs.