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 d'objets ActionScript et Java sous BlazeDS


Sujet :

Flex

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Analyste informatique
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Par défaut Mapping d'objets ActionScript et Java sous BlazeDS
    Bonjour tout le monde,

    Je suis entrain de tester une communication entre Flex et Java sous BlazeDS. Pour cela j'ai défini en ActionScript et en Java une classe nommée Globale:

    Coté Client :

    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
    package traitement
    {
    	[Bindable]
    	[RemoteClass(alias="traitement.Globale")]
    	public class Globale
    	{
     
    		public var donnee_1:Number;
    		public var donnee_2:Number;
    		public var donnee_3:Number;
    		public var donnee_4:Number;
    		public var donnee_5:Number;
    		public var donnee_6:Number;
    		public var donnee_7:Number;
    		public var donnee_8:Number;
     
    		public function Globale(var_1:Number, var_2:Number, var_3:Number, var_4:Number, var_5:Number, var_6:Number, var_7:Number, var_8:Number)
    		{
    			donnee_1 = var_1;
    			donnee_2 = var_2;
    			donnee_3 = var_3;
    			donnee_4 = var_4;
    			donnee_5 = var_5;
    			donnee_6 = var_6;
    			donnee_7 = var_7;
    			donnee_8 = var_8;
    		}
     
    	}
    }
    Coté Traitement :

    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
    package traitement;
     
    public class Globale {
     
    	public int donnee_1;
    	public int donnee_2;
    	public int donnee_3;
    	public int donnee_4;
    	public int donnee_5;
    	public int donnee_6;
    	public int donnee_7;
    	public int donnee_8;
     
    	public Globale(int var_1, int var_2, int var_3, int var_4, int var_5, int var_6, int var_7, int var_8)
    	{
    		donnee_1 = var_1;
    		donnee_2 = var_2;
    		donnee_3 = var_3;
    		donnee_4 = var_4;
    		donnee_5 = var_5;
    		donnee_6 = var_6;
    		donnee_7 = var_7;
    		donnee_8 = var_8;
    	}
     
    }
    Voici la classe Invocations déclarée coté traitement et contenant la méthode invocation() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package traitement;
     
    public class Invocations {
     
    	public Globale invocation()
    		{
    			Globale b = new Globale(1,2,3,4,5,6,7,8);
    			return(b);
    		}
     
    }
    Et voici le fichier MXML invoquant la méthode invocation() via un Remote Object :

    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
    <?xml version="1.0" encoding="utf-8"?>
    <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:ext="ext.*"
    	horizontalAlign="center"
    	verticalGap="0"
    	creationComplete="fonction();"
    	>
     
    	<mx:Script>
    		<![CDATA[
    		import mx.rpc.events.FaultEvent;
    		import mx.rpc.events.ResultEvent;
    		import mx.controls.Alert;
     
    		import traitement.Globale;
     
    		public function erreur(e:FaultEvent):void
    			{
    				Alert.show(e.fault.message);
    			}
     
    		public function succes(e:ResultEvent):void {
    				var a:Globale = Globale(e.result);
    				Alert.show(a.donnee_1.toString());
    			}
     
    		public fonction():void
    			{
    				remoteobject.invocation();
    			}
     
    		]]>
    	</mx:Script>
     
    	<mx:RemoteObject id="remoteobject"
    		showBusyCursor="true"
    		fault="erreur(event)"
    		destination="dest_1"
    		result="succes(event)"
    		/>
     
    </mx:VBox>
    Enfin, voici la balise <destination> intégrée au fichier remoting-config.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <destination id="dest_1">
    		<properties>
    			<source>traitement.Invocations</source>
    			<scope>application</scope>
    		</properties>
    </destination>
    En lançant l'application, au lieu d'avoir la variable de type Number castée en type String affichée au sein de l'alerte, j'ai ce message d'erreur :

    faultCode:Server.Acknowledge.Failed faultString:'Didn't receive an acknowledge message'
    faultDetail:'Was expecting mx.messaging.messages.AcknowledgeMessage, but received null'

    Merci pour votre aide..

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Salut,

    Je dirais que BlazeDs n'arrive pas à mapper tes objets Flex en objets Java. Et dans ces cas là, le message d'erreur manque de verbiage ..
    Essaye avec des BigDecimal du côté Java au lieu d'utiliser des int.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Analyste informatique
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Par défaut
    Merci pour ta réponse Krazymins,

    J'ai essayé coté Java de changer le typage des 8 variables contenues dans la classe Globale de int vers BigDecimal. J'ai aussi modifié dans la méthode invocation() l'instruction précédant le return comme suit:

    Globale b = new Globale(new BigDecimal(1), new BigDecimal(2), new BigDecimal(3), new BigDecimal(4), new BigDecimal(5), new BigDecimal(6), new BigDecimal(7), new BigDecimal(8));

    Mais l'erreur persiste. Une autre suggestion?..

  4. #4
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    De mémoire lorsque je le faisais, les champs Java étaient déclarés en private avec des getter/setter.
    A priori ça ne change pas grand chose, mais sait-on jamais, BlazeDs travaille peut être explicitement avec des accesseurs.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Analyste informatique
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Par défaut
    Encore merci pour ta réponse Krazymins, mais le fait que les variables de la classe Globale soient déclarées en public ou en private ne change rien à mon code du moment que la méthode invocation() de la classe Invocations n'accède à aucune d'entre elles, et ne fait que créer une nouvelle instance de celle-ci via le constructeur transmettant 8 paramètres.

    Une autre suggestion?..

  6. #6
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Pour ça ok, mais en fait lorsque je parlais de mapping, je parlais de la transformation de l'object Flex en Java et inversement. Lorsque le message AMF transite, BlazeDs crée un nouvel objet en se basant sur l'autre et mappe ces 2 objets. C'est en ce sens que je me demandais s'il fonctionnait avec des accesseurs, et non pas lorsque tu fais explictement l'appel à l'objet dans le code.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Analyste informatique
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Par défaut
    J'ai défini, comme tu l'as suggéré, des accesseurs sur la classe Globale coté Java, en rendant ses variables d'instance privées, comme suit :

    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
    package traitement;
     
    public class Globale {
     
    	private int donnee_1;
    	private int donnee_2;
    	private int donnee_3;
    	private int donnee_4;
    	private int donnee_5;
    	private int donnee_6;
    	private int donnee_7;
    	private int donnee_8;
     
    	public Globale(int var_1, int var_2, int var_3, int var_4, int var_5, int var_6, int var_7, int var_8)
    	{
    		donnee_1 = var_1;
    		donnee_2 = var_2;
    		donnee_3 = var_3;
    		donnee_4 = var_4;
    		donnee_5 = var_5;
    		donnee_6 = var_6;
    		donnee_7 = var_7;
    		donnee_8 = var_8;
    	}
     
    	public int getDonnee_1()
    	  {
    	    return donnee_1;
    	  }
     
    	public int getDonnee_2()
    	  {
    	    return donnee_2;
    	  }
     
    	public int getDonnee_3()
    	  {
    	    return donnee_3;
    	  }
     
    	public int getDonnee_4()
    	  {
    	    return donnee_4;
    	  }
     
    	public int getDonnee_5()
    	  {
    	    return donnee_5;
    	  }
     
    	public int getDonnee_6()
    	  {
    	    return donnee_6;
    	  }
     
    	public int getDonnee_7()
    	  {
    	    return donnee_7;
    	  }
     
    	public int getDonnee_8()
    	  {
    	    return donnee_8;
    	  }
     
    }
    Aprés avoir supprimé l'historique du navigateur, copié le nouveau fichier compilé Globale.class dans le dossier classes/traitement de BlazeDS et relancé Tomcat, le résultat est le même..

  8. #8
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Oui c'était une simple suggestion car c'est la seule différence que je vois
    Je vois par contre que tu as replacé des int ..Pour les mappings en question, tu peux redéfinir toi-même tes mappings, cependant voici la configuration de base utilisée pour les mappings par BlazeDs (et pour le coup, les number peuvent être traduits en long, float, ou double. Mea culpa pour le BigDecimal, c'est ce qu'on utilise chez nous).

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Analyste informatique
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Par défaut
    Merci Krazymins,

    Je suis repassé en double coté Java, sachant qu'initialement (avant mon premier post) c'est ce que j'utilisais vu que la configuration de base du Mapping fait bien correspondre les Number coté AS3 aux double, long et float coté Java. Mais l'erreur persiste..

    May be another suggestion? :)

  10. #10
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Citation Envoyé par Krazymins Voir le message
    Oui c'était une simple suggestion car c'est la seule différence que je vois
    Je confirme que les accesseurs ne changent rien (ce qui a du sens ..). Il est impératif cependant que les champs soient déclarés en public (ou en private avec des accesseurs donc).

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Analyste informatique
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Par défaut
    Oui, en effet. Voici le code actuel :

    Classe Globale :

    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
    package traitement;
     
    public class Globale {
     
    	public double donnee_1;
    	public double donnee_2;
    	public double donnee_3;
    	public double donnee_4;
    	public double donnee_5;
    	public double donnee_6;
    	public double donnee_7;
    	public double donnee_8;
     
    	public Globale(double var_1, double var_2, double var_3, double var_4, double var_5, double var_6, double var_7, double var_8)
    	{
    		donnee_1 = var_1;
    		donnee_2 = var_2;
    		donnee_3 = var_3;
    		donnee_4 = var_4;
    		donnee_5 = var_5;
    		donnee_6 = var_6;
    		donnee_7 = var_7;
    		donnee_8 = var_8;
    	}
     
    }
    Classe Invocations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package traitement;
     
    public class Invocations {
     
    	public Globale invocation()
    		{
    			Globale b = new Globale(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
    			return(b);
    		}
     
    }

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Analyste informatique
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Par défaut
    Bonjour,

    Je viens d'essayer l'opération contraire, en instanciant la classe Globale coté AS3 avec le constructeur définissant 8 paramètres de type Number et en transmettant l'objet Globale instancié à une méthode coté Java qui attend un paramètre de type Globale, puis réalise un println() sur sa variable donnee_1, et celle-ci s'affiche bien dans la console de Tomcat.

    Dans ce cas, pourquoi le Mapping de classes AS3/Java contenant respectivement des variables d'instance Number/float ne marche que dans le sens frontend > backend? Le problème se poserait-il dans le return() coté Java?...

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/07/2010, 16h26
  2. [Debutant(e)]Debug Java sous Eclipse
    Par Jean_Benoit dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 13/01/2005, 10h51
  3. [Débutant][Installation]Java sous Win
    Par MALAGASY dans le forum EDI et Outils pour Java
    Réponses: 17
    Dernier message: 26/08/2004, 09h22
  4. [VB6] Modification objet OLE dans Word sous VB
    Par zworg dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/02/2004, 08h20
  5. webcam : lire sur un port usb en c/c++ ou java. sous win. ?
    Par flo007 dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 24/05/2002, 23h24

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