catch ArrayIndexOutOfBoundsException and NumberFormatException
This commit is contained in:
parent
6ff4fa8435
commit
18c8735ce3
|
@ -141,7 +141,13 @@ public class SigarInvoker {
|
||||||
if (typeClass.isArray()) {
|
if (typeClass.isArray()) {
|
||||||
this.typeIsArray = true;
|
this.typeIsArray = true;
|
||||||
if (argIsArrayIdx) {
|
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;
|
this.hasArrayIdx = true;
|
||||||
}
|
}
|
||||||
Class componentClass = typeClass.getComponentType();
|
Class componentClass = typeClass.getComponentType();
|
||||||
|
@ -186,6 +192,10 @@ public class SigarInvoker {
|
||||||
return invoke(args, attr);
|
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)
|
public Object invoke(Object[] args, String attr)
|
||||||
throws SigarException {
|
throws SigarException {
|
||||||
|
|
||||||
|
@ -219,7 +229,12 @@ public class SigarInvoker {
|
||||||
*/
|
*/
|
||||||
if (this.typeIsArray) {
|
if (this.typeIsArray) {
|
||||||
if (this.hasArrayIdx) {
|
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 {
|
else {
|
||||||
int idx = getAttributeIndex(attr);
|
int idx = getAttributeIndex(attr);
|
||||||
|
@ -228,11 +243,26 @@ public class SigarInvoker {
|
||||||
}
|
}
|
||||||
switch (this.typeArrayType) {
|
switch (this.typeArrayType) {
|
||||||
case ARRAY_TYPE_DOUBLE:
|
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:
|
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:
|
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