[Ryan Hoegg wrote:] > I am CC'ing xmlrpc-dev@ , please follow up there.
Fine - wasn't sure which list would be most appropriate. > This would be lovely, I have been musing over something like that for > months. +1 from me. > > One change to the idea that might be nice is to do the introspection > once at deployment time instead of on each call. Getting all the methods and caching them isn't hard to do, but I'm not entirely sure whether that buys you much - current JVM's already cache the lookups, and I think the cost of the lookup is much smaller than the actual method (except for trivial methods, of course). > Using an interface is > a nice touch, I was thinking about using method attributes (using > commons-attributes or something else) or a separate XML deployment > descriptor. Different use case :) The advantage of an interface is that it can't get out of synch with the object. And of course in my scenario I already have an interface ;-) But I'm open to discussion. Cheers, Ronald > Life is hard, and then you die wrote: > > > Hi, > > > >I would like to be able provide a handler and have the methods > >automatically looked up, just like the Invoker does, but export > >only a subset of the available methods, as defined by an interface > >(the case I'm running into this is when the handlers are avalon > >components - they implement various interfaces, but only one of them is > >what I'd like to export as rpc methods). One minimal change to > >accomplish this would be to add another constructor to > >org.apache.xmlrpc.Invoker which takes both the targetObject and the > >targetClass: > > > > /** > > * Create a new Invoker instance which limits the methods that can be > > * invoked on the target. The invoker will only invoke methods on the > > * given target which are defined as public in the given interface > > class. > > * > > * @param target the object on which to invoke the methods > > * @param iface the exported methods that can be invoked > > */ > > public Invoker(Object target, Class iface) > > { > > if (!iface.isInstance(target)) > > throw new IllegalArgumentException("target " + target + " is > > not an instance of " + iface.getName()); > > invokeTarget = target; > > targetClass = iface; > > } > > > >Does this sound like a reasonable enhancement? > > > > > > Cheers, > > > > Ronald > > > > > > >