catch ArrayIndexOutOfBoundsException and NumberFormatException
This commit is contained in:
parent
6ff4fa8435
commit
18c8735ce3
|
@ -141,7 +141,13 @@ public class SigarInvoker {
|
|||
if (typeClass.isArray()) {
|
||||
this.typeIsArray = true;
|
||||
if (argIsArrayIdx) {
|
||||
this.arrayIdx = Integer.parseInt((String)args[0]);
|
||||
try {
|
||||
this.arrayIdx = Integer.parseInt((String)args[0]);
|
||||
} catch (NumberFormatException ne) {
|
||||
String msg = getType() + ": '" +
|
||||
args[0] + "' is not a number";
|
||||
throw new SigarException(msg);
|
||||
}
|
||||
this.hasArrayIdx = true;
|
||||
}
|
||||
Class componentClass = typeClass.getComponentType();
|
||||
|
@ -186,6 +192,10 @@ public class SigarInvoker {
|
|||
return invoke(args, attr);
|
||||
}
|
||||
|
||||
private String aobMsg(int idx, int length) {
|
||||
return "Array index " + idx + " out of bounds " + length;
|
||||
}
|
||||
|
||||
public Object invoke(Object[] args, String attr)
|
||||
throws SigarException {
|
||||
|
||||
|
@ -219,7 +229,12 @@ public class SigarInvoker {
|
|||
*/
|
||||
if (this.typeIsArray) {
|
||||
if (this.hasArrayIdx) {
|
||||
typeObject = ((Object[])typeObject)[this.arrayIdx];
|
||||
Object[] array = (Object[])typeObject;
|
||||
if (this.arrayIdx >= array.length) {
|
||||
throw new SigarException(aobMsg(this.arrayIdx,
|
||||
array.length));
|
||||
}
|
||||
typeObject = array[this.arrayIdx];
|
||||
}
|
||||
else {
|
||||
int idx = getAttributeIndex(attr);
|
||||
|
@ -228,11 +243,26 @@ public class SigarInvoker {
|
|||
}
|
||||
switch (this.typeArrayType) {
|
||||
case ARRAY_TYPE_DOUBLE:
|
||||
return new Double(((double[])typeObject)[idx]);
|
||||
double[] d_array = (double[])typeObject;
|
||||
if (idx >= d_array.length) {
|
||||
throw new SigarException(aobMsg(idx,
|
||||
d_array.length));
|
||||
}
|
||||
return new Double(d_array[idx]);
|
||||
case ARRAY_TYPE_LONG:
|
||||
return new Long(((long[])typeObject)[idx]);
|
||||
long[] l_array = (long[])typeObject;
|
||||
if (idx >= l_array.length) {
|
||||
throw new SigarException(aobMsg(idx,
|
||||
l_array.length));
|
||||
}
|
||||
return new Long(l_array[idx]);
|
||||
case ARRAY_TYPE_OBJECT:
|
||||
return ((Object[])typeObject)[idx];
|
||||
Object[] o_array = (Object[])typeObject;
|
||||
if (idx >= o_array.length) {
|
||||
throw new SigarException(aobMsg(idx,
|
||||
o_array.length));
|
||||
}
|
||||
return o_array[idx];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue