Olá pessoal, espero que vocês possam me ajudar com esse problemão que eu encontrei.
Estou tendo um problema com serialização / desserialização de data que pode ser simulado e compreendido com os passos a seguir:
Crio e instancio um novo objeto java.util.Date
Date data = new Date();
Que irá instanciar a data atual. Por exemplo 06/05/2009 - 09:00 GMT -03:00
Quando eu serializo este objeto, apenas o fastTime do objeto Date é serializado, e este não contém a informação do timezone.
Quando eu desserializo, ele verifica que não existe uma informacão válida no “cdate” do objeto date e cria um novo, com o timezone default. Então, se eu desserializo este objeto date em uma máquina onde o timezone é diferente do original, por exemplo GMT -02:00 o valor da data é alterado (06/05/2009 - 10:00 GMT -02:00)
Como o timezone original não é serializado juntamente com a data eu não tenho como saber a constituição original dessa data.
Este problema ocorre tanto na serialização com ObjectOutputStream do proprio java quanto com a serialização de RPC do GWT.
No primeiro caso, eu acredito que criando uma classe que extenda date, e através de reflection recriando a maioria dos métodos originais do date seja possivel uma solução, mas o GWT não permite reflection.
Acredito que uma outra possivel solução seria criar uma classe que estenda Date, e armazene em inteiros os valores de dia, mes, ano , hora, minuto, segundo e timezone e quando serializado/desserializado reconstrua um novo objeto date. Mas existem dois poréns. O primeiro é que fica com cara de “gambi” e o segundo é que no GWT, quando se está no “lado client” você não consegue criar um objeto date especificando o timezone qe você deseja como pode ser feito no lado server com TimeZone.setDefault(TimeZone.get(“GMT -03:00”)) e instanciando um new date logo abaixo disso por exemplo.
Sendo assim eu preciso de outra solução.
Alguém já passou por isso e/ou tem alguma sugestão ?
Agradecido desde já.