Hi Carl-Eric, sorry for a delay...
I'm wondering if we are dealing with the type erasure here, I'll need
to investigate more...
Cheers, Sergey

On Mon, Jun 6, 2011 at 11:36 PM, Carl-Erik Kopseng <[email protected]> wrote:
> I created a handler for parameters that were json-encoded, but I
> "generefied" it to make it applicable for various classes just by
> subclassing it. Unfortunately it does not work as expected, unless
> applying a little hack. I would like to know why the hack (to be
> described) is necessary (if at all).
>
> This is basically the general json handler:
>
> public class GeneralJsonHandler<T> implements ParameterHandler<T> {
>        /** Deserializes an Object of class T from its JSON representation */
>        final public T fromString(String jsonRepresentation) {
>                ObjectMapper mapper = new ObjectMapper();
>                T o= null;
>                try {
>                        o = mapper.readValue(jsonRepresentation, 
> getGenericClass() );
>                } catch (IOException e) {
>                         throw new WebApplicationException()
>                }
>                return o;
>        }
> }
>
> By my logic, simply subclassing this with the right type parameter T
> should essentially create a ParameterHandler for a type T.
> public class FooHandler extends GeneralJsonHandler<Foo>{ }
> public class BarHandler extends GeneralJsonHandler<Bar>{ }
>
> After registering these two handlers I should be able to handle
> json-ified string representations of Foo and Bar. Unfortunately,
> either is likely to be picked by CXF to handle a json string, no
> matter what class the string is supposed to represent. To make CXF
> aware that they are only applicable to the parameterized type I was
> forced to specify that they implement ParameterHandler<T>, something I
> found totally unnecessary, as that info is already implicitly given by
> the superclass.
>
> public class FooHandler extends GeneralJsonHandler<Foo> implements
> ParameterHandler<Foo> { }
> public class BarHandler extends GeneralJsonHandler<Bar>  implements
> ParameterHandler<Bar> { }{ }
>
> Any clues as to why the first approach did not work?
>
> --
> Carl-Erik Kopseng
>



-- 
Sergey Beryozkin

Application Integration Division of Talend
http://sberyozkin.blogspot.com

Reply via email to