INT-2212 fixed NPE in AbstractKeyValueMessageStore
INT-2212 polished AbstractKeyValueMessageStore eliminated possibility for NPE during the Message removal, added test INT-2212 polishing INT-2212 polishing added remove(..) method to MessageGroupMetadata
This commit is contained in:
@@ -42,8 +42,7 @@ public abstract class AbstractKeyValueMessageStore extends AbstractMessageGroupS
|
||||
protected static final String MESSAGE_GROUP_KEY_PREFIX = "MESSAGE_GROUP_";
|
||||
|
||||
protected static final String CREATED_DATE = "CREATED_DATE";
|
||||
|
||||
|
||||
|
||||
// MessageStore methods
|
||||
|
||||
public Message<?> getMessage(UUID id) {
|
||||
@@ -68,7 +67,10 @@ public abstract class AbstractKeyValueMessageStore extends AbstractMessageGroupS
|
||||
if (message != null) {
|
||||
Assert.isInstanceOf(Message.class, message);
|
||||
}
|
||||
return (Message<?>) message;
|
||||
if (message != null){
|
||||
return this.normalizeMessage((Message<?>) message);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@ManagedAttribute
|
||||
@@ -146,7 +148,7 @@ public abstract class AbstractKeyValueMessageStore extends AbstractMessageGroupS
|
||||
|
||||
public void completeGroup(Object groupId) {
|
||||
Assert.notNull(groupId, "'groupId' must not be null");
|
||||
SimpleMessageGroup messageGroup = this.buildMessageGroup(this.getMessageGroup(groupId), true);
|
||||
SimpleMessageGroup messageGroup = this.buildMessageGroup(groupId, true);
|
||||
messageGroup.complete();
|
||||
this.doStore(MESSAGE_GROUP_KEY_PREFIX + groupId, new MessageGroupMetadata(messageGroup));
|
||||
}
|
||||
@@ -182,9 +184,15 @@ public abstract class AbstractKeyValueMessageStore extends AbstractMessageGroupS
|
||||
Assert.isInstanceOf(MessageGroupMetadata.class, mgm);
|
||||
MessageGroupMetadata messageGroupMetadata = (MessageGroupMetadata) mgm;
|
||||
|
||||
Message<?> message = this.removeMessage(messageGroupMetadata.firstId());
|
||||
Message<?> normalizedMessage = this.normalizeMessage(message);
|
||||
return normalizedMessage;
|
||||
UUID firstId = messageGroupMetadata.firstId();
|
||||
if (firstId != null){
|
||||
Message<?> message = this.removeMessage(firstId);
|
||||
|
||||
messageGroupMetadata.remove(message.getHeaders().getId());
|
||||
this.doStore(MESSAGE_GROUP_KEY_PREFIX + groupId, messageGroupMetadata);
|
||||
|
||||
return message;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -273,8 +281,7 @@ public abstract class AbstractKeyValueMessageStore extends AbstractMessageGroupS
|
||||
|
||||
private Message<?> getRawMessage(UUID id) {
|
||||
Assert.notNull(id, "'id' must not be null");
|
||||
Object message = this.doRetrieve(MESSAGE_KEY_PREFIX + id);
|
||||
Assert.isInstanceOf(Message.class, message);
|
||||
Object message = this.doRetrieve(MESSAGE_KEY_PREFIX + id);
|
||||
return (Message<?>) message;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.springframework.integration.store;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.TreeMap;
|
||||
import java.util.UUID;
|
||||
|
||||
@@ -62,6 +63,16 @@ public class MessageGroupMetadata implements Serializable{
|
||||
this.lastReleasedMessageSequenceNumber = messageGroup.getLastReleasedMessageSequenceNumber();
|
||||
}
|
||||
|
||||
public void remove(UUID messageId){
|
||||
long currentTimestamp = 0;
|
||||
for (Entry<Long, UUID> entry : messageCreationDateToIdMappings.entrySet()) {
|
||||
if (entry.getValue().equals(messageId)){
|
||||
currentTimestamp = entry.getKey();
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.messageCreationDateToIdMappings.remove(currentTimestamp);
|
||||
}
|
||||
|
||||
public Object getGroupId() {
|
||||
return this.groupId;
|
||||
@@ -72,7 +83,11 @@ public class MessageGroupMetadata implements Serializable{
|
||||
}
|
||||
|
||||
public UUID firstId(){
|
||||
return messageCreationDateToIdMappings.firstEntry().getValue();
|
||||
Entry<Long, UUID> firstEntry = messageCreationDateToIdMappings.firstEntry();
|
||||
if (firstEntry != null){
|
||||
return firstEntry.getValue();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isComplete() {
|
||||
|
||||
Reference in New Issue
Block a user