Browse Source

Merge branch '6.0.x'

pull/31316/head
Stéphane Nicoll 2 years ago
parent
commit
0f6b018e97
  1. 25
      spring-jms/src/main/java/org/springframework/jms/listener/adapter/AbstractAdaptableMessageListener.java
  2. 40
      spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapterTests.java

25
spring-jms/src/main/java/org/springframework/jms/listener/adapter/AbstractAdaptableMessageListener.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2022 the original author or authors.
* Copyright 2002-2023 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.
@ -550,6 +550,29 @@ public abstract class AbstractAdaptableMessageListener @@ -550,6 +550,29 @@ public abstract class AbstractAdaptableMessageListener
}
return this.headers;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder(getClass().getSimpleName());
if (this.payload == null) {
sb.append(" [rawMessage=").append(this.message);
}
else {
sb.append(" [payload=");
if (this.payload instanceof byte[] bytes) {
sb.append("byte[").append(bytes.length).append(']');
}
else {
sb.append(this.payload);
}
}
if (this.headers != null) {
sb.append(", headers=").append(this.headers);
}
sb.append(']');
return sb.toString();
}
}
}

40
spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapterTests.java

@ -39,6 +39,7 @@ import org.springframework.jms.support.QosSettings; @@ -39,6 +39,7 @@ import org.springframework.jms.support.QosSettings;
import org.springframework.jms.support.converter.MappingJackson2MessageConverter;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.jms.support.converter.MessageType;
import org.springframework.jms.support.converter.MessagingMessageConverter;
import org.springframework.messaging.Message;
import org.springframework.messaging.converter.MessageConversionException;
import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory;
@ -339,6 +340,45 @@ public class MessagingMessageListenerAdapterTests { @@ -339,6 +340,45 @@ public class MessagingMessageListenerAdapterTests {
return responseMessage;
}
@Test
void lazyResolutionMessageToStringProvidesBestEffortWithUnresolvedPayload() throws JMSException {
MessagingMessageListenerAdapter adapter = getSimpleInstance("echo", Message.class);
MessagingMessageConverter messagingMessageConverter = adapter.getMessagingMessageConverter();
assertThat(messagingMessageConverter).isNotNull();
TextMessage message = new StubTextMessage();
assertThat(messagingMessageConverter.fromMessage(message)).isInstanceOfSatisfying(Message.class, msg ->
assertThat(msg.toString()).contains("rawMessage=").contains(message.toString())
.doesNotContain("payload=").doesNotContain("headers="));
}
@Test
void lazyResolutionMessageToStringWithResolvedPayload() throws JMSException {
MessagingMessageListenerAdapter adapter = getSimpleInstance("echo", Message.class);
MessagingMessageConverter messagingMessageConverter = adapter.getMessagingMessageConverter();
assertThat(messagingMessageConverter).isNotNull();
TextMessage message = new StubTextMessage("Hello");
assertThat(messagingMessageConverter.fromMessage(message)).isInstanceOfSatisfying(Message.class, msg -> {
msg.getPayload(); // force resolution
assertThat(msg.toString()).contains("payload=Hello")
.doesNotContain("rawMessage=").doesNotContain("headers=");
});
}
@Test
void lazyResolutionMessageToStringWithResolvedPayloadAndHeaders() throws JMSException {
MessagingMessageListenerAdapter adapter = getSimpleInstance("echo", Message.class);
MessagingMessageConverter messagingMessageConverter = adapter.getMessagingMessageConverter();
assertThat(messagingMessageConverter).isNotNull();
TextMessage message = new StubTextMessage("Hello");
message.setJMSPriority(7);
assertThat(messagingMessageConverter.fromMessage(message)).isInstanceOfSatisfying(Message.class, msg -> {
msg.getPayload();
msg.getHeaders(); // force resolution
assertThat(msg.toString()).contains("payload=Hello").contains("headers=").contains("jms_priority=7")
.doesNotContain("rawMessage=");
});
}
protected MessagingMessageListenerAdapter getSimpleInstance(String methodName, Class<?>... parameterTypes) {
Method m = ReflectionUtils.findMethod(SampleBean.class, methodName, parameterTypes);

Loading…
Cancel
Save