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 :
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
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); } }
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 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; } }
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
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; } }
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
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
Si quelqu'un à une petite idée je suis preneur, parce que là je sèche completement.
Merci d'avance
Partager