Thanks for the reply. I think you're right that there's no great
solution to my problem.
I've got it solved at the moment by creating a client side interface,
and wrapper classes for the two proxies that both implement that
client-side interface (basically mimicking the functionality of the
common server interface). I don't like it, but it seems to be
working.
Ryan
On Jun 27, 10:00 am, Thomas Broyer <
t.bro...@gmail.com> wrote:
> On Monday, June 27, 2011 12:40:05 PM UTC+2, Ryan McFall wrote:
>
> > I have two domain objects that implement the same interface on the
> > server, and a third class that contains a (heterogeneous) List of
> > those objects. I need to be able to expose this list on the client
> > side. The domain objects do not share a common super-class (they
> > instead delegate the common functionality to another object).
>
> > Given that all proxy interfaces are required to extend BaseProxy, I
> > cannot figure out how to write multiple proxies that will have a
> > parent interface in common. I tried making a base interface that both
> > proxies extend, but that base interface must extend EntityProxy, and
> > the GWT compiler complains if you have an interface that extends
> > EntityProxy but does not have a ProxyFor annotation.
>
> The interface need not extend EntityProxy, you can have:
> interface BaseInterface { ... }
> interface FooProxy extends BaseInterface, EntityProxy { }
> interface BarProxy extends BaseInterface, EntityProxy { }
>
> ...but then you obviously cannot have a proxy declare a list that contain
> both FooProxy and BarProxy, as a Collection<BaseInterface> would be rejected
> because BaseInterface doesn't extend EntityProxy or ValueProxy.
>
> BUT!
>
> - The hierarchy of proxy interfaces need not mimic the one of domain
> objects on the server-side. You could have "interface BarProxy extends
> FooProxy" for example.
> - or, because you can have more than one proxy interface for the same
> domain object, you could annotate the base interface with a @ProxyFor for
> one of the domain class.
>
> I am wondering (although I suspect the answer is no) whether I can
>
> > have a single interface declare that it is a proxy for multiple
> > entities. If not, other ideas for making this work are welcome.
>
> You're right: an interface can only map to a single domain class. Moreover,
> you cannot use an interface in a @ProxyFor, as the
> RequestFactoryInterfaceValidator used by the RequestFactoryServlet will
> ultimately flag it as an error (so you unfortunately cannot use the
> interface implemented by both your domain objects).
>
> RequestFactory does not (yet<
http://code.google.com/p/google-web-toolkit/issues/detail?id=5367>)