INT-3110 Fix JMX Control Bus With SF 3.2.3
Spring 3.2.3 registers MBean operations with parameter names instead of the JVM default p1, p2 etc based on parameter position in the method signature. Since the OperationInvokingMessageHandler matched the supplied arguments using the p1, p2 etc names, this prevented the control bus from finding the target method. Fall back to the old naming scheme based on parameter position if a matching parameter is not found. Add a test using a Map payload to supply the named arguments (p1, p2). Add an ignored test that tests using named arguments (key, channelName). Test with 3.1.4; remove Ignore and test with 3.2.3. TODO: remove the Ignore annotation when SF 3.2.3 is the minimum.
This commit is contained in:
committed by
Mark Fisher
parent
4832130ef2
commit
1847eaa194
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2010 the original author or authors.
|
||||
* 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.
|
||||
@@ -58,6 +58,7 @@ import org.springframework.util.ObjectUtils;
|
||||
*
|
||||
* @author Mark Fisher
|
||||
* @author Oleg Zhurakousky
|
||||
* @author Gary Russell
|
||||
* @since 2.0
|
||||
*/
|
||||
public class OperationInvokingMessageHandler extends AbstractReplyProducingMessageHandler implements InitializingBean {
|
||||
@@ -127,6 +128,14 @@ public class OperationInvokingMessageHandler extends AbstractReplyProducingMessa
|
||||
String signature[] = new String[paramInfoArray.length];
|
||||
for (MBeanParameterInfo paramInfo : paramInfoArray) {
|
||||
Object value = paramsFromMessage.get(paramInfo.getName());
|
||||
if (value == null) {
|
||||
/*
|
||||
* With Spring 3.2.3 and greater, the parameter names are
|
||||
* registered instead of the JVM's default p1, p2 etc.
|
||||
* Fall back to that naming style if not found.
|
||||
*/
|
||||
value = paramsFromMessage.get("p" + (index + 1));
|
||||
}
|
||||
if (value != null && value.getClass().getName().equals(paramInfo.getType())) {
|
||||
values[index] = value;
|
||||
signature[index] = paramInfo.getType();
|
||||
|
||||
Reference in New Issue
Block a user