Yes, please file a bug for that.
If you can contribute the patch to gwt-code-reviews.appspot.com it'd be
even better (see
https://developers.google.com/web-toolkit/makinggwtbetter#contributingcode)
As far as the patch goes, your processing loses the "most-to-least-derived
type" ordering of the domainToClientType values that
Deobfuscator#getClientProxies mandates.
See
http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/web/bindery/requestfactory/apt/TypeComparator.java
for
the ordering, to be ported to Class<?>
(see
http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/place/rebind/MostToLeastDerivedPlaceTypeComparator.java
for an almost-equivalent)
On Wednesday, May 9, 2012 4:24:22 PM UTC+2, Alexandre Ardhuin wrote:
>
> Hi All,
>
> I have an application with 2 gwt modules. Each module uses its own
> RequestFactory and its own Proxy for the same domain object (ie. 2
> RequestFactory with 2 differents Proxy on the same domain class).
> The first RF call succeeds and following RF of the same type too but when
> the other RF is used an exception occurs :
> "The domain type Xxx cannot be sent to the client"
>
> After some tests, the problem occurs only for 2 RF. Having only one RF
> with 2 Proxy on the same domain object works well.
>
> The problem seems to be in
> com.google.web.bindery.requestfactory.vm.impl.Deobfuscator.Builder.merge(Deobfuscator).
>
> Doing the following modification resolves it.
>
> public Builder merge(Deobfuscator existing) {
> + Set<String> domains = new HashSet<String>();
> + domains.addAll(d.domainToClientType.keySet());
> + domains.addAll(existing.domainToClientType.keySet());
> + for (String domain : domains) {
> + Set<String> clientTypes = new HashSet<String>();
> + clientTypes.addAll(d.domainToClientType.get(domain));
> + clientTypes.addAll(existing.domainToClientType.get(domain));
> + d.domainToClientType.put(domain, Collections.unmodifiableList(new
> ArrayList<String>(clientTypes)));
> + }
> - d.domainToClientType.putAll(existing.domainToClientType);
> d.operationData.putAll(existing.operationData);
> // referencedTypes recomputed in build()
> d.typeTokens.putAll(existing.typeTokens);
> return this;
> }
>
> Can someone confirms this is a bug ? (I haven't found any issue on that)
>
> Alexandre
>
--
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/google-web-toolkit/-/64utrsjDpFgJ.
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.