I am attempting to write code that will have dynamically updated variables
within a table. To accomplish this I am using VariantVariable as wrapper around
the Variable that I pass in.
However when I try to run this from within an AgentX agent, I get an class cast
exception in AgentXProtocol. Specifically in the method encodeVariableData, the
code is attempting to get the value based on the syntax by casting to the
correct type. However since a VariantVariable can't be cast to different types
this fails.
The code can be fixed by the following changes:
169c169
< buf.putInt((int) (((AssignableFromLong) v).toLong() & 0xFFFFFFFFL));
> buf.putInt((int)(((UnsignedInteger32)v).getValue() & 0xFFFFFFFFL));
173c173
< buf.putInt(((AssignableFromInteger) v).toInt());
> buf.putInt(((Integer32)v).getValue());
177c177
< buf.putLong(((AssignableFromLong) v).toLong());
> buf.putLong(((Counter64)v).getValue());
For reference I have the following sample class that I use as the variable
within my table when I add a row:
public static class RandomCounterCallback extends ReadonlyVariableCallback
{
long value = 0;
@Override
public void updateVariable(final VariantVariable variable)
{
this.value += (long) (Math.random() * 20);
variable.setValue(this.value);
}
}
final MOTable table = DefaultMOFactory.getInstance().createTable(oid, null,
columns);
table.addRow(DefaultMOFactory.createRow(new OID("1"), new Variable[]{new
VariantVariable(new Counter64(0), new RandomCounterCallback())}));
I am using this change locally within my system and am wondering if other
people have hit this issue and if so if there is a different way of doing this.
Thanks,
Andrew
_______________________________________________
SNMP4J mailing list
[email protected]
http://lists.agentpp.org/mailman/listinfo/snmp4j