mirror of https://github.com/apache/activemq.git
- Added fix for 1.4/1.5 compatibility issue
- Added fix for wrong counting of tokens - Added test case for ReflectionUtil.java git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@412364 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e332143fd8
commit
ec74dd845c
|
@ -50,7 +50,7 @@ public abstract class JmsClientSystemSupport {
|
|||
performanceSampler.setSamplerSettings(samplerSettings);
|
||||
|
||||
PerfReportGenerator report = new PerfReportGenerator();
|
||||
report.setReportName(this.getClass().getCanonicalName());
|
||||
report.setReportName(this.getClass().getName());
|
||||
report.setTestSettings(getSettings());
|
||||
report.startGenerateReport();
|
||||
|
||||
|
|
|
@ -43,12 +43,13 @@ public final class ReflectionUtil {
|
|||
debugInfo = "Invoking: " + targetClass.getName();
|
||||
|
||||
StringTokenizer tokenizer = new StringTokenizer(key, ".");
|
||||
int tokenCount = tokenizer.countTokens();
|
||||
|
||||
// NOTE: Skip the first token, it is assume that this is an indicator for the object itself
|
||||
tokenizer.nextToken();
|
||||
|
||||
// For nested settings, get the object first
|
||||
for (int j=0; j<tokenizer.countTokens()-1; j++) {
|
||||
// For nested settings, get the object first. -2, do not count the first and last token
|
||||
for (int j=0; j<tokenCount-2; j++) {
|
||||
// Find getter method first
|
||||
String name = tokenizer.nextToken();
|
||||
String getMethod = "get" + name.substring(0,1).toUpperCase() + name.substring(1);
|
||||
|
@ -96,6 +97,7 @@ public final class ReflectionUtil {
|
|||
// For unknown object type, try to call the valueOf method of the object
|
||||
// to convert the string to the target object type
|
||||
} else {
|
||||
// Note valueOf method should be public and static
|
||||
Object param = propertyType.getMethod("valueOf", new Class[] {String.class}).invoke(null, new Object[] {val});
|
||||
targetClass.getMethod(setterMethod, new Class[] {propertyType}).invoke(target, new Object[] {param});
|
||||
}
|
||||
|
|
|
@ -0,0 +1,189 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2005-2006 The Apache Software Foundation
|
||||
*
|
||||
* 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.apache.activemq.tool;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
public class ReflectionUtilTest extends TestCase {
|
||||
private boolean booleanData;
|
||||
private int intData;
|
||||
private long longData;
|
||||
private short shortData;
|
||||
private double doubleData;
|
||||
private float floatData;
|
||||
private byte byteData;
|
||||
private char charData;
|
||||
private String stringData;
|
||||
private ReflectionUtilTest testData;
|
||||
|
||||
public void testDataTypeConfig() {
|
||||
// Initialize variables;
|
||||
booleanData = false;
|
||||
intData = 0;
|
||||
longData = 0;
|
||||
shortData = 0;
|
||||
doubleData = 0.0;
|
||||
floatData = 0.0F;
|
||||
byteData = 0;
|
||||
charData = '0';
|
||||
stringData = "false";
|
||||
|
||||
Object targetObj = new ReflectionUtilTest();
|
||||
|
||||
// Set properties
|
||||
Properties props = new Properties();
|
||||
props.setProperty("test.booleanData", "true");
|
||||
props.setProperty("test.intData", "1000");
|
||||
props.setProperty("test.longData", "2000");
|
||||
props.setProperty("test.shortData", "3000");
|
||||
props.setProperty("test.doubleData", "1234.567");
|
||||
props.setProperty("test.floatData", "9876.543");
|
||||
props.setProperty("test.byteData", "127");
|
||||
props.setProperty("test.charData", "A");
|
||||
props.setProperty("test.stringData", "true");
|
||||
props.setProperty("test.testData", "TEST.FOO.BAR");
|
||||
|
||||
ReflectionUtil.configureClass(targetObj, props);
|
||||
|
||||
// Check config
|
||||
assertEquals(true, ((ReflectionUtilTest)targetObj).isBooleanData());
|
||||
assertEquals(1000, ((ReflectionUtilTest)targetObj).getIntData());
|
||||
assertEquals(2000, ((ReflectionUtilTest)targetObj).getLongData());
|
||||
assertEquals(3000, ((ReflectionUtilTest)targetObj).getShortData());
|
||||
assertEquals(1234.567, ((ReflectionUtilTest)targetObj).getDoubleData(), 0.0001);
|
||||
assertEquals(9876.543, ((ReflectionUtilTest)targetObj).getFloatData(), 0.0001);
|
||||
assertEquals(127, ((ReflectionUtilTest)targetObj).getByteData());
|
||||
assertEquals('A', ((ReflectionUtilTest)targetObj).getCharData());
|
||||
assertEquals("true", ((ReflectionUtilTest)targetObj).getStringData());
|
||||
assertEquals("TEST.FOO.BAR", ((ReflectionUtilTest)targetObj).getTestData().getStringData());
|
||||
}
|
||||
|
||||
public void testNestedConfig() {
|
||||
ReflectionUtilTest t1 = new ReflectionUtilTest();
|
||||
ReflectionUtilTest t2 = new ReflectionUtilTest();
|
||||
ReflectionUtilTest t3 = new ReflectionUtilTest();
|
||||
ReflectionUtilTest t4 = new ReflectionUtilTest();
|
||||
ReflectionUtilTest t5 = new ReflectionUtilTest();
|
||||
|
||||
ReflectionUtil.configureClass(t1, "test.stringData", "t1");
|
||||
assertEquals("t1", t1.getStringData());
|
||||
|
||||
t1.setTestData(t2);
|
||||
ReflectionUtil.configureClass(t1, "test.testData.stringData", "t2");
|
||||
assertEquals("t2", t2.getStringData());
|
||||
|
||||
t2.setTestData(t3);
|
||||
ReflectionUtil.configureClass(t1, "test.testData.testData.stringData", "t3");
|
||||
assertEquals("t3", t3.getStringData());
|
||||
|
||||
t3.setTestData(t4);
|
||||
ReflectionUtil.configureClass(t1, "test.testData.testData.testData.stringData", "t4");
|
||||
assertEquals("t4", t4.getStringData());
|
||||
|
||||
t4.setTestData(t5);
|
||||
ReflectionUtil.configureClass(t1, "test.testData.testData.testData.testData.stringData", "t5");
|
||||
assertEquals("t5", t5.getStringData());
|
||||
}
|
||||
|
||||
public boolean isBooleanData() {
|
||||
return booleanData;
|
||||
}
|
||||
|
||||
public void setBooleanData(boolean booleanData) {
|
||||
this.booleanData = booleanData;
|
||||
}
|
||||
|
||||
public int getIntData() {
|
||||
return intData;
|
||||
}
|
||||
|
||||
public void setIntData(int intData) {
|
||||
this.intData = intData;
|
||||
}
|
||||
|
||||
public long getLongData() {
|
||||
return longData;
|
||||
}
|
||||
|
||||
public void setLongData(long longData) {
|
||||
this.longData = longData;
|
||||
}
|
||||
|
||||
public short getShortData() {
|
||||
return shortData;
|
||||
}
|
||||
|
||||
public void setShortData(short shortData) {
|
||||
this.shortData = shortData;
|
||||
}
|
||||
|
||||
public double getDoubleData() {
|
||||
return doubleData;
|
||||
}
|
||||
|
||||
public void setDoubleData(double doubleData) {
|
||||
this.doubleData = doubleData;
|
||||
}
|
||||
|
||||
public float getFloatData() {
|
||||
return floatData;
|
||||
}
|
||||
|
||||
public void setFloatData(float floatData) {
|
||||
this.floatData = floatData;
|
||||
}
|
||||
|
||||
public byte getByteData() {
|
||||
return byteData;
|
||||
}
|
||||
|
||||
public void setByteData(byte byteData) {
|
||||
this.byteData = byteData;
|
||||
}
|
||||
|
||||
public char getCharData() {
|
||||
return charData;
|
||||
}
|
||||
|
||||
public void setCharData(char charData) {
|
||||
this.charData = charData;
|
||||
}
|
||||
|
||||
public String getStringData() {
|
||||
return stringData;
|
||||
}
|
||||
|
||||
public void setStringData(String stringData) {
|
||||
this.stringData = stringData;
|
||||
}
|
||||
|
||||
public ReflectionUtilTest getTestData() {
|
||||
return testData;
|
||||
}
|
||||
|
||||
public void setTestData(ReflectionUtilTest testData) {
|
||||
this.testData = testData;
|
||||
}
|
||||
|
||||
public static ReflectionUtilTest valueOf(String data) {
|
||||
ReflectionUtilTest obj = new ReflectionUtilTest();
|
||||
obj.setStringData(data);
|
||||
return obj;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue