IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

Mapping Flex Java


Sujet :

Flex

  1. #1
    Membre averti Avatar de supernova
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 447
    Points : 415
    Points
    415
    Par défaut Mapping Flex Java
    bonjour le forum..

    Voici ma demande :

    j'utilise Flex 3.5 côté client, Java 1.5 côté serveur et Cairmgorn / BlazeDS pour la communication.

    L'objectif est de transmettre de Flex vers Java un ArrayCollection contenant des objets d'une classe nommée ElementH.

    Un peu de code simplifié pour expliquer..

    Classe AS ElementH :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    package fr.xxx.xxxx 
    {
    	import com.adobe.cairngorm.vo.IValueObject;
     
    	import mx.collections.ArrayCollection;
     
     
    	[RemoteClass(alias="fr.zzzzzz.ElementH")]
    	[Bindable]
    	public class ElementH implements IValueObject {
     
    		public var cle:String;
    		public var nom:String;
    		public var libelle:String;
     
    		public function ElementH()
    		{
    		}
     
    	}
    }


    extrait de la fonction AS qui construit l'ArrayCollection à transmettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var oH : ElementH = new ElementH();
       oH.cle = item.@cle;
       oH.nom = item.@nom;
       oH.libelle = item.@libelle;
       collectionH.addItem(oH);

    Côté Java : la fonction qui récupère l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public String getAffichageHistoPrecedant  (ArrayCollection collectionH) {
     
    	for (int u=0; u < collectionH.size(); u++) {
    		ElementH oH =  (ElementH) collectionH.get(u);
    		System.out.println("valeur : " + oH.getLibelle());
    	}
    }

    et pour finir la classe ArrayCollection (java) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    import java.io.Externalizable; 
    import java.io.IOException; 
    import java.io.ObjectInput; 
    import java.io.ObjectOutput; 
    import java.util.ArrayList; 
    import java.util.Collection; 
     
    import flex.messaging.io.PropertyProxy;
    import flex.messaging.io.PropertyProxyRegistry;
    import flex.messaging.io.SerializationDescriptor;
     
    /** 
     * Used to map to client mx.collections.ArrayCollection to java.util.Lists in Java. 
     */ 
    public class ArrayCollection extends ArrayList implements Externalizable 
    { 
        private static final long serialVersionUID = 8037277879661457358L; 
     
        private SerializationDescriptor descriptor = null; 
     
        public ArrayCollection() 
        { 
            super(); 
        } 
     
        public ArrayCollection(Collection c) 
        { 
            super(c); 
        } 
     
        public ArrayCollection(int initialCapacity) 
        { 
            super(initialCapacity); 
        } 
     
        public Object[] getSource() 
        { 
            return toArray(); 
        } 
     
        public void setDescriptor(SerializationDescriptor desc) 
        { 
            this.descriptor = desc; 
        } 
     
        public void setSource(Object[] s) 
        { 
            if (s != null) 
            { 
                if (size() > 0) 
                    clear(); 
     
                for (int i = 0; i < s.length; i++) 
                { 
                    add(s[i]); 
                } 
            } 
            else 
            { 
                clear(); 
            } 
        } 
     
        public void setSource(Collection s) 
        { 
            addAll(s); 
        } 
     
        public void readExternal(ObjectInput input) throws IOException, ClassNotFoundException 
        { 
            Object s = input.readObject(); 
            if (s instanceof Collection) 
                s = ((Collection)s).toArray(); 
            Object[] source = (Object[])s; 
            setSource(source); 
        } 
     
        public void writeExternal(ObjectOutput output) throws IOException 
        { 
            if (descriptor == null) 
                output.writeObject(getSource()); 
            else 
            { 
                Object[] source = getSource(); 
                if (source == null) 
                    output.writeObject(null); 
                else 
                { 
                    for (int i = 0; i < source.length; i++) 
                    { 
                        Object item = source[i]; 
                        if (item == null)  
                            source[i] = null; 
                        else 
                        { 
                            PropertyProxy proxy = PropertyProxyRegistry.getProxy(item); 
                            proxy = (PropertyProxy)proxy.clone(); 
                            proxy.setDescriptor(descriptor); 
                            proxy.setDefaultInstance(item); 
                            source[i] = proxy; 
                        } 
                    } 
                    output.writeObject(source); 
                } 
            } 
        } 
    }

    Résultat des courses l'arrayCollection récupéré côté Java contient bien des objets de classe ElementH.. mais ils ne contiennent pas de valeurs..
    Il est difficile d’attraper un chat noir dans une pièce sombre. Surtout lorsqu'il n’y est pas.

  2. #2
    Membre régulier Avatar de ouaqa
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 95
    Points : 100
    Points
    100
    Par défaut
    A première vue, ton code me semble juste.

    Une piste serais de vérifier avec un outils comme Charles le contenu de tes paquets AMF ou RTMP échangés. Ainsi, tu saura si le problème viens de flex ou java.

    Je le fais systématiquement quand je teste des échanges.

  3. #3
    Membre averti Avatar de supernova
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 447
    Points : 415
    Points
    415
    Par défaut
    Merci pour ta réponse..

    Je ne connais pas cet outil.. un lien pour le charger?
    Il est difficile d’attraper un chat noir dans une pièce sombre. Surtout lorsqu'il n’y est pas.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 156
    Points
    156
    Par défaut
    Bonjour,
    Je vois pas pourquoi tu a mappé l'objet ArrayCollection coté Java.
    Ce mapping se fait tout seul. Tu n'as besoin de mappé que tes objets métiers.
    Si tu envoies une ArrayCollection flex via Blazeds tu reçois directement une List coté java.
    Je ne sais pas si cela règlera ton problème mais tu peux toujours essayer.

    Autre chose, es-tu bien certain que tes beans actionscript sont bien valorisés ? (en gros que tes item.@cle retourne bien une valeur ?).

    Charles.

  5. #5
    Membre régulier Avatar de ouaqa
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 95
    Points : 100
    Points
    100
    Par défaut
    Charles, c'est un proxy pour debugger.
    Il capte les trames de ton navigateur entre le client et le serveur et gère les trames amf & rtmp. Le contenu des objets est affiché de façon très claire.
    http://www.charlesproxy.com/.

    Comme dis clemoigno, ton mapping d'ArrayCollection est sûrement inutile, sauf cas contraire.

  6. #6
    Membre averti Avatar de supernova
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 447
    Points : 415
    Points
    415
    Par défaut
    oui effectivement il faut récupérer côté java en type List et non en ArrayList..


    Merci clemoigno..


    Charles et un outil formidable.. merci Ouaqa..
    Il est difficile d’attraper un chat noir dans une pièce sombre. Surtout lorsqu'il n’y est pas.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 156
    Points
    156
    Par défaut
    De rien.
    Concernant Charles, il a juste un nom à la con qui attire mon regard dans le texte.

    Charles.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Flex/java] appel d'objet java
    Par mcrbe dans le forum Flex
    Réponses: 3
    Dernier message: 26/05/2010, 13h21
  2. [Conception] Avoir le Fifo avec une Map en Java.
    Par petozak dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 19/02/2007, 15h54
  3. [Castor] Mapping Objet Java
    Par mezoo dans le forum Persistance des données
    Réponses: 4
    Dernier message: 01/09/2006, 16h24
  4. [Java] Mapping XML <> Java
    Par webspeak dans le forum Persistance des données
    Réponses: 7
    Dernier message: 22/06/2006, 00h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo