Представьте, что вы хотите отправить любой класс Serializable на клиентскую часть вашего приложения GWT с использованием DTO:
public class MyDTO implements Serializable {
public Serializable value;
}
Кроме того, все, что используется в качестве значения, будет проверено, если оно сериализуемо, до его установки. GWT выдает пару предупреждений в консоли разработчика:
DEBUG: com.example.app.shared.MyDTO.
DEBUG: Analyzing the fields of type 'com.example.app.shared.MyDTO' that qualify for serialization.
DEBUG: private java.io.Serializable value.
DEBUG: java.io.Serializable.
DEBUG: Verifying instantiability.
DEBUG: java.util.ArrayList<? extends java.lang.Object>.
WARN: Checking all subtypes of Object which qualify for serialization.
DEBUG: com.google.gwt.validation.client.impl.PathImpl.
DEBUG: Verifying instantiability.
DEBUG: com.google.gwt.validation.client.impl.PathImpl.
DEBUG: Analyzing the fields of type 'com.google.gwt.validation.client.impl.PathImpl' that qualify for serialization.
WARN: Field 'private final java.util.List<javax.validation.Path.Node> nodes' will not be serialized because it is final.
Но! К сожалению, это приводит к тому, что GWT выдает исключение RPC SerializationException при отправке на клиентскую сторону:
com.google.gwt.user.client.rpc.SerializationException: Type 'com.example.app.shared.MyDTO' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = com.example.app.shared.MyDTO@577f52ed
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:619)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
at com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase.serialize(Collection_CustomFieldSerializerBase.java:44)
...
Bottomline:
Как вы препятствуете GWT подбрасывать сериализуемые подтипы?
EDIT:
В итоге я создал подкласс для каждого нужного мне класса.