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 :

Conversion d'objet avec BlazeDS


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Par défaut Conversion d'objet avec BlazeDS
    Bonjour à tous !

    Alors voilà mon problème avec BlazeDS et le RemoteObject de Flex :

    Lorsque je récupère directement un objet de classe Adresse de Java vers AS3, je n'ai pas de problème de conversion.

    Code xml : 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
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
     
     
    <mx:RemoteObject id="ro" destination="AdresseManager"
    				 result="resultHandler(event)"
    				 fault="faultHandler(event)" />
     
     
    <mx:Script>
    	<![CDATA[
    		import valueObjects.Client;
    		import valueObjects.Adresse;
     
    		import mx.controls.Alert;
    		import mx.rpc.events.FaultEvent;
    		import mx.rpc.events.ResultEvent;
     
     
    		[Bindable]
    		public var addr:Adresse;
    		[Bindable]
    		public var cl:Client;
     
    		private function faultHandler(event:FaultEvent):void{
    			Alert.show(event.fault.faultString);
    		}
     
    		private function resultHandler(event:ResultEvent):void{
    			if (event.result == null)
    				Alert.show("Failed");
    			else{
    				Alert.show("Success");				
    				addr = event.result as Adresse;
     
    			}
    		}
     
     
    	]]>
    </mx:Script>
     
    <mx:Button label="Get Data" click="ro.getAdresseById(1)"/>
     
    <mx:Label text="{addr.bp} {addr.nomVoie} {addr.lieuDit}" />
     
     
    </mx:Application>
    Ce code m'affiche bien les propriétés de l'adresse.

    Ensuite j'ai une classe Client qui contient une variable adresse de type Adresse.

    Le problème est que lorsque je récupère un objet de la classe Client (toujours de Java vers AS3), la conversion de l'objet Adresse sur la variable adresse se passe mal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: Error #1034: Echec de la contrainte de type*: conversion de Object@15465b29 en valueObjects.Adresse impossible.
    Ce qui m'énerve le plus, c'est que "desfois" ça fonctionne mais très rarement et peut être dû à un problème de cache ...

    Voilà, je n'ai plus qu'à espérer que quelqu'un est déjà passé par là (où croire au père noël ). Donc si quelqu'un a une idée ?
    Merci d'avance.

    Joyeux noël à tous !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 78
    Par défaut
    As tu bien stipulé tes remote alias coté flex (et java) tes remote class alias

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Par défaut
    Oui je les ai bien fait du coté flex :

    Code AS3 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    package valueObjects
    {
    	import mx.collections.ArrayCollection;
     
    	[RemoteClass(alias="fr.data.Client")]		
     
    	[Bindable]
    	public class Client
    	{...}
    }

    Code AS3 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    package valueObjects
    {
    	import mx.collections.ArrayCollection;
     
    	[RemoteClass(alias="fr.data.Adresse")]
     
    	[Bindable]
    	public class Adresse
    	{...}
    }

    dans le remoting-config.xml
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	<destination id="ClientManager">
    		<properties>
    			<source>fr.service.ClientManager</source>
    			<scope>application</scope>
    		</properties>
    	</destination>
     
    	<destination id="AdresseManager">
    		<properties>
    			<source>fr.service.AdresseManager</source>
    			<scope>application</scope>
    		</properties>
    	</destination>

    Qu'entends tu par "coté java" ?

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Par défaut
    Personne ?

    je joins les classes au cas ou :

    Adresse :
    Code Java : 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
     
    public class Adresse implements java.io.Serializable {
     
    	private Integer idAdresse;
    	private Integer NVoie;
    	private String typeVoie;
    	private String nomVoie;
    	private String lieuDit;
    	private Integer cp;
    	private String commune;
    	private Integer bp;
    	private String pays;
    	private Set clientsForIdAdresse = new HashSet(0);
    	private Set clientsForIdAdresseChantier = new HashSet(0);
     
    	public Adresse() {
     
    	}
    }

    Code ActionScript : 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
     
    	[Bindable]
    	[RemoteClass(alias="fr.data.Adresse")]
    	public class Adresse
    	{
     
    		public var idAdresse:int;
    		public var NVoie:int;
    		public var typeVoie:String;
    		public var nomVoie:String;
    		public var lieuDit:String;
    		public var cp:int;
    		public var commune:String;
    		public var bp:int;
    		public var pays:String;
    		public var clientsForIdAdresse:Object;
    		public var clientsForIdAdresseChantier:Object;	
     
    	}

    Client :
    Code Java : 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
     
    public class Client implements java.io.Serializable {
     
    	private Integer idClient;
    	private Adresse adresseByIdAdresseChantier;
    	private Adresse adresseByIdAdresse;
    	private String nom;
    	private String prenom;
    	private String telephone;
    	private String mail;
    	private Set ficheValidations = new HashSet(0);
    	private Set dossiers = new HashSet(0);
     
    	public Client() {
    	}
    }

    Code ActionScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    	[Bindable]
    	[RemoteClass(alias="fr.data.Client")]		
    	public class Client
    	{
    		public var idClient:int;
    		public var adresseByIdAdresseChantier:Adresse;
    		public var adresseByIdAdresse:Adresse;		
    		public var nom:String;
    		public var prenom:String;
    		public var telephone:String;
    		public var mail:String;
    		public var ficheValidations:ArrayCollection;
    		public var dossiers:ArrayCollection;
    	}

    Voilà, donc comme précédemment dit, la classe Client comporte des attributs de type Adresse.
    Je ne comprends vraiment pas pourquoi, une adresse toute seule est bien convertie, alors qu'une adresse dans un objet client devient null.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Par défaut
    Je reviens à la charge :p

    Juste pour dire que si je ne caste pas les objets provenant de Java en objet typé AS, BlazeDS convertit ces objets en ... Object et je peux tout de même accéder aux propriétés de ces objets ...
    Voilà c'est moche, mais ça "marche".

    Je suis toujours ouvert à d'éventuelles autres solutions !!

    Merci

  6. #6
    Inactif
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 117
    Par défaut
    normalement dans le remoteClass que tu déclares dans ta classe AS3 correspond au package + classe java

    [RemoteClass(alias="fr.data.Adresse")]
    donc normalement au niveau java ta classe Adresse doit etre dans un package data qui lui meme est dans un package fr.

    Si ça ne marche pas, là il y a un autre gros problème

Discussions similaires

  1. [POO] Instancier un objet avec le nom de la classe
    Par shinchun dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2006, 13h44
  2. Réponses: 9
    Dernier message: 22/12/2005, 22h20
  3. Réponses: 3
    Dernier message: 22/12/2005, 00h40
  4. nommer un objet avec une variable
    Par fatcat dans le forum C++
    Réponses: 4
    Dernier message: 11/12/2005, 16h16
  5. A propos des modèles d'objet (avec sources)
    Par DevX dans le forum C++Builder
    Réponses: 14
    Dernier message: 01/12/2002, 12h22

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