From a75cddfa144a84c6ee11b0dddc82afc406bc3c3e Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Thu, 19 Mar 2009 17:48:12 +0000 Subject: [PATCH] InboundMessageMapper and OutboundMessageMapper strategy methods can now throw any Exception. --- .../gateway/AbstractMessagingGateway.java | 10 ++++++++- .../gateway/SimpleMessagingGateway.java | 21 +++++++++++++++++-- .../handler/MessageMappingMethodInvoker.java | 7 ++++--- .../message/InboundMessageMapper.java | 2 +- .../message/OutboundMessageMapper.java | 2 +- 5 files changed, 34 insertions(+), 8 deletions(-) diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/gateway/AbstractMessagingGateway.java b/org.springframework.integration/src/main/java/org/springframework/integration/gateway/AbstractMessagingGateway.java index 9b8d86c347..73f4ddfbe0 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/gateway/AbstractMessagingGateway.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/gateway/AbstractMessagingGateway.java @@ -135,7 +135,15 @@ public abstract class AbstractMessagingGateway extends AbstractEndpoint implemen Assert.state(this.replyChannel != null && (this.replyChannel instanceof PollableChannel), "receive is not supported, because no pollable reply channel has been configured"); Message message = this.channelTemplate.receive((PollableChannel) this.replyChannel); - return this.fromMessage(message); + try { + return this.fromMessage(message); + } + catch (Exception e) { + if (e instanceof RuntimeException) { + throw (RuntimeException) e; + } + else throw new MessagingException(message, e); + } } public Object sendAndReceive(Object object) { diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/gateway/SimpleMessagingGateway.java b/org.springframework.integration/src/main/java/org/springframework/integration/gateway/SimpleMessagingGateway.java index 44fda374ce..2c5236e86b 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/gateway/SimpleMessagingGateway.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/gateway/SimpleMessagingGateway.java @@ -17,6 +17,7 @@ package org.springframework.integration.gateway; import org.springframework.integration.core.Message; +import org.springframework.integration.core.MessagingException; import org.springframework.integration.message.InboundMessageMapper; import org.springframework.integration.message.OutboundMessageMapper; import org.springframework.util.Assert; @@ -55,12 +56,28 @@ public class SimpleMessagingGateway extends AbstractMessagingGateway { @Override protected Object fromMessage(Message message) { - return this.outboundMapper.fromMessage(message); + try { + return this.outboundMapper.fromMessage(message); + } + catch (Exception e) { + if (e instanceof RuntimeException) { + throw (RuntimeException) e; + } + throw new MessagingException(message, e); + } } @Override protected Message toMessage(Object object) { - return this.inboundMapper.toMessage(object); + try { + return this.inboundMapper.toMessage(object); + } + catch (Exception e) { + if (e instanceof RuntimeException) { + throw (RuntimeException) e; + } + throw new MessagingException("failed to create Message", e); + } } } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/handler/MessageMappingMethodInvoker.java b/org.springframework.integration/src/main/java/org/springframework/integration/handler/MessageMappingMethodInvoker.java index aeb8d49d3e..ef75b00d24 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/handler/MessageMappingMethodInvoker.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/handler/MessageMappingMethodInvoker.java @@ -100,8 +100,9 @@ public class MessageMappingMethodInvoker { return null; } Method method = this.methodResolver.resolveHandlerMethod(message); - Object[] args = this.createArgumentArrayFromMessage(method, message); + Object[] args = null; try { + args = this.createArgumentArrayFromMessage(method, message); return this.doInvokeMethod(method, args, message); } catch (InvocationTargetException e) { @@ -146,7 +147,7 @@ public class MessageMappingMethodInvoker { return result; } - private Object[] createArgumentArrayFromMessage(Method method, Message message) { + private Object[] createArgumentArrayFromMessage(Method method, Message message) throws Exception { Object args[] = null; Object mappingResult = this.methodsExpectingMessage.contains(method) ? message : this.resolveParameters(method, message); @@ -160,7 +161,7 @@ public class MessageMappingMethodInvoker { return args; } - private Object[] resolveParameters(Method method, Message message) { + private Object[] resolveParameters(Method method, Message message) throws Exception { OutboundMessageMapper mapper = this.messageMappers.get(method); if (mapper == null) { mapper = new MethodParameterMessageMapper(method); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/message/InboundMessageMapper.java b/org.springframework.integration/src/main/java/org/springframework/integration/message/InboundMessageMapper.java index 9f9768dbb8..6a2add363b 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/message/InboundMessageMapper.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/message/InboundMessageMapper.java @@ -25,6 +25,6 @@ import org.springframework.integration.core.Message; */ public interface InboundMessageMapper { - Message toMessage(T object); + Message toMessage(T object) throws Exception; } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/message/OutboundMessageMapper.java b/org.springframework.integration/src/main/java/org/springframework/integration/message/OutboundMessageMapper.java index fdd6da17e3..474943cc61 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/message/OutboundMessageMapper.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/message/OutboundMessageMapper.java @@ -25,6 +25,6 @@ import org.springframework.integration.core.Message; */ public interface OutboundMessageMapper { - T fromMessage(Message message); + T fromMessage(Message message) throws Exception; }