Custom Exception dans un webservice
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:
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:
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:
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:
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