You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by Benson Margulies <bi...@gmail.com> on 2008/08/25 22:25:51 UTC
Generics as SEI/SEB
Dev,
I'm looking at CXF-1758, which presents as the Javascript front end
choking when the SEI and SEB are generics.
In other words, the implementation bean for a service is
SomeGenericOfType<String>, and it has a method like doSomething<T>.
With the simple front end, we get a schema for this with an
xsd:anyType in it instead of the actual specific type.
To my questionable taste, this can't be right. The question is, do we
want to support this? Is there even enough reflectable information in
the face of type erasure to make it possible to support this? I can't
see supporting this as a baroque notation for a method that takes
Object.
--benson
Re: Generics as SEI/SEB
Posted by Daniel Kulp <dk...@apache.org>.
This type of thing is EXTREMELY hard to support. In SOME cases, the users
would have to provide extra metadata into the RSFB/configurations as the
parameterized types wouldn't be available. In other cases, we could deduce
it. In both cases, however, we have to track a lot of extra details and
possibly even into the databindings where we don't have complete control
(JAXB).
For example, something like:
class DataBean<T> {
public List<T> foo;
}
interface MyService<X, Y> {
public DataBean<X> doData(DataBean<Y> y);
}
For JAXB to determine the List<T> in the DataBean, it needs to know about
stuff outside that bean. Actually, in this case, there would need to be two
separate "DataBean" types in the schema, one for X and one for Y.
Also, in your specific case, if you do:
impl = new SomeGenericOfType<String>();
Endpoint.publish(impl);
we have no way to get the <String> from the impl. If we call
impl.getClass(), there is nothing on the class that records this is a String
version of the impl. Thus, the user would need to provide that extra
information.
However, if they had something like:
class MyServiceImpl implements MyService<String, Integer> {
....
}
then we COULD query the generic types for the interfaces it implements.
(impl.getClass().getGenericInterfaces())
In anycase, this is a HUGE amount of work to get everything working (and as I
mentioned, in the JAXB case, I'm not sure if it's even possible). If you
REALLY wanted to start going down this path, I would recommend picking a few
small, specific cases and targetting them and not "everything using
generics".
Dan
On Monday 25 August 2008 4:25:51 pm Benson Margulies wrote:
> Dev,
>
> I'm looking at CXF-1758, which presents as the Javascript front end
> choking when the SEI and SEB are generics.
>
> In other words, the implementation bean for a service is
> SomeGenericOfType<String>, and it has a method like doSomething<T>.
>
> With the simple front end, we get a schema for this with an
> xsd:anyType in it instead of the actual specific type.
>
> To my questionable taste, this can't be right. The question is, do we
> want to support this? Is there even enough reflectable information in
> the face of type erasure to make it possible to support this? I can't
> see supporting this as a baroque notation for a method that takes
> Object.
>
> --benson
--
Daniel Kulp
dkulp@apache.org
http://www.dankulp.com/blog