Axis Fault exception

Axis Fault exception - Java - Programmation

Marsh Posté le 31-01-2007 à 18:15:17    

Bonjour tout le monde,
 
Je me casse la tête ces derniers jours pour faire marcher les fault exceptions sous Axis/Java.
Mon problème est le suivant:
   Dans une methode proposée par un web service, j'ai fait un throw sur une exception personnalisée. Voici un extrait de code utilisé:
    public void testMethod() throws java.rmi.RemoteException, MyException, {
     throw new MyException("message",1);
    }
 
  L'exeption MyException est un JavaBean défini dans le WSDL du web service en question.
 
Côté client, quand j'essaie d'appeler le web service pour consomer la methode testMethod, j'obtiens un jolie message d'erreur qui est:
 
 
HTTP/1.1 500 Erreur Interne de Servlet
 
Content-Type: text/html;charset=utf-8
 
Content-Length: 3169
 
Date: Wed, 31 Jan 2007 15:55:45 GMT
 
Server: Apache-Coyote/1.1
 
Connection: close
 
 
 
<html><head><title>Apache Tomcat/5.0.30 - Rapport d'erreur</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>Etat HTTP 500 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Rapport d'exception</p><p><b>message</b> <u></u></p><p><b>description</b> <u>Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.</u></p><p><b>exception</b> <pre>javax.servlet.ServletException
 org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:290)
 org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
</pre></p><p><b>cause mère</b> <pre>java.lang.IncompatibleClassChangeError
 MyException.writeDetails(MyException.java:129)
 org.apache.axis.message.SOAPFault.outputImpl(SOAPFault.java:165)
 org.apache.axis.message.MessageElement.output(MessageElement.java:1207)
 org.apache.axis.message.SOAPBody.outputImpl(SOAPBody.java:141)
 org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:485)
 org.apache.axis.message.MessageElement.output(MessageElement.java:1207)
 org.apache.axis.AxisFault.output(AxisFault.java:755)
 org.apache.axis.SOAPPart.writeTo(SOAPPart.java:280)
 org.apache.axis.SOAPPart.writeTo(SOAPPart.java:266)
 org.apache.axis.SOAPPart.saveChanges(SOAPPart.java:484)
 org.apache.axis.attachments.AttachmentsImpl.getAttachmentCount(AttachmentsImpl.java:519)
 org.apache.axis.Message.getContentType(Message.java:475)
 org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:765)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
 org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 java.lang.reflect.Method.invoke(Method.java:324)
 org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
 java.security.AccessController.doPrivileged(Native Method)
 javax.security.auth.Subject.doAsPrivileged(Subject.java:500)
 org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:272)
 org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
 
Quelqu'un aurait une idée sur la source de ce problème? Quelqu'un aurait déjà utilisé les fault exception sous axis?
Merci pour votre retour.

Reply

Marsh Posté le 31-01-2007 à 18:15:17   

Reply

Marsh Posté le 01-02-2007 à 02:08:33    

je suppose que tu as vu que le noeud du problème était une java.lang.IncompatibleClassChangeError  et que tu t'es renseigné sur ce que c'était ?

Reply

Marsh Posté le 01-02-2007 à 09:42:49    

D'après le message d'erreur, ca vient effectivement de java.lang.IncompatibleClassChangeError. Cette exception est levée quand on essaie de modifier une classe (dans mon cas il s'agit de la classe MyException) de la mauvaise façon. Mais pour moi l'utilisation de MyException (voir throw new MyException("message",1); dans le code java) est correcte. J'ajoute que MyException est JavaBean avec deux attributs: un string et un entier et le constructeur MyException(String,int) est bien présent dans l'implementation de MyException.

Reply

Marsh Posté le 01-02-2007 à 12:16:43    

tu ne peux pas hériter de la classe d'exception  
java.rmi.RemoteException
 
c'est tout simplement interdit dans les WS en JAVA d'après ce que j'en ai lu l'an passé.

Reply

Marsh Posté le 01-02-2007 à 12:24:38    

le prototype de la methode testMethod est généré automatiquement par Axis. Ce que j'ai fait moi c'est d'implementer la methode en question.
 
L'héritage de la classe java.rmi.RemoteException est possible. J'en ai dejà utilisé dans les WS.
Mon problème vient spécialement de l'utilisation de l'exception:
     throw new MyException("message",1);

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed