I've been having some trouble with using arrays of primitive type
where an array of type Serializable is expected.

I have an object similar to:

class MySerializableObject<T extends Serializable> implements
Serializable
{
         private Serializable serializableField;

         void MySerializableObject(T value)
         {
               serializableField= value;
         }

         T getField(T value)
         {
               return serializableField;
         }
}

All of these cases can be serialized and deserialized successfully:
- new MySerializableObject<Serializable>(new Integer(0));
- new MySerializableObject<Serializable>(1);
- new MySerializableObject<Serializable>(true);
- new MySerializableObject<Serializable>("Test");

These cases case produces an exception when deserialized (Note that
these will *not* cause a class cast exception as seen in
http://code.google.com/p/google-web-toolkit/issues/detail?id=1822,
although an array of non-primitive type will cause it):
- new MySerializableObject<(Serializable)>((Serializable)new int[0]);
- new MySerializableObject<int[]>(new int[0]);

The exception's message is:
"com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException:
Type '[I' was not included in the set of types which can be
deserialized by this SerializationPolicy or its Class object could not
be loaded. For security purposes, this type will not be deserialized."

The exception goes way if I add this type to my project, even if I
don't actually create an instance of it anywhere:

class MySerializableIntArrayObject extends MySerializableObject<Int[]>
{
}

I'm aware that the GWT compiler has to identify sub-types that can be
used with parameterized serializable objects during compilation in
order to build its serialization mechanism for those objects. I'm
guessing this problem means that arrays of primitive types are not
taken into account when it enumerates subtypes of Serializable,
despite the fact that they are effectively subtypes of Serializable.

If I'm correct, what is the proper way to fix this? I suppose it's
possible to create fixed-type objects like
"MySerializableIntArrayObject" for all primitives, but I'd like to
avoid that (especially since I would end up having to do that for any
other typed serializable objects I add in the future). If I understand
the typeArgs annotation, using it would actually restrict the set of
values I can use with this object, not add to the set (I can enumerate
the primitive array types easily enough, but not all the other types
that may be passed).

If I'm not correct about the cause of the problem, I'd appreciate it
if someone could explain it and suggest an appropriate remedy.

Thanks,
-jsegal



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to Google-Web-Toolkit@googlegroups.com
To unsubscribe from this group, send email to 
google-web-toolkit+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to