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 <[email protected]> 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>) > support polymorphism, so your collection can only ever contain a single > "interface". > > Not sure there's a solution to your problem besides refactoring your domain > classes (but maybe if you share a bit more information, maybe there's a > solution) -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
