Hi Alex,

Sorry for a delay, I've finally tried to get more optimized hierarchies supported but I'm not sure we can get a handle on this top-level parameter, here is the test code:

private static class RuntimeExceptionMapper1
        extends AbstractTestExceptionMapper<RuntimeException> {

    }

    private static class RuntimeExceptionMapper2
        extends AbstractTestExceptionMapper<WebApplicationException> {

    }

private static class AbstractTestExceptionMapper<T extends RuntimeException>
        implements ExceptionMapper<T> {

        @Override
        public Response toResponse(T arg0) {
            // TODO Auto-generated method stub
            return null;
        }

    }

ProviderFactory would get a list of generic interfaces and the bounds from then and the best we can get to is 'RuntimeException' which is obtained from "<T extends RuntimeException>".

Any idea on how to get to say "WebApplicationException" which is visible in the code at least in "AbstractTestExceptionMapper<WebApplicationException>".
I'm wondering if it is even available at the runtime,

Sergey



On 06/09/11 22:13, Alex Porras wrote:
On Tue, Sep 6, 2011 at 4:12 PM, Alex Porras<[email protected]>  wrote:

What is happening is that when FooException is thrown in the
application, it is being handled by BarExceptionMapper.

I believe I have found the solution.  Despite the child exception
mappers specifying a generic type required by the parent (abstract)
exception mapper (which implements ExceptionMapper), each child class
also needs to include a "implements ExceptionMapper<T>" declaration,
to prevent CXF from bubbling up to the base interface implementation
declaration and using that class's generic type.

Thus, my exception mapper hierarchy is now:

(abstract) BaseRuntimeExceptionMapper<T extends BaseRuntimeException>
FooExceptionMapper extends BaseRuntimeExceptionMapper<FooException>
implements ExceptionMapper<FooException>
BarExceptionMapper extends
BaseRuntimeExceptionMapper<BarException>implements
ExceptionMapper<BarException>

This seems a little repetitive, but I think it makes sense given the
route that CXF seems to be using to determine the exception type.

Hope this helps someone else!

Alex


--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to