2009-06-11 10 views
7

Sto usando BlazeDS per il controllo remoto di alcuni oggetti Java che sto utilizzando in un'applicazione Flex. Sto ricevendo un errore di coercizione di tipo con una delle mie classi che non riesco a capire per la vita di me. Ho altre classi che funzionano bene usando gli stessi tipi di dati, e ho esaminato la mia mappatura una dozzina di volte. Sto seguendo tutte le convenzioni necessarie per getter e setter per quanto ne so ...Come posso eseguire il debug della serializzazione AMF (BlazeDS) di oggetti Java su Actionscript?

In ogni caso, la mia domanda è: come posso eseguire il debug di questo problema? L'esecuzione dell'applicazione Flex in modalità di debug genera alcuni errori generici sulla console che non aiutano molto (TypeError: Error # 1034: Type Coercion failed: impossibile convertire Object @ 5d1d809 in valueObjects.SomeClass.).

Sono nuovo per questa cosa AMF/Flex + Java, quindi qualsiasi suggerimento sarebbe molto apprezzato.

risposta

13

sono questi due degli strumenti che uso quando si lavora con BlazeDS, AMF, ecc .:

  • Utilizzare uno strumento proxy HTTP che mostra le chiamate tra il client e il server, come Charles

Charles is an HTTP proxy/HTTP monitor/Reverse Proxy that enables a developer to view all of the HTTP and SSL/HTTPS traffic between their machine and the Internet. This includes requests, responses and the HTTP headers (which contain the cookies and caching information).

  • Attivare la registrazione per BlazeDS. Entro WEB-INF/conf/services-conf.xml, abbassa il livello di debug a 'debug' come nel seguente snippit. L'uscita, che è abbastanza dettagliato, apparirà nel {tomcat-home}/logs/localhost.yyyy-mm-dd.log

    < target class="flex.messaging.log.ConsoleTarget" level="debug">

+0

Grazie! Bene, sembra che tutto venga serializzato correttamente sul lato server. Quando arriva al cliente, qualcosa sta vomitando. Come posso vedere cosa sta succedendo nel client mentre si sta deserializzando? – Boden

+0

Vorrei verificare se si "associa" correttamente, con Java 1: 1 veramente autentico: oggetti AS3, tipi di dati compatibili e uso corretto di "[Bindable]" e "[RemoteClass (alias =" com.mycorp.myproj. vo.User ")]" Funzionalità di associazione AS3. Ci sono molti esempi là fuori nei googlenets. –

+0

I miei tipi sono ok, i miei alias di classe remoti sono corretti e ho sperimentato con Bindable. Ho usato Charles secondo il tuo suggerimento e tutto sta tornando dal server che sembra fantastico ... nomi di classe, tipi, dati, tutto. Se potessi vedere la ragione specifica per cui la coercizione sta fallendo, potrei riuscire a capirlo ... ma in questo momento mi sento cieco. – Boden

0

utilizzare Flex Builder e lo hanno impostato per client e server il debug lato. Inizialmente, è stato difficile installarlo, ma Google è in grado di seguire tutorial passo-passo. Trovo abbastanza utile per il debug di RPC. Ultimo controllo, Flex Builder ha una prova gratuita ed è gratuito per studenti e disoccupati.

2

La classe java che viene deserializzata nel lato client deve avere un riferimento a un oggetto della classe AS3 corrispondente nell'applicazione (mxml o as3). Altrimenti, la classe as3 non verrà caricata nel file swf e risulterà nella deserializzazione della classe java in un oggetto as3 generico.

aggiornato Questo accadrà nonostante la mappatura, i getter ei setter. Basta dichiarare un oggetto della corrispondente classe AS3 nella sezione script del tuo mxml.

+0

Nel mio 'main.mxml', aggiungo' private const myVO: MyVO = null; 'e ho lavorato, grazie. –

4

Il modo più semplice per controllare la comunicazione tra di servizio-clienti messaggi di AMF è di usare Firefox, installare FireBug estensione e aggiungere il AMF Explorer. Puoi vedere le richieste e le risposte strutturate.

0

Vale anche la pena notare che la strumentazione in Java può anche causare una perdita di informazioni e/o interferire con il processo di serializzazione e lo streaming.

ho sperimentato questo TypeError: Error #1034: Type Coercion failed su un progetto (Flex < -> BlazeDS + primavera) in cui è stato attuato il nostro strato di accesso ai dati con iBatis ed aveva lazy-carico acceso - abbiamo spenta come tale misura rappresenta il minore perdita di efficienza (teoricamente, almeno), rispetto ad altri workaround che avevamo in atto.