Suite au post de Matsiya sur l’utilisation du SchemaTypeRegistry afin de permettre la “conversion” des objets SOAP issus d’un Web service en Classes AS3, je me suis lancé à quelques expérimentations. L’utilisation est en effet très simple et permet un mappage des Objets SOAP de type ComplexType vers les classes objets AS3 de son choix, juste en indiquant son namespace et le nom de l’objet tel qu’il est décrit dans le fichier WSDL du Web service.
Prenons un exemple : Imaginons qu’un Web service nous renvoie une liste d’utilisateur et qu’on veuille récupérer cette liste dans une classe nommée “UserArray” qui est en fait un tableau d’objets de type “User”. Il nous suffira de déclarer l’association avant l’appel du Web service en faisant :
SchemaTypeRegistry.getInstance().registerClass(new QName(”http://www.flex-info.fr/”, “userArray”), UserArray);
SchemaTypeRegistry.getInstance().registerClass(new QName(”http://www.flex-info.fr/”, “user”), User);
Le resultat retourné par le ResultEvent contient alors une classe UserArray contenant des classes User.
L’image ci-dessous illustre le procédé :

Comme le souligne Matsiya, dommage qu’il n’y ait pas plus de communication sur cet aspect du mapping des données entre des Web service SOAP et Flex (Flex 3 uniquement !). En espérant que ce post y participe…
Mise à jour : Afin d’être plus complet, les classes objets en AS3 doivent être écrites avec au minimum leurs propriétés comme de simples objet et peuvent contenir des fonctions propres au objets. Exemple de la classe User :
package {
public class User
{
public var IDUSER:Number;
public var login:String;
public var mail:String;
public var name:String;
public var password:String;
}
}
La classe UserArray dans l’exemple est en fait une extension de la classe ArrayCollection, mais n’est pas nécessaire si un simple ArrayCollection est suffisant.
A quand un système de mapping et de synchronisation des classes Java, PHP ou autre vers des classes AS3 ?? Il ne manque plus que ça… non ?
Ajout : il semblerait que le mapping ne fonctionne pas bien avec des Web services de type “document/litteral” générés par Axis 1. Le passage en “RPC/encoded” résout le problème…