Craig,
I think there's a bug in BaseDescriptor. The doc for BaseDescriptor.get()
says:
"Return the value specified by this Descriptor from the specified Context.
If there is no such value, return null."
However, JXPath (or at least the version which I have) has two modes for
getting values, strict and lenient. In strict mode (the default), if you
have a path such as "foo/bar/quux", and the bar property is null,
JXPathContext.getValue() will throw a runtime exception rather than return
null. I think the latter behaviour is what BaseDescriptor is expecting, so
in BaseDescriptor.get() you need to change
JXPathContext jpc = context.getJXPathContext();
return (jpc.getValue("local/" + xpath));
to
JXPathContext jpc = context.getJXPathContext();
jpc.setLenient(true);
return (jpc.getValue("local/" + xpath));
BTW, I've been working on an implementation of the workflow system, which
definitely rocks. I've created an execution environment based on JMS -
activities are triggered by messages arriving on queues. I'm not sure what
the attitude of the client I'm working for is, but I may be able to submit
the generic JMS stuff I've been working on when I'm finished (mid-December).
Colin Sharples
IBM Global Services New Zealand.