Jms request/reply operations

This commit updates JmsMessagingTemplate to support the
MessageRequestReplyOperation interface that provides synchronous
request/reply operations.

As JmsMessagingTemplate delegates everything under the scenes to
JmsTemplate, the latter has been updated as well to offer such lower
level operation.

Issue: SPR-12037
This commit is contained in:
Stephane Nicoll
2014-07-28 15:22:31 +02:00
parent c89325b9ca
commit b6389a6c66
9 changed files with 557 additions and 46 deletions

View File

@@ -28,6 +28,7 @@ import org.springframework.messaging.converter.MessageConversionException;
*
* @author Mark Fisher
* @author Rossen Stoyanchev
* @author Stephane Nicoll
* @since 4.0
*/
public abstract class AbstractMessagingTemplate<D> extends AbstractMessageReceivingTemplate<D>
@@ -76,20 +77,7 @@ public abstract class AbstractMessagingTemplate<D> extends AbstractMessageReceiv
public <T> T convertSendAndReceive(D destination, Object request, Map<String, Object> headers,
Class<T> targetClass, MessagePostProcessor postProcessor) {
MessageHeaders messageHeaders = (headers != null ? new MessageHeaders(headers) : null);
Message<?> requestMessage = getMessageConverter().toMessage(request, messageHeaders);
if (requestMessage == null) {
String payloadType = (request != null ? request.getClass().getName() : null);
Object contentType = (messageHeaders != null ? messageHeaders.get(MessageHeaders.CONTENT_TYPE) : null);
throw new MessageConversionException("Unable to convert payload with type '" + payloadType +
"', contentType='" + contentType + "', converter=[" + getMessageConverter() + "]");
}
if (postProcessor != null) {
requestMessage = postProcessor.postProcessMessage(requestMessage);
}
Message<?> requestMessage = doConvert(request, headers, postProcessor);
Message<?> replyMessage = sendAndReceive(destination, requestMessage);
return (replyMessage != null ? (T) getMessageConverter().fromMessage(replyMessage, targetClass) : null);
}