SPRNET-1363 - Refactor OnMessage processing in MessageListenerAdapter to be better support listener method dispatching logic in subclasses.

This commit is contained in:
markpollack
2010-09-06 20:31:12 +00:00
parent 52ebf1c17d
commit 71eddc839d
6 changed files with 191 additions and 6 deletions

View File

@@ -0,0 +1,69 @@
#region License
/*
* Copyright 2002-2010 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.
*/
#endregion
#region
using System;
using System.Reflection;
using Spring.Expressions;
using Spring.Util;
#endregion
namespace Spring.Messaging.Listener.Adapter
{
/// <summary>
/// POC for a standard reflection based listener method invoker.
/// </summary>
/// <author>Mark Pollack</author>
public class StandardReflectionMessageListenerAdapter : MessageListenerAdapter
{
private const BindingFlags BINDING_FLAGS
= BindingFlags.Public | BindingFlags.NonPublic
| BindingFlags.Instance | BindingFlags.Static
| BindingFlags.IgnoreCase;
protected override object InvokeListenerMethod(string methodName, object[] arguments)
{
try
{
MethodInfo mi = MethodNode.GetBestMethod(HandlerObject.GetType(), methodName, BINDING_FLAGS, arguments);
if (mi == null)
{
throw new ListenerExecutionFailedException("Failed to invoke the target method '" + methodName +
"' with arguments " +
StringUtils.ArrayToCommaDelimitedString(arguments));
}
try
{
return mi.Invoke(HandlerObject, arguments);
} catch (Exception e)
{
throw new ListenerExecutionFailedException("Listener method '" + methodName + "' threw exception.", e);
}
} catch (Exception e)
{
throw new ListenerExecutionFailedException("Failed to invoke the target method '" + methodName +
"' with arguments " +
StringUtils.ArrayToCommaDelimitedString(arguments), e);
}
}
}
}

View File

@@ -69,7 +69,10 @@
<!-- Adapter -->
<!--
<object id="messageListenerAdapter" type="Spring.Messaging.Listener.MessageListenerAdapter, Spring.Messaging">
-->
<object id="messageListenerAdapter" type="Spring.Messaging.Listener.Adapter.StandardReflectionMessageListenerAdapter, Spring.Messaging.Tests">
<property name="DefaultResponseQueueName" value="msmqTestResponseQueue"/>
<property name="MessageConverterObjectName" value="binaryMessageConverter"/>
<property name="HandlerObject" ref="simpleHandler"/>

View File

@@ -90,6 +90,7 @@
<ItemGroup>
<Compile Include="MessagingCompilerOptionsTests.cs" />
<Compile Include="MessagingExceptionTests.cs" />
<Compile Include="Messaging\Listener\Adapter\StandardReflectionMessageListenerAdapter.cs" />
<Compile Include="Messaging\Listener\WaitingHandler.cs" />
<Compile Include="Messaging\Core\MessageQueueMetadataCacheTests.cs" />
<Compile Include="Messaging\Core\MessageQueueUtils.cs" />