Java J2EE

Posted by : Andrius Juozapaitis
Serialization problem using CustomFieldSerializer(s) and specifying specific .java files in gwt module xml
Hey,



I've been trying to emulate parts of 3rd party library and stumbled

upon a problem. The library has certain classes with java.lang.Object

references that I wanted to get rid of, and I want the classes to

implement java.io.Serializable. The package structure is like that:



-java/dao/

   -EntityWithObjectReference.
java

   -EntityWithObjectReference_CustomFieldSerializer.java

   -ExtendedEntity.java



-resources/

   serialization.gwt.xml

   -substituted.dao/

       EntityWithObjectReference.java



Everything is built using maven, so files end up where they should

be.



Original base entity class I want to emulate:

package dao;

public class EntityWithObjectReference {

   public Object objReference;

   private String text;

   public String getText() {

       return text;

   }

   public void setText(String text) {

       this.text = text;

   }

}



Emulated base entity class (implements serializable, Object ref

removed):



package dao;

import java.io.Serializable;

public class EntityWithObjectReference implements Serializable {

   private String text;

   public String getText() {

       return text;

   }

   public void setText(String text) {

       this.text = text;

   }

}



The class I actually use in both client and server side:



package dao;

import java.io.Serializable;

public class ExtendedEntity extends EntityWithObjectReference

implements Serializable {

   private String name;



   public String getName() {

       return name;

   }



   public void setName(String name) {

       this.name = name;

   }

}



There's also a EntityWithObjectReference_CustomFieldSerializer.java,

which simply ignores the Object reference for now:



package dao;

import com.google.gwt.user.client.rpc.*;

public class EntityWithObjectReference_CustomFieldSerializer {

   public static void serialize(SerializationStreamWriter writer,

EntityWithObjectReference entity) throws SerializationException {

       writer.writeString(entity.getText());

   }

   public static void deserialize(SerializationStreamReader reader,

EntityWithObjectReference entity) throws SerializationException {

       entity.setText( reader.readString());

   }

}



Now, if I just leave the source element empty (it should include all

the java files in the package), everything works fine, serialization

works as expected, and custom serializer is being called.



serialization.gwt.xml:

<module>

   <inherits name="com.google.gwt.core.Core"/>

   <source path="dao">

       <!--include name="ExtendedEntity.java"/-->

       <!--include name="EntityWithObjectReference.java"/-->

   </source>

   <super-source path="substituted"/>

</module>



***When I try to uncomment the two lines*** that explicitly include

the specific java files (I need that because the original library I

want to emulate has a number of additional files in the source

packages that gwt doesn't ever need to know about), there's a problem

- GWT keeps complaining that 'This application is out of date, please

click the refresh button on your browser'. The server response is the

same in both cases:



//OK[3,2,1,["dao.ExtendedEntity/1266011518","xxx","evil entity"],0,5]



But GWT generated javascript expects a different checksum in this

case, and an exception is raised when deserializing the data. Any

ideas why this is happening? Bug, feature, a bit of both? I'd be more

than happy to supply the code to verify this behavior, if anyone can

help me sort this out.



regards,

Andrius J.
 
 
If you have the better reply, then send it to us. We will display your reply after the approval.
Name : 
Email Id :   
Reply :