2010-05-24 15 views
0

J'ai un problème avec la coercition de type dans une configuration Java/Hibernate/BlazeDS/Flex.ActionScript: problème de coercition de type avec BlazeDS/AMF et interfaces de classe

Tout d'abord, mes cours ressembler à ceci:


--- --- JAVA

Interface I
(Résumé) de classe A implémente I
classe B extends A

--- --- ActionScript

Interface I
classe A implémente I
classe B extends A


Je suis RemoteClass-Meta-Tags dans tous ActionScript Classes/Interfaces I, A et B. Structure Package et noms de classe/d'interface sont exactement les mêmes .

Voici maintenant le problème: Mon Java Service récupère avec succès les objets de la classe B depuis ma base de données via Hibernate. J'ai une autre classe C qui possède une propriété membre de type interface I, donc il devrait être possible d'assigner un objet de type B. Mais pour une raison inconnue j'obtiens le message d'erreur suivant:

TypeError: Erreur # 1034: ne peut pas convertir Object @ 28b44a89 en package.name.I

J'ai vérifié le type d'objet Java dans le service et il est de type B et semble être très bien. Pourquoi l'objet de type B ne peut-il pas être affecté à une variable membre de type I? Ça me rend dingue.

Merci d'avance.

Répondre

0

Vérifiez le type des objets renvoyés par l'appel de service (inspectez le résultat avec un débogueur dans Flash Builder). Peut-être qu'ils ne sont pas correctement convertis en type B et qu'un ObjectProxy est créé. Si ce n'est pas le cas, veuillez poster votre code.

0

J'ai eu le même problème étrange.

Ma situation comme ceci: Je développer une application web avec Flex 4 + Spring

En Java, j'ai un message de classe. En Flex, j'ai classe Message.

Lorsque vous obtenez un objet java distant du serveur et que vous transtypez le type de message dans Flex, cette erreur se produit. La chose étrange est que, pour la première fois, il est OK de lancer le type de message dans Flex à partir de l'objet java distant et il n'y a pas d'erreur; mais dans la deuxième fois, il échouera et l'erreur sera montrée.

Pour résoudre ce problème, j'ai une solution: utiliser la méthode registerClassAlias ​​() pour s'inscrire à la classe java distante.

Mais je me demande s'il existe d'autres solutions à ce problème. Est-ce un bug de Flex?