2011-12-10 10 views
7

Ho riscontrato uno strano errore mentre lavoravo al mio progetto Play Framework. Mentre il mio progetto in corso, io a volte ricevo una ClassCastException, ma l'errore è questo:ClassCastException inspiegabile generata in Play Framework

ClassCastException occured : models.Person cannot be cast to models.Person

Ciò si verifica di solito quando sto chiamando un metodo find come ad esempio:

Person p = Person.find("name=?","Joe").first();

Se riavvio il progetto, il problema scompare, ma solo temporaneamente. Rende il test del mio progetto un grande dolore. Come posso risolvere questo?

+0

Sto affrontando lo stesso problema. Credo che questo sia qualcosa correlato alla funzionalità di "ricarica" ​​del webserver di sviluppo. Sembra rotto o la mia macchina è mal configurata. Dal momento che Play è troppo imato, scommetto nella prima opzione. –

+0

Ho lo stesso problema in gioco 2.6.3. – nemoo

+0

Come @HotLicks ha menzionato questo può essere un problema di namespace. Non avevo notato che in realtà avevo due file 'main.scala.html' (uno in un sottoprogetto) che mi stava lanciando questo * errore di runtime * - quindi cambiare quel nome di file ha reso tutto andare via –

risposta

2

ho sperimentato questo errore in modalità Dev in gioco, in due scenari (per quanto posso ricordare):.

  • Modificare un entità e prova a recuperare i valori dalla cache che sono oggetti di quella classe di entità.
  • Un errore di compilazione e ricaricare il codice della pagina/applicazione

In entrambi i casi fissaggio errori di compilazione o pulizia cache risolto il problema.

Non dicendo che quelle sono le uniche possibilità, può darsi che tu stia avendo qualche altro problema.

+0

L'ho visto alcune volte anche in modalità dev. Di solito accade dopo un cambio di codice, anche se eseguito su file non correlati all'entità (la classe Person nel tuo caso). – chris

3

Questo molto probabilmente si verifica perché hai in qualche modo caricato la classe Person in due diversi programmi di caricamento classi. Quando una classe viene caricata due volte in due caricatori di classi diverse, si tratta in effetti di due classi distinte.

(Purtroppo, non posso dirvi dove/come voi avranno fatto questo.)

(ed è un po 'curioso di avere il problema pop-up sulla dichiarazione di elencare. Sei sicuro che sia ? dove è che si verificano Forse si dovrebbe mostrare il traceback eccezione)

+0

Sono carina sicuro che questo è dove accade-- quando si esegue il progetto sul mio spazio di lavoro locale, apparirà la pagina di errore di riproduzione e questo evidenzia in rosso questa affermazione. Questo errore si verifica in genere quando eseguo una modifica sul mio codice, salvo il file e quindi torno al mio progetto. – torourke

+0

@torourke: se modifichi/compili dinamicamente durante l'esecuzione, ciò spiegherebbe. –

1

Nel mio caso, questo è correlato all'applicazione di evoluzioni dall'interfaccia web. Qualcuno ha sollevato a bug for this, ma finora non ha ricevuto alcuna attenzione dal team di sviluppo. C'è una patch allegata al ticket, ma non l'ho ancora provata, quindi YMMV.