Pergunta

Estou recebendo a seguinte exceção:

com.google.gwt.user.client.rpc.SerializationException: o tipo 'java.lang.long' não foi incluído no conjunto de tipos que podem ser serializados por essa serialização policie ou seu objeto de classe não pode ser carregado. Para fins de segurança, esse tipo não será serializado

Usando o GWT 2.1 e o servidor Jetty embutido. De acordo com os documentos, esse tipo é definitivamente serializável ... como posso incluí -lo na serialização Policy?

Foi útil?

Solução 2

As necessárias incluem um método supérfluo no serviço RPC que "os whitelists" vários objetos. Isso surge devido ao uso de genéricos, o GWT não consegue determinar necessariamente qual objeto eu posso estar serializando para incluir em alguns genéricos.

Incluí todos os tipos que podem precisar ser (não) serializados como membros de um objeto (SerializableWhitelist). Eu adicionei um método ao objeto RPC Servlet como:

public SerializableWhitelist junk(SerializableWhitelist l) { return null; }

Vale a pena notar que você precisar Para incluir os tipos de dados da lista de permissões como um argumento e como o tipo de retorno, pois o GWT aparentemente mantém duas políticas de serialização separadas.

Outras dicas

Aqui está o link que deve resolver o problema:http://developerlife.com/tutorials/?p=131

Uma classe definida pelo usuário é serializável se:

  1. A classe é atribuível a iserializável ou java.io.serializável, porque implementa uma dessas interfaces ou porque é derivada de uma superclasse que implementa uma dessas interfaces.
  2. Todos os campos de instâncias não transitórios e não transitórios da classe são serializáveis
  3. A classe possui um construtor de inadimplência público (argumento zero)

Tente excluir os arquivos *.gwt.rpc em seu diretório de guerra/aplicativo, limpe e reconstruir.

Uma coisa a observar: você deve evitar muito ou longo, se possível, porque eles são
emulado no GWT (porque não há JavaScript nativo por muito tempo) e muito
lento. Use int, em vez disso, sempre que puder.

Para sua informação, criei isso como um bug gwt: http://code.google.com/p/google-web-toolkit/issues/detail?id=5811

Vamos ver o que eles dizem.

FWIW, eu estava tendo esse problema, mas meu tipo de 'objeto' era escondido atrás de classes generificadas. A mensagem de erro em si estava errada.

Portanto, se um dos seus métodos RPC envolver uma aula:

class Xxx<T> implements IsSerializable {...

Precisa mudar para:

class Xxx<T extends IsSerializable> implements IsSerializable {...

O problema também pode ser porque o código da sua máquina local, na qual você está executando o modo hospedado, não é o mesmo que o do servidor externo ao qual você está se conectando via RPC. Então, no meu caso, eu estava perdendo um puxão no meu git na minha máquina local para corresponder ao que foi implantado no servidor externo. As alterações foram mínimas, apenas uma nova propriedade em uma das classes incluídas no GWT.RPC, mas isso já era suficiente para que os nomes de arquivos GWT.RPC MD5 fossem diferentes e, portanto, o erro acima mencionado ocorreu.

Inspirado por http://groups.google.com/group/google-web-toolkit/browse_thread/thread/7dd5123d359ddfa8

Usando Eclipse e Maven e GWT 2.1.1

Compilar e implantar Guerra do GWT.

Tente usar o OOPHM lançado a partir do Eclipse.

Isso falharia para mim.

Isso gerará nos logs do servidor:

Erro: o arquivo de política de serialização 'Blah.gwt.rpc' não foi encontrado; Você esqueceu de incluí -lo nesta implantação?

AVISO: Falha ao obter a serialização '94dec228b2828d3a5897fee3d6845a40' para módulo 'http: // blá: 8080/blahui/blahui/'; Um legado, 1.3.3 Política de serialização compatível, será usada. Como resultado, você pode experimentar o SerializationExceptions.

E depois

Exceção ao despachar RPC Call com.google.gwt.user.client.rpc.SerializationException: Type '[lPathToclass;' Não foi atribuível ao 'com.google.gwt.user.client.rpc.isserializável' e não possuía um serializador de campo personalizado. google.gwt.user.server.rpc.impl.serverversserializationstreamwriter.serialize (serverSerializationstreamwriter.java:614)

Agora que os arquivos extras GWT.RPC foram gerados (pelo plugin Eclipse/Maven quem sabe?)

O recompilo (mesmo uma compilação limpa funcionará porque os arquivos gwt.rpc não estão na pasta de destino, meus arquivos oophm gwt.rpc estão na mesma pasta que a entrada html) e reimplement. Este novo arquivo de guerra conterá os arquivos gwt.rpc gerados.

Relanomizar Oophm do Eclipse.

Funciona para mim.

Outro FWIW: Acredito que esclareci um problema semelhante em uma classe enum, alterando o modificador de acesso do único construtor de argumentos do padrão (sem modificador) para 'privado'. De qualquer forma, fazer isso não quebrou porque está funcionando dessa maneira agora.

Enfrentei esse erro e fiquei preso por 1 dia completamente. Então eu vim para a solução rápida seguinte:

Verifique se suas classes de DTOs ou entidades seguem as regras de interface serializável. É a única coisa que você precisa fazer porque o restante dos problemas será com sua criação de construção. Portanto, se você estiver usando o MAVEN, certifique -se de construir e limpar todo o cache do navegador. Eu resolvi meus problemas com isso. Eu espero que isso ajude. Obrigado!

Certifique -se de que a classe esteja na pasta compartilhada. Isso é o que eu estava perdendo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top