From 9dd7f6e5fbd50e4e0e7581882f7afda2c2db7462 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Fri, 5 Jul 2013 10:59:04 -0400 Subject: [PATCH] Update MessagingOperations hieararchy --- ...DestinationResolvingMessagingTemplate.java | 6 +- .../core/AbstractMessageSendingTemplate.java | 101 ++++++++++++++++++ .../core/AbstractMessagingTemplate.java | 85 +++++++-------- .../AbstractReceivingMessagingTemplate.java | 92 ---------------- ...onResolvingMessageReceivingOperations.java | 32 ++++++ ...solvingMessageRequestReplyOperations.java} | 8 +- ...ionResolvingMessageSendingOperations.java} | 2 +- ...ate.java => GenericMessagingTemplate.java} | 2 +- .../core/MessageReceivingOperations.java | 14 +-- .../core/MessageRequestReplyOperations.java | 39 +++++++ .../support/WebMessagingTemplate.java | 4 +- 11 files changed, 220 insertions(+), 165 deletions(-) create mode 100644 spring-context/src/main/java/org/springframework/messaging/core/AbstractMessageSendingTemplate.java delete mode 100644 spring-context/src/main/java/org/springframework/messaging/core/AbstractReceivingMessagingTemplate.java create mode 100644 spring-context/src/main/java/org/springframework/messaging/core/DestinationResolvingMessageReceivingOperations.java rename spring-context/src/main/java/org/springframework/messaging/core/{ResolvableDestinationMessageReceivingOperations.java => DestinationResolvingMessageRequestReplyOperations.java} (73%) rename spring-context/src/main/java/org/springframework/messaging/core/{ResolvableDestinationMessageSendingOperations.java => DestinationResolvingMessageSendingOperations.java} (91%) rename spring-context/src/main/java/org/springframework/messaging/core/{DefaultMessagingTemplate.java => GenericMessagingTemplate.java} (99%) create mode 100644 spring-context/src/main/java/org/springframework/messaging/core/MessageRequestReplyOperations.java diff --git a/spring-context/src/main/java/org/springframework/messaging/core/AbstractDestinationResolvingMessagingTemplate.java b/spring-context/src/main/java/org/springframework/messaging/core/AbstractDestinationResolvingMessagingTemplate.java index f9fc531edc..b0598d3967 100644 --- a/spring-context/src/main/java/org/springframework/messaging/core/AbstractDestinationResolvingMessagingTemplate.java +++ b/spring-context/src/main/java/org/springframework/messaging/core/AbstractDestinationResolvingMessagingTemplate.java @@ -23,8 +23,10 @@ import org.springframework.util.Assert; * @author Mark Fisher * @since 4.0 */ -public abstract class AbstractDestinationResolvingMessagingTemplate extends AbstractReceivingMessagingTemplate - implements ResolvableDestinationMessageReceivingOperations { +public abstract class AbstractDestinationResolvingMessagingTemplate extends AbstractMessagingTemplate + implements DestinationResolvingMessageSendingOperations, + DestinationResolvingMessageReceivingOperations, + DestinationResolvingMessageRequestReplyOperations { private volatile DestinationResolver destinationResolver; diff --git a/spring-context/src/main/java/org/springframework/messaging/core/AbstractMessageSendingTemplate.java b/spring-context/src/main/java/org/springframework/messaging/core/AbstractMessageSendingTemplate.java new file mode 100644 index 0000000000..2a7e0373dd --- /dev/null +++ b/spring-context/src/main/java/org/springframework/messaging/core/AbstractMessageSendingTemplate.java @@ -0,0 +1,101 @@ +/* + * Copyright 2002-2013 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.messaging.core; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessagingException; +import org.springframework.messaging.converter.DefaultMessageConverter; +import org.springframework.messaging.converter.MessageConverter; +import org.springframework.util.Assert; + + +/** + * @author Mark Fisher + * @since 4.0 + */ +public abstract class AbstractMessageSendingTemplate implements MessageSendingOperations { + + protected final Log logger = LogFactory.getLog(this.getClass()); + + private volatile D defaultDestination; + + protected volatile MessageConverter converter = new DefaultMessageConverter(); + + + public void setDefaultDestination(D defaultDestination) { + this.defaultDestination = defaultDestination; + } + + /** + * Set the {@link MessageConverter} that is to be used to convert + * between Messages and objects for this template. + *

The default is {@link DefaultMessageConverter}. + */ + public void setMessageConverter(MessageConverter messageConverter) { + Assert.notNull(messageConverter, "'messageConverter' must not be null"); + this.converter = messageConverter; + } + + + @Override + public

void send(Message

message) { + this.send(getRequiredDefaultDestination(), message); + } + + protected final D getRequiredDefaultDestination() { + Assert.state(this.defaultDestination != null, + "No 'defaultDestination' specified for MessagingTemplate. " + + "Unable to invoke method without an explicit destination argument."); + return this.defaultDestination; + } + + @Override + public

void send(D destination, Message

message) { + this.doSend(destination, message); + } + + protected abstract void doSend(D destination, Message message) ; + + + @Override + public void convertAndSend(T message) { + this.convertAndSend(getRequiredDefaultDestination(), message); + } + + @Override + public void convertAndSend(D destination, T object) { + this.convertAndSend(destination, object, null); + } + + @Override + public void convertAndSend(T object, MessagePostProcessor postProcessor) { + this.convertAndSend(getRequiredDefaultDestination(), object, postProcessor); + } + + @Override + public void convertAndSend(D destination, T object, MessagePostProcessor postProcessor) + throws MessagingException { + + Message message = this.converter.toMessage(object); + if (postProcessor != null) { + message = postProcessor.postProcessMessage(message); + } + this.send(destination, message); + } + +} diff --git a/spring-context/src/main/java/org/springframework/messaging/core/AbstractMessagingTemplate.java b/spring-context/src/main/java/org/springframework/messaging/core/AbstractMessagingTemplate.java index be56cd3a96..cab659d053 100644 --- a/spring-context/src/main/java/org/springframework/messaging/core/AbstractMessagingTemplate.java +++ b/spring-context/src/main/java/org/springframework/messaging/core/AbstractMessagingTemplate.java @@ -15,87 +15,78 @@ */ package org.springframework.messaging.core; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.springframework.messaging.Message; -import org.springframework.messaging.MessagingException; -import org.springframework.messaging.converter.DefaultMessageConverter; -import org.springframework.messaging.converter.MessageConverter; -import org.springframework.util.Assert; /** * @author Mark Fisher * @since 4.0 */ -public abstract class AbstractMessagingTemplate implements MessageSendingOperations { - - protected final Log logger = LogFactory.getLog(this.getClass()); - - private volatile D defaultDestination; - - protected volatile MessageConverter converter = new DefaultMessageConverter(); +public abstract class AbstractMessagingTemplate extends AbstractMessageSendingTemplate + implements MessageRequestReplyOperations, MessageReceivingOperations { - public void setDefaultDestination(D defaultDestination) { - this.defaultDestination = defaultDestination; + @Override + public

Message

receive() { + return this.receive(getRequiredDefaultDestination()); } - /** - * Set the {@link MessageConverter} that is to be used to convert - * between Messages and objects for this template. - *

The default is {@link DefaultMessageConverter}. - */ - public void setMessageConverter(MessageConverter messageConverter) { - Assert.notNull(messageConverter, "'messageConverter' must not be null"); - this.converter = messageConverter; + @Override + public

Message

receive(D destination) { + return this.doReceive(destination); + } + + protected abstract

Message

doReceive(D destination); + + + @Override + public Object receiveAndConvert() { + return this.receiveAndConvert(getRequiredDefaultDestination()); + } + + @Override + public Object receiveAndConvert(D destination) { + Message message = this.doReceive(destination); + return (message != null) ? this.converter.fromMessage(message) : null; } @Override - public

void send(Message

message) { - this.send(getRequiredDefaultDestination(), message); - } - - protected final D getRequiredDefaultDestination() { - Assert.state(this.defaultDestination != null, - "No 'defaultDestination' specified for MessagingTemplate. " - + "Unable to invoke method without an explicit destination argument."); - return this.defaultDestination; + public Message sendAndReceive(Message requestMessage) { + return this.sendAndReceive(getRequiredDefaultDestination(), requestMessage); } @Override - public

void send(D destination, Message

message) { - this.doSend(destination, message); + public Message sendAndReceive(D destination, Message requestMessage) { + return this.doSendAndReceive(destination, requestMessage); } - protected abstract void doSend(D destination, Message message) ; + protected abstract Message doSendAndReceive(D destination, Message requestMessage); @Override - public void convertAndSend(T message) { - this.convertAndSend(getRequiredDefaultDestination(), message); + public Object convertSendAndReceive(Object request) { + return this.convertSendAndReceive(getRequiredDefaultDestination(), request); } @Override - public void convertAndSend(D destination, T object) { - this.convertAndSend(destination, object, null); + public Object convertSendAndReceive(D destination, Object request) { + return this.convertSendAndReceive(destination, request, null); } @Override - public void convertAndSend(T object, MessagePostProcessor postProcessor) { - this.convertAndSend(getRequiredDefaultDestination(), object, postProcessor); + public Object convertSendAndReceive(Object request, MessagePostProcessor postProcessor) { + return this.convertSendAndReceive(getRequiredDefaultDestination(), request, postProcessor); } @Override - public void convertAndSend(D destination, T object, MessagePostProcessor postProcessor) - throws MessagingException { - - Message message = this.converter.toMessage(object); + public Object convertSendAndReceive(D destination, Object request, MessagePostProcessor postProcessor) { + Message requestMessage = this.converter.toMessage(request); if (postProcessor != null) { - message = postProcessor.postProcessMessage(message); + requestMessage = postProcessor.postProcessMessage(requestMessage); } - this.send(destination, message); + Message replyMessage = this.sendAndReceive(destination, requestMessage); + return this.converter.fromMessage(replyMessage); } } diff --git a/spring-context/src/main/java/org/springframework/messaging/core/AbstractReceivingMessagingTemplate.java b/spring-context/src/main/java/org/springframework/messaging/core/AbstractReceivingMessagingTemplate.java deleted file mode 100644 index cb142953f5..0000000000 --- a/spring-context/src/main/java/org/springframework/messaging/core/AbstractReceivingMessagingTemplate.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2002-2013 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.messaging.core; - -import org.springframework.messaging.Message; - - -/** - * @author Mark Fisher - * @since 4.0 - */ -public abstract class AbstractReceivingMessagingTemplate - extends AbstractMessagingTemplate implements MessageReceivingOperations { - - - @Override - public

Message

receive() { - return this.receive(getRequiredDefaultDestination()); - } - - @Override - public

Message

receive(D destination) { - return this.doReceive(destination); - } - - protected abstract

Message

doReceive(D destination); - - - @Override - public Object receiveAndConvert() { - return this.receiveAndConvert(getRequiredDefaultDestination()); - } - - @Override - public Object receiveAndConvert(D destination) { - Message message = this.doReceive(destination); - return (message != null) ? this.converter.fromMessage(message) : null; - } - - - @Override - public Message sendAndReceive(Message requestMessage) { - return this.sendAndReceive(getRequiredDefaultDestination(), requestMessage); - } - - @Override - public Message sendAndReceive(D destination, Message requestMessage) { - return this.doSendAndReceive(destination, requestMessage); - } - - protected abstract Message doSendAndReceive(D destination, Message requestMessage); - - - @Override - public Object convertSendAndReceive(Object request) { - return this.convertSendAndReceive(getRequiredDefaultDestination(), request); - } - - @Override - public Object convertSendAndReceive(D destination, Object request) { - return this.convertSendAndReceive(destination, request, null); - } - - @Override - public Object convertSendAndReceive(Object request, MessagePostProcessor postProcessor) { - return this.convertSendAndReceive(getRequiredDefaultDestination(), request, postProcessor); - } - - @Override - public Object convertSendAndReceive(D destination, Object request, MessagePostProcessor postProcessor) { - Message requestMessage = this.converter.toMessage(request); - if (postProcessor != null) { - requestMessage = postProcessor.postProcessMessage(requestMessage); - } - Message replyMessage = this.sendAndReceive(destination, requestMessage); - return this.converter.fromMessage(replyMessage); - } - -} diff --git a/spring-context/src/main/java/org/springframework/messaging/core/DestinationResolvingMessageReceivingOperations.java b/spring-context/src/main/java/org/springframework/messaging/core/DestinationResolvingMessageReceivingOperations.java new file mode 100644 index 0000000000..dffe46de17 --- /dev/null +++ b/spring-context/src/main/java/org/springframework/messaging/core/DestinationResolvingMessageReceivingOperations.java @@ -0,0 +1,32 @@ +/* + * Copyright 2002-2013 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.messaging.core; + +import org.springframework.messaging.Message; +import org.springframework.messaging.MessagingException; + + +/** + * @author Mark Fisher + * @since 4.0 + */ +public interface DestinationResolvingMessageReceivingOperations extends MessageReceivingOperations { + +

Message

receive(String destinationName) throws MessagingException; + + Object receiveAndConvert(String destinationName) throws MessagingException; + +} diff --git a/spring-context/src/main/java/org/springframework/messaging/core/ResolvableDestinationMessageReceivingOperations.java b/spring-context/src/main/java/org/springframework/messaging/core/DestinationResolvingMessageRequestReplyOperations.java similarity index 73% rename from spring-context/src/main/java/org/springframework/messaging/core/ResolvableDestinationMessageReceivingOperations.java rename to spring-context/src/main/java/org/springframework/messaging/core/DestinationResolvingMessageRequestReplyOperations.java index b19eb77bcb..57f83c53b1 100644 --- a/spring-context/src/main/java/org/springframework/messaging/core/ResolvableDestinationMessageReceivingOperations.java +++ b/spring-context/src/main/java/org/springframework/messaging/core/DestinationResolvingMessageRequestReplyOperations.java @@ -16,19 +16,13 @@ package org.springframework.messaging.core; import org.springframework.messaging.Message; -import org.springframework.messaging.MessagingException; /** * @author Mark Fisher * @since 4.0 */ -public interface ResolvableDestinationMessageReceivingOperations - extends MessageReceivingOperations, ResolvableDestinationMessageSendingOperations { - -

Message

receive(String destinationName) throws MessagingException; - - Object receiveAndConvert(String destinationName) throws MessagingException; +public interface DestinationResolvingMessageRequestReplyOperations extends MessageRequestReplyOperations { Message sendAndReceive(String destinationName, Message requestMessage); diff --git a/spring-context/src/main/java/org/springframework/messaging/core/ResolvableDestinationMessageSendingOperations.java b/spring-context/src/main/java/org/springframework/messaging/core/DestinationResolvingMessageSendingOperations.java similarity index 91% rename from spring-context/src/main/java/org/springframework/messaging/core/ResolvableDestinationMessageSendingOperations.java rename to spring-context/src/main/java/org/springframework/messaging/core/DestinationResolvingMessageSendingOperations.java index 3ed51e65cd..8f93ccb1ef 100644 --- a/spring-context/src/main/java/org/springframework/messaging/core/ResolvableDestinationMessageSendingOperations.java +++ b/spring-context/src/main/java/org/springframework/messaging/core/DestinationResolvingMessageSendingOperations.java @@ -23,7 +23,7 @@ import org.springframework.messaging.MessagingException; * @author Mark Fisher * @since 4.0 */ -public interface ResolvableDestinationMessageSendingOperations extends MessageSendingOperations { +public interface DestinationResolvingMessageSendingOperations extends MessageSendingOperations {

void send(String destinationName, Message

message) throws MessagingException; diff --git a/spring-context/src/main/java/org/springframework/messaging/core/DefaultMessagingTemplate.java b/spring-context/src/main/java/org/springframework/messaging/core/GenericMessagingTemplate.java similarity index 99% rename from spring-context/src/main/java/org/springframework/messaging/core/DefaultMessagingTemplate.java rename to spring-context/src/main/java/org/springframework/messaging/core/GenericMessagingTemplate.java index fe9a8754e7..12bd2498c2 100644 --- a/spring-context/src/main/java/org/springframework/messaging/core/DefaultMessagingTemplate.java +++ b/spring-context/src/main/java/org/springframework/messaging/core/GenericMessagingTemplate.java @@ -37,7 +37,7 @@ import org.springframework.util.Assert; * @author Mark Fisher * @since 4.0 */ -public class DefaultMessagingTemplate extends AbstractDestinationResolvingMessagingTemplate +public class GenericMessagingTemplate extends AbstractDestinationResolvingMessagingTemplate implements BeanFactoryAware { private volatile long sendTimeout = -1; diff --git a/spring-context/src/main/java/org/springframework/messaging/core/MessageReceivingOperations.java b/spring-context/src/main/java/org/springframework/messaging/core/MessageReceivingOperations.java index 302140388a..63ed8b5f6e 100644 --- a/spring-context/src/main/java/org/springframework/messaging/core/MessageReceivingOperations.java +++ b/spring-context/src/main/java/org/springframework/messaging/core/MessageReceivingOperations.java @@ -23,7 +23,7 @@ import org.springframework.messaging.MessagingException; * @author Mark Fisher * @since 4.0 */ -public interface MessageReceivingOperations extends MessageSendingOperations { +public interface MessageReceivingOperations {

Message

receive() throws MessagingException; @@ -33,16 +33,4 @@ public interface MessageReceivingOperations extends MessageSendingOperations< Object receiveAndConvert(D destination) throws MessagingException; - Message sendAndReceive(Message requestMessage); - - Message sendAndReceive(D destination, Message requestMessage); - - Object convertSendAndReceive(Object request); - - Object convertSendAndReceive(D destination, Object request); - - Object convertSendAndReceive(Object request, MessagePostProcessor requestPostProcessor); - - Object convertSendAndReceive(D destination, Object request, MessagePostProcessor requestPostProcessor); - } diff --git a/spring-context/src/main/java/org/springframework/messaging/core/MessageRequestReplyOperations.java b/spring-context/src/main/java/org/springframework/messaging/core/MessageRequestReplyOperations.java new file mode 100644 index 0000000000..255cbc72c0 --- /dev/null +++ b/spring-context/src/main/java/org/springframework/messaging/core/MessageRequestReplyOperations.java @@ -0,0 +1,39 @@ +/* + * Copyright 2002-2013 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.messaging.core; + +import org.springframework.messaging.Message; + + +/** + * @author Mark Fisher + * @since 4.0 + */ +public interface MessageRequestReplyOperations { + + Message sendAndReceive(Message requestMessage); + + Message sendAndReceive(D destination, Message requestMessage); + + Object convertSendAndReceive(Object request); + + Object convertSendAndReceive(D destination, Object request); + + Object convertSendAndReceive(Object request, MessagePostProcessor requestPostProcessor); + + Object convertSendAndReceive(D destination, Object request, MessagePostProcessor requestPostProcessor); + +} diff --git a/spring-websocket/src/main/java/org/springframework/web/messaging/support/WebMessagingTemplate.java b/spring-websocket/src/main/java/org/springframework/web/messaging/support/WebMessagingTemplate.java index 451e469fb3..8c28acdc0a 100644 --- a/spring-websocket/src/main/java/org/springframework/web/messaging/support/WebMessagingTemplate.java +++ b/spring-websocket/src/main/java/org/springframework/web/messaging/support/WebMessagingTemplate.java @@ -3,13 +3,13 @@ package org.springframework.web.messaging.support; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageDeliveryException; -import org.springframework.messaging.core.AbstractMessagingTemplate; +import org.springframework.messaging.core.AbstractMessageSendingTemplate; import org.springframework.messaging.support.MessageBuilder; import org.springframework.util.Assert; import org.springframework.web.messaging.MessageType; -public class WebMessagingTemplate extends AbstractMessagingTemplate { +public class WebMessagingTemplate extends AbstractMessageSendingTemplate { private final MessageChannel outputChannel;