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

Services Web Java Discussion :

Faire sa propre exception


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 79
    Par défaut Faire sa propre exception
    Bonjour.

    J'essaye de créer ma propre exception dans un service web (que je souhaite renvoyer pour une authentification raté ou des parametres non valides etc)
    Coté serveur tout a l'air de bien se passer mais coté client impossible de récupérer la bonne exception.

    Voici mon code (sans les packages et les imports pour réduire un peu) :

    Le service web
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Classe {
     
    	public eltClasse getClasse(String classe) throws MyCustomException {
    		if (!classe.equalsIgnoreCase("0") ) {
    			eltClasse lElt = new eltClasse(classe);
    			return lElt;
    		} else throw new MyCustomException("GENEX002","Cette classe est interdite"); 
    	}
    }
    Mon exception custom
    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
    public class MyCustomException extends Exception {
    	private String   errorCode;
    	   private String   errorDescription;
     
    	   public MyCustomException(String errorCode,
    	                            String errorDescription){
    	      super();
    		  this.setErrorCode(errorCode);
    	      this.setErrorDescription(errorDescription);
    	   }
    	public void setErrorCode(String errorCode) {
    		this.errorCode = errorCode;
    	}
     
    	public String getErrorCode() {
    		return errorCode;
    	}
     
    	public void setErrorDescription(String errorDescription) {
    		this.errorDescription = errorDescription;
    	}
     
    	public String getErrorDescription() {
    		return errorDescription;
    	}
     
     
    }
    Et mon client :
    public class client {
    public static void main(String[] args) {

    ClassePortType service = new Classe().getClasseHttpSoap11Endpoint();
    try {
    EltClasse lRetour = service.getClasse("0");

    System.out.println("-------");
    System.out.println("code classe = "+lRetour.getClasse().getValue());
    }catch (MyCustomException_Exception ex) {
    System.out.println("Exception !");
    MyCustomException ex1 = ex.getFaultInfo();
    System.out.println(ex1.getMyCustomException().getValue().getErrorCode());
    }catch (Exception ex2) {
    System.out.println("Exception ?");
    }

    }

    }
    Je n'arrive JAMAIS dans la partie MyCustomException_Exception mais toujours dans la partie Exception (du coup je perds les infos...)

    Niveau wsdl ca donne ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xs:complexType name="Exception">
     <xs:sequence>
      <xs:element minOccurs="0" name="Exception" nillable="true" type="xs:anyType" /> 
      </xs:sequence>
      </xs:complexType>
     <xs:element name="MyCustomException">
     <xs:complexType>
     <xs:sequence>
      <xs:element minOccurs="0" name="MyCustomException" nillable="true" type="ax28:MyCustomException" /> 
      </xs:sequence>
      </xs:complexType>
      </xs:element>
    J'utilise eclipse galiléo, tomcat 5.0, axis derniere version, apache 2.0 et jaxws-ri 2.1.7 pour le client java.

    La j'avoue que je vois pas ce qui se passe...

    Si quelqu'un peut m'aiguiller...

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Je ne connnais pas vraiment les webservices juste utilisé une fois avec paypal mais pourquoi le nom de ton exception est :

    MyCustomException_Exception et pas juste MyCustomException ?

    Et sinon pourquoi tu affiches pas dans la console "Exception ex2" plutôt que de mettre un message qui t'apportes rien de spécial comme ça tu seras de quel type est ton exception.

    Tu fais un :


  3. #3
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 79
    Par défaut
    Pour MyCustomException_Exception ben j'en sais rien...
    Le code du client a été généré automatiquement avec jaxws-ri 2.1.7 qui prend les info dans le wsdl. J'imagine que c'est une convention de nommage de prendre le nom de l'exception (MyCustomException dans le wsdl) et de rajouter _Exception devant.
    J'ai fais le printstacktrace en fait, j'ai juste oublié de le mettre dans le code que j'ai mis ici
    Sinon on peut renvoyer une "simple" class Exception en spécifiant le message (ca marche).
    Mais ce n'est pas ce que je veux faire.
    La pour l'exemple j'envoie quelque chose de simple mais je pourrais sans doute être amené à envoyer des choses plus complexes.

    Et j'avoue que c'est aussi un peu par entetement. Normalement ca doit fonctionner donc ben j'aimerais bien comprendre pourquoi ca ne fonctionne pas comme prévu.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Raising Exceptions from the Web Service

    Handling exceptions in a Web service is no different than handling exceptions in a Web or Windows application. However, when designing exception blocks in Web services, you need to be aware of the fact that you need to communicate the exception information to the consumers of your Web service in a platform-independent manner based on the SOAP specification. To accomplish this, you should use the SoapException class that abstracts the complexities of the SOAP fault creation process. The SoapException class consists of the following properties that need to be populated before throwing the exception to the consumers.

    Message—Contents of the exception
    Code—Enum constant that specifies the type of Fault code (e.g. ClientFaultCode, ServerFaultCode)
    Actor—URL of the Web service method where the exception has occurred
    Detail—Detail element can be used to communicate more information about the exception to the callers
    Cela concerne le C# mais je suppose que c'est la même chose pour java.

  5. #5
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 79
    Par défaut
    Je viens d'essayer et effectivement c'est pareil.
    On peut etendre dans le code du serveur une exception ou une soapexception on aura toujours chez le client une soapfaultexception et pas la classe de l'exception qu'on a crée (meme si la classe apparait dans le wsdl)

    Bon ben on s'en contentera.

Discussions similaires

  1. Faire son propre serveur DNS?
    Par Death83 dans le forum Applications
    Réponses: 4
    Dernier message: 16/11/2006, 23h41
  2. [PHP-JS] Comment faire son propre BBcode
    Par Sniperman dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2006, 17h11
  3. [JNI] creer ses propres exceptions
    Par Batou dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 23/08/2006, 04h01
  4. Créer ses propres exceptions
    Par Neilos dans le forum C++Builder
    Réponses: 10
    Dernier message: 13/06/2006, 18h44

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