Jeter personnalisé exceptions dans JAX-WS
J'ai un JAX-WS web un service web méthode peut lever une exception.
@WebMethod
public Folder getTree() throws UnauthorizedException {
//...
//Get authorization data..
//...
if (!authorized) {
throw new UnauthorizedException();
}
//...
}
Il fonctionne bien si l'utilisateur est autorisé, mais lorsque l'exception est levée, il ne génère pas de message SOAP avec une faute, c'est juste accidents de service web avec
SEVERE: Unauthorized
ru.cos.xdoc.storage.UnauthorizedException: Unauthorized
at ru.cos.xdoc.storage.Storage.getTree(Storage.java:136)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
et ferme la connexion
HTTP/1.1 500 Internal Server Error
X-Powered-By: Servlet/2.5
Server: Sun GlassFish Enterprise Server v2.1.1
Content-Type: text/xml;charset="utf-8"
Transfer-Encoding: chunked
Date: Mon, 20 Sep 2010 15:43:59 GMT
Connection: close
J'ai l'impression de manquer quelque chose de simple
MODIFIER Le problème s'est avéré ne surviennent que dans le cas où une exception est levée peu de temps après le début de la méthode web. Lorsqu'un retard est introduit avant le lancement d'une exception, comme
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
throw new UnauthorizedException();
tout fonctionne bien.
Quelqu'un a une idée de ce que peut provoquer un tel comportement étrange?
Vous devez vous connecter pour publier un commentaire.
Vous avez mappé votre exception d'une Faute? Voir JAX-WS - Carte des Exceptions pour les fautes
UnauthorizedException
une sous-classe deRuntimeException
? Si c'est le cas, peut-être que le WS servlet est à penser que votre WS a un bug.il serait peut-être plus simple, il suffit de construire un message qui dit "Permission denied", ou quelque chose comme ça. À mon avis, un service web ne devrait jamais jeter une exception, elle doit toujours retourner une réponse.