When you're invoking an operation through MBeanServer.invoke the return value is an object, so even a primitive boolean will have to return an object wrapper of itself (the conversion between primitive to instance is handled by the MBean server).
When I gave the following in the xmbean descriptor, it worked. <return-type>boolean</return-type>
When I expose the MBean remotely through the JRMPProxyFactory, I will not be calling mbeanserver.invoke().
The exported client interface and the Service implementation will have signatures of primitive boolean.
When I gave as above, it worked.