If a remote service interface is composed of an interface hierarchy, the ServiceInvocationHandler (in org.apache.cxf.dosgi.dsw.handlers package on 1.7.0) only handles correctly the checked exceptions of the interface the service directly implements/exports (the lowest level interface of the hierarchy). The checked exceptions of the superinterface methods are thrown as generic ServiceExceptions (which are RuntimeExceptions).
For example below, the IOException thrown by the throwBaseException method gets converted to ServiceException while the URISyntaxException thrown by the throwSubException method remains correctly as URISyntaxException. The service is exported as a TestSubInterface service.
I have been using DOSGi 1.7.0 but I also checked version 2.0.0 and ServiceInvocationHandler (now in org.apache.cxf.dosgi.common.proxy package) seems the same as in previous releases.
The problem seems to be in ServiceInvocationHandler in the method
for which the javadocs of iType.getDeclaredMethods() say "Returns an array of Method objects reflecting all the methods declared by the class or interface represented by this Class object. This includes public, protected, default (package) access, and private methods, but excludes inherited methods."
The introspectType method should be changed so that it also processes at least the public methods of the superinterfaces/classes. This can be achieved e.g. with iType.getMethods().