Bonjour tout le monde,

Bon je vais essayer d'être le plus clair possible.

Je voudrais mettre en place un mécanisme d'exception dans mon webservice qui retournerais une SOAPFault à mon client.

Donc j'ai mis en place la classe d'exception ci-dessous :

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
package fr.cea.ws.exception;
 
import javax.xml.ws.WebFault;
 
/**
 * The CEAException class.
 */
@WebFault(name="CEAFault", targetNamespace = "http://server.ws.cea.fr/fault/")
public class CEAException extends Exception {
 
    private static final long serialVersionUID = -7758655883843742158L;
    private CEAFault fault;
 
    public CEAException(){
    }
    /**
     * @param fault
     */
    protected CEAException(CEAFault fault){
        super(fault.getCeaFaultString());
        this.fault = fault;
    }
    /**
     * @param message
     * @param faultInfo
     */
    public CEAException(String message, CEAFault faultInfo){
        super(message);
        this.fault = faultInfo;
    }
    /**
     * @param message
     * @param faultInfo
     * @param cause 
     */
    public CEAException(String message, CEAFault faultInfo, Throwable cause){
        super(message, cause);
        this.fault = faultInfo;
    }
    /**
     * @return 
     */
    public CEAFault getFaultInfo(){
        return fault;
    }
    /**
     * @param message 
     */
    public CEAException(String message){
        super(message);
    }
    /**
     * @param code
     * @param message 
     */
    public CEAException(String code, String message){
        super(message);
        this.fault = new CEAFault();
        this.fault.setCeaFaultString(message);
        this.fault.setCeaFaultCode(code);
    }
    /**
     * @param cause 
     */
    public CEAException(Throwable cause){
        super(cause);
    }
    /**
     * @param message
     * @param cause 
     */
    public CEAException(String message, Throwable cause){
        super(message, cause);
    }    
}
A coté de cette classe j'ai développé le bean :
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
package fr.cea.ws.exception;
/**
 * The CeaFault class.
 * 
 * @version 1.0
 */
public class CEAFault{
 
    /**
     * Fault code
     */
    private String ceaFaultCode;
    /**
     * Fault String
     */
    private String ceaFaultString;
 
    /**
     * @return the faultCode
     */
    public String getCeaFaultCode(){
        return ceaFaultCode;
    }
    /**
     * @param faultCode the faultCode to set
     */
    public void setCeaFaultCode(String ceaFaultCode){
        this.ceaFaultCode = ceaFaultCode;
    }
    /**
     * @return the faultString
     */
    public String getCeaFaultString(){
        return ceaFaultString;
    }
    /**
     * @param ceaFaultString the faultString to set
     */
    public void setCeaFaultString(String ceaFaultString){
        this.ceaFaultString = ceaFaultString;
    }
}
et voici le bout de code qui est censé lancé mon exception (j'ai enlevé du code et j'ai juste mis la boucle qui lance mon exception):

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
 
package fr.cea.ws.server;
 
//Service Implementation
@WebService(endpointInterface = "fr.cea.ws.server.CorrectCEAInterface")
public class CorrectCEAImpl implements CorrectCEAInterface{
 
    public static final String FORMAT_DATE_BASE = "yyyy-MM-dd HH:mm:ss";
    private static final Logger logger = Logger.getLogger(CorrectCEAImpl.class.getName());
 
	@Override
	public String getHelloWorldAsString(String name) {
		return "Hello World JAX-WS toto " + name;
	}
 
    @Override
    public List<HashMapWrapper> getCorrectValue(List<HashMapWrapper> data, 
            String startDate, 
            String endDate, 
            String dataType, 
            int isCompressed, 
            int pollingDelay) throws CEAException {
 
        logger.log(Level.DEBUG, "Entering getCorrectValue");
 
            for (Iterator ot = listData.iterator();ot.hasNext();){
                HashMapWrapper wrap = new HashMapWrapper();
                Datum um = (Datum)ot.next();
                wrap.setKey(sdf.format(um.getDate()));
 
                //gestion des NaN dans le retour de l'algo du cea
                if( !(Math.abs(um.getValue()) >= 0) ){
                    throw new CEAException("A NaN value still exist in the list");
                }
                wrap.setValue(um.getValue());
                listWrap.add(wrap);
            }
 
            return listWrap;
 
        } catch (ParseException | WrongDateException  ex) {
            logger.log(Level.ERROR, ex);
        } catch (CEAException ex){
 
            throw ex;
        } catch(Exception ex){
            logger.log(Level.ERROR, ex);
        }
        return listWrap;
    }
}
Le problème est quand je tombe dans le cas ou mon exception est lancée, j'ai cette erreur qui surgit de nulle part :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Exception in thread "main" java.lang.ExceptionInInitializerError
	at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:107)
	at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
	at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:129)
	at com.sun.proxy.$Proxy32.getCorrectValue(Unknown Source)
	at fr.powergridprod.core.PowergridProdCore.execute(PowergridProdCore.java:271)
	at fr.powergridprod.core.PowergridProdCore.main(PowergridProdCore.java:608)
Caused by: java.lang.ClassCastException: com.sun.xml.bind.v2.runtime.JAXBContextImpl cannot be cast to com.sun.xml.internal.bind.api.JAXBRIContext
	at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.<clinit>(SOAPFaultBuilder.java:550)
	... 6 more
Java Result: 1
Je pense avoir un problème avec mes annotations dans l'exception mais après moult essaie j'ai toujours le même problème

Si quelqu'un à une petite idée je suis preneur, parce que là je sèche completement.

Merci d'avance