It's not the same problem. With an RPC method of HashMap<String, Property<?>> getFoo(), where Property is abstract, GWT will look for all subclasses of Property on the classpath and build the RPC code for them. If you have one Property subclass per data type, then since the Property subclasses explicitly reference the underlying data type (like Long), the RPC code for those data types will be included as well.
You might also like to check out this issue related to RPC of cyclic object graphs when using HashMap/HashSet if you use this technique: http://code.google.com/p/google-web-toolkit/issues/detail?id=3577 Paul riswpl wrote: > Thanks again guys for the response. > > I was thinking what Paul's solution to take and I like 1st one with: > public abstract class Property<T> implements Serializable { > T value; > } > > However, I don't see what way GWT serializer may know in this service > method: > HashMap<String, Property<?>> getFoo(); > > what type of Property can be received - is it not the same problem as > in HashMap<String, Object> getFooWithObject(); > > ?? > > Krisw > > On 12 Mar, 11:04, Paul Robinson <[email protected]> wrote: > >> You can create a class that wraps everything you might want to transport >> and use that class in the interface instead. >> >> One way is like this: >> >> public abstract class Property<T> implements Serializable { >> T value; >> } >> >> public class LongProperty extends Property<Long> { >> } >> >> public class DoubleProperty extends Property<Double> { >> } >> >> public interface Service { >> HashMap<String, Property<?>> getFoo(); >> } >> >> another way: >> >> public enum PropertyType { INTEGER, LONG, DOUBLE, ... } >> >> public class Property implements Serializable { >> PropertyType type; >> >> Long longValue; >> Date dateValue; >> Integer intValue; >> } >> >> public interface Service { >> HashMap<String, Property> getFoo(); >> } >> >> However you do it, do be aware that you may well increase the required >> size of data sent over the network using techniques like this - and the >> time taken to serialize/deserialize it. >> >> @gwt.typeArgs was needed before GWT 1.5 when GWT first supported >> generics. You don't need it now (I'm not sure if you still can use it) >> and it wouldn't help here anyway because generics let you specify the >> same information. >> >> Paul >> >> kriswpl wrote: >> >>> Thank you Paul for your reply. >>> >>> FYI - I use Map not to use DTO - I put all properties (Long, Date) to >>> this Map. >>> >>> So I have another question --- is it any way to define what kind of >>> objects (Date, Long, Double, etc.) can show in Map. I found >>> information @gwt.typeArgs <something>. >>> I mean - is it possible to add to the remote interface information >>> about all serializaed types which can be in Map? - to solve this >>> problem >>> >>> Thanks, >>> Krisw >>> >>> On 11 Mar, 17:55, Paul Robinson <[email protected]> wrote: >>> >>>> kriswpl wrote: >>>> >>>>> Interface method is: >>>>> public Map<String, Object> test(); >>>>> >>>>> and in implementation I put into returned map, object java.util.Long >>>>> (which is serializable:) ): >>>>> map.put("long", new Long(1)); >>>>> >>>>> Where do I do it wrong? >>>>> >>>> GWT does a great job of putting as little into the javascript as >>>> possible. In the above case, there's nothing to tell it that you're >>>> going to send a Long, so it doesn't generate theRPCcode into the >>>> javascript that knows how to deserialize a Long. Add another method that >>>> references Long, and then your first method might work because the Long >>>> code is now going to be included. >>>> >>>> On a related note, using Map in the API is not a good idea because it >>>> means GWT must look through all your code for every implementation of >>>> Map to see whether it's used. At the very least, it will make compiles >>>> take longer. At worst, it will generate longer code. It goes against the >>>> grain for java programming, but you need to make GWTRPCAPIs as >>>> specific as possible. That means declaring that you're returning a >>>> HashMap, not a Map, in the interface. >>>> >>>> This also means you can't declare Object as a type in anRPCinterface. >>>> >>>> Paul >>>> >> > > -- 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.
