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 :

[WebService] Récupérer une exception java/J2ee coté flex


Sujet :

Flex

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut [WebService] Récupérer une exception java/J2ee coté flex
    Bonjour à tous,

    Coté serveur (WebService) j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public String getHelloWorld(HashMap user) throws RemoteException, Exception {
    		throw new Exception("Test message derreur");
    	}


    Coté client j'ai :

    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initWebService();">
       <mx:Script>
          <![CDATA[
          	import mx.rpc.events.InvokeEvent;
          	import mx.rpc.soap.SOAPFault;
          	import mx.messaging.messages.ErrorMessage;
          	import mx.effects.Sequence;
          	import mx.controls.List;
          	import mx.controls.TextArea;
          	import mx.controls.Spacer;
            import mx.events.FlexEvent;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.soap.LoadEvent;
            import mx.rpc.soap.WebService;
            import mx.collections.ArrayCollection;
     
            public var _webService:WebService; // web service
            public var _webServiceLoaded:Boolean = false; // flag noting when wsdl has been loaded
     
            public function initWebService():void {
                // initializes webservice
                if (!_webService) {
                   _webService = new WebService();
     
                   // assign wsdl url
                   _webService.wsdl = "http://localhost:8080/service?wsdl"; // WSDL url
     
                   // add listeners
                   _webService.addEventListener(LoadEvent.LOAD, load_listener);
                   _webService.addEventListener(ResultEvent.RESULT, result_listener);
                   _webService.addEventListener(FaultEvent.FAULT, fault_listener);
     
                   // load wsdl
                   _webService.loadWSDL();
     
     
                }
             }
     
            public function callHelloWorld(eventObj:Event):void {
                if (_webServiceLoaded) { // is wsdl is loaded
     
    			var user = new Dictionary();
    			user["USER"] = "admin";
    			user["PASSWORD"] = "admin";
     
    			var criteria = new Dictionary();
    			criteria["VENDOR_ID"] = new uint(3); 
     
    			webService.getHelloWorld(user);
                } 
            }
     
            public function load_listener(event:LoadEvent):void {
                _webServiceLoaded = true; // mark wsdl as loaded so we know we can use the web service
            }
     
            public function result_listener(event:ResultEvent):void {
    			status.text = event.result as String; 
    			trace(event.result); 
            }
     
            public function fault_listener(event:FaultEvent):void {
    			trace(event);
            } 
     
            public function creationApplicationListener(event:FlexEvent):void {
    		  	trace(event);
            }
     
          ]]>
       </mx:Script>
       <mx:Button x="155" y="73" click="callHelloWorld(event)" label="Button" width="295" height="27"/>
       <mx:TextArea  id="status" x="155" y="108" width="295" height="275"/>
    </mx:Application>

    Lorsque je lance ce script je récupère :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [FaultEvent fault=[RPC Fault faultString="HTTP request error" faultCode="Server.Error.Request" 
    faultDetail="Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 
    text="Error #2032: Erreur de flux. URL: http://localhost:8080/service"]. URL: http://localhost:8080/service"] 
    messageId="0E51EA53-FB34-CD59-C516-14D402AF44C6" type="fault" bubbles=false cancelable=true eventPhase=2]



    Si quelqu'un à une idée de la manière de récupérer le message "Test message derreur" n'hésitez pas.

    Merci

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    j'pencherais sur un problmème de configuration coté serveur, tu peux détailler un peu ce que tu as coté serveur?

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Jim_Nastiq Voir le message
    j'pencherais sur un problmème de configuration coté serveur, tu peux détailler un peu ce que tu as coté serveur?
    Le serveur est un tomcat V5.5. Les WebService sont générés avec Axis.

    Le service à été testé avec un client Java, l'exception est bien remonté.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Voici à quoi ressemble le WSDL si ça peut vous donner un indice.

    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
    <wsdl:definitions targetNamespace="http://api.service">
    −
    	<!--
    WSDL created by Apache Axis version: 1.4
    Built on Apr 22, 2006 (06:55:48 PDT)
    -->
    −
    	<wsdl:types>
    −
    	<schema targetNamespace="http://xml.apache.org/xml-soap">
    <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
    −
    	<complexType name="mapItem">
    −
    	<sequence>
    <element name="key" nillable="true" type="xsd:anyType"/>
    <element name="value" nillable="true" type="xsd:anyType"/>
    </sequence>
    </complexType>
    −
    	<complexType name="Map">
    −
    	<sequence>
    <element maxOccurs="unbounded" minOccurs="0" name="item" type="apachesoap:mapItem"/>
    </sequence>
    </complexType>
    </schema>
    </wsdl:types>
    −
    	<wsdl:message name="getHelloWorldResponse">
    <wsdl:part name="getHelloWorldReturn" type="xsd:string"/>
    </wsdl:message>
    −
    	<wsdl:message name="getHelloWorldRequest">
    <wsdl:part name="user" type="apachesoap:Map"/>
    </wsdl:message>
    −
    	<wsdl:portType name="NCAdmin">
    −
    	<wsdl:operation name="getHelloWorld" parameterOrder="user">
    <wsdl:input message="impl:getHelloWorldRequest" name="getHelloWorldRequest"/>
    <wsdl:output message="impl:getHelloWorldResponse" name="getHelloWorldResponse"/>
    </wsdl:operation>
    </wsdl:portType>
    −
    	<wsdl:binding name="NCAdminSoapBinding" type="impl:NCAdmin">
    <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    −
    	<wsdl:operation name="getHelloWorld">
    <wsdlsoap:operation soapAction=""/>
    −
    	<wsdl:input name="getHelloWorldRequest">
    <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://api.service" use="encoded"/>
    </wsdl:input>
    −
    	<wsdl:output name="getHelloWorldResponse">
    <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://api.service" use="encoded"/>
    </wsdl:output>
    </wsdl:operation>
    </wsdl:binding>
    −
    	<wsdl:service name="seriveService">
    −
    	<wsdl:port binding="impl:serviceSoapBinding" name="service">
    <wsdlsoap:address location="http://localhost:8080/service"/>
    </wsdl:port>
    </wsdl:service>
    </wsdl:definitions>

  5. #5
    Membre averti Avatar de samy2525
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 259
    Points : 310
    Points
    310
    Par défaut RemoteException et Flex
    Bonjour si j'ai bien suivi tu as une exception java et tu vouderai la catcher coté Flex, le meilleur moyen c'est de créer ta propre exeception du style

    public class DataException extends Exception {
    static final long serialVersionUID = 5 ;
    public DataException() {
    super();
    }
    public DataException(String s) {
    super(s);
    }
    }

    cette class te permet d'avoir une exception en lui donnant un message specifique exemple :


    public void toto() throws DataException{
    //ton code

    try {
    //ton code
    }
    catch (Exception eTest){
    logger.error(" ### erreur lors du test de l'acces au bean", eTest) ;
    throw new DataException("DECONNEXION") ;
    }
    }
    ça te permet de declencher une exception du type définit avec un message specifique ("DECONNEXION")

    coté Flex dans le onFault de la reponse de ton appelle tu rajoute ça

    var errorServer:String = "";
    if(faultEvent!=null && faultEvent.message != null &&
    ErrorMessage(faultEvent.message).rootCause != null &&
    (ErrorMessage(faultEvent.message).rootCause)["cause"] != null){
    errorServer = ((ErrorMessage(faultEvent.message).rootCause)["cause"])["message"];
    trace("errorServer ====>>> " + errorServer);
    }

    donc ta pu recuperer ton exception et tu peux faire ce que tu veux aprés

    j'espere que c'est ça

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par samy2525 Voir le message
    Bonjour si j'ai bien suivi tu as une exception java et tu vouderai la catcher coté Flex, le meilleur moyen c'est de créer ta propre exeception du style

    public class DataException extends Exception {
    static final long serialVersionUID = 5 ;
    public DataException() {
    super();
    }
    public DataException(String s) {
    super(s);
    }
    }

    cette class te permet d'avoir une exception en lui donnant un message specifique exemple :


    public void toto() throws DataException{
    //ton code

    try {
    //ton code
    }
    catch (Exception eTest){
    logger.error(" ### erreur lors du test de l'acces au bean", eTest) ;
    throw new DataException("DECONNEXION") ;
    }
    }
    ça te permet de declencher une exception du type définit avec un message specifique ("DECONNEXION")

    coté Flex dans le onFault de la reponse de ton appelle tu rajoute ça

    var errorServer:String = "";
    if(faultEvent!=null && faultEvent.message != null &&
    ErrorMessage(faultEvent.message).rootCause != null &&
    (ErrorMessage(faultEvent.message).rootCause)["cause"] != null){
    errorServer = ((ErrorMessage(faultEvent.message).rootCause)["cause"])["message"];
    trace("errorServer ====>>> " + errorServer);
    }

    donc ta pu recuperer ton exception et tu peux faire ce que tu veux aprés

    j'espere que c'est ça
    Je viens de tester ta méthode. Elle semblait convenir à mon besoin ... Mais malheuresement, le listener faultEvent ne contient pas de "cause" ...

    Tu ne vois pas d'où ce problème pourrait venir ?

  7. #7
    Membre averti Avatar de samy2525
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 259
    Points : 310
    Points
    310
    Par défaut RemoteException et Flex
    Le probleme vient du fait que peut etre ta pa importer la classe suivante

    import mx.messaging.messages.ErrorMessage;

    du coup tu as pas pu caster ton objet convenablement

    à tester

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par samy2525 Voir le message
    Le probleme vient du fait que peut etre ta pa importer la classe suivante

    import mx.messaging.messages.ErrorMessage;

    du coup tu as pas pu caster ton objet convenablement

    à tester
    Je viens de regarder j'ai bien l'import de cette classe. Mais le champ "cause" n'est pas présent dans l'objet : (faultEvent.message).rootCause

    Voici le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ReferenceError: Error #1069: La propriété cause est introuvable sur flash.events.IOErrorEvent et il n'existe pas de valeur par défaut.
    	at frontOffice/fault_listener()[D:\Projets\nConf\dev\frontOffice\src\frontOffice.mxml:75]
    	at flash.events::EventDispatcher/dispatchEventFunction()
    	at flash.events::EventDispatcher/dispatchEvent()
    	at mx.rpc::AbstractService/dispatchEvent()[E:\dev\3.0.x\frameworks\projects\rpc\src\mx\rpc\AbstractService.as:232]
    	at mx.rpc::AbstractOperation/http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[E:\dev\3.0.x\frameworks\projects\rpc\src\mx\rpc\AbstractOperation.as:193]
    	at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::faultHandler()[E:\dev\3.0.x\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:220]
    	at mx.rpc::Responder/fault()[E:\dev\3.0.x\frameworks\projects\rpc\src\mx\rpc\Responder.as:49]
    	at mx.rpc::AsyncRequest/fault()[E:\dev\3.0.x\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:103]
    	at DirectHTTPMessageResponder/errorHandler()[E:\dev\3.0.x\frameworks\projects\rpc\src\mx\messaging\channels\DirectHTTPChannel.as:343]
    	at flash.events::EventDispatcher/dispatchEventFunction()
    	at flash.events::EventDispatcher/dispatchEvent()
    	at flash.net::URLLoader/redirectEvent()

  9. #9
    Membre averti Avatar de samy2525
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 259
    Points : 310
    Points
    310
    Par défaut RemoteException et Flex
    on parle pas du meme evenement de reception moi j'utilise

    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;

    et toi tu utilise un autre evenement tu vois c'est pour ça que ça marche pas, la communication entre le serveur et le cleint passe par du RPC et le protocole d'echange c'est AMF

    donc tous les evenements que je recoit sont de type mx.rpc.events.FaultEvent ou bien mx.rpc.events.ResultEvent

    et toi tu utilise flash.events.IOErrorEvent tu pourra jamais avoir une cause dans ce type d'evenement.

Discussions similaires

  1. une exception java.lang.NullPointerException
    Par marwa21 dans le forum Struts 1
    Réponses: 8
    Dernier message: 22/07/2010, 13h49
  2. Réponses: 2
    Dernier message: 13/05/2008, 18h19
  3. Récupérer une exception dans une page d'erreur
    Par crawling5 dans le forum JSF
    Réponses: 3
    Dernier message: 15/11/2007, 09h46
  4. [WinDev 7.5] Récupérer une exception
    Par sylsau dans le forum WinDev
    Réponses: 1
    Dernier message: 29/12/2006, 19h01

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