2011-11-14 3 views
0

J'ai quelques classes Java qui implémentent la sérialisation et les objets AS correspondants (auto-générés par GAS) qui implémente IExternalizable.Sérialisation BlazeDs d'objets Java

Il n'y a aucun problème à recevoir des objets à partir du serveur, mais lorsque je tente d'envoyer des objets au serveur - il jette une exception:

[BlazeDS]Class 'xxx' must implement java.io.Externalizable to receive client 
IExternalizable instances. flex.messaging.io.SerializationException: Class 'xxx' must 
implement java.io.Externalizable to receive client IExternalizable instances. 

Vraiment je dois mettre en œuvre Externalizable pour envoyer des objets au serveur Java ?!

+0

OK, le mettre comme une réponse que, et je vais retourner au travail ... – Assaf

Répondre

1

En fait, je ne dois pas implémenter Externalizable et même pas sérialisable. Au lieu de cela, je dois juste spécifier, du côté des flex, que c'est une classe distante avec un alias qui pointe vers le chemin complet de la classe java. Je devrais également m'assurer que les noms de propriétés (ou getters et setters) sont égaux aux noms de propriétés de l'objet java. Enfin, je devrais m'assurer que les types d'objet/propriétés sont bien mis en correspondance ou bien convertis (objets java numériques en nombre dans Flex etc.).

+0

qu'en est-il du type de données complexe comme si vous déclariez une variable protégée d'une autre classe? –

0

Vous devez implémenter Externalizable.

Voir http://help.adobe.com/en_US/LiveCycleDataServicesES/3.1/Developing/WSc3ff6d0ea77859461172e0811f00f6eab8-7ffdUpdate.html

Utilisation de sérialisation personnalisée entre ActionScript et Java

Si les mécanismes standard pour les données sérialisation et désérialisation entre ActionScript sur le client et Java sur le serveur ne répond pas à vos besoins , vous pouvez écrire votre propre schéma de sérialisation. Vous implémentez l'interface flash.utils.IExternalizable basée sur ActionScript sur le client et l'interface java.io.Externalizable basée sur Java correspondante sur le serveur.

+0

Il ne dit pas que nous devons mettre en œuvre, il dit seulement que vous pouvez le faire si vous n'êtes pas satisfait de la sérialisation ... – Assaf

+1

Vous devrez au moins mettre en œuvre Serializable pour le sérialiseur BlazeDS pour récupérer votre classe pour la sérialisation. Implémenter Externalizable vous permettra d'écrire des méthodes de lecture et d'écriture personnalisées pour la sérialisation personnalisée. –

+0

La documentation indique que la conversion de données par défaut de _flash.utils.IExternalizable_ est _java.io.Externalizable_, ce qui signifie que la contrepartie Java de la classe AS doit implémenter Externalizable. –