J'ai un service Web JAX-WS avec une méthode Web qui peut lancer une exception.exceptions personnalisées Throwing dans JAX-WS
@WebMethod
public Folder getTree() throws UnauthorizedException {
//...
// Get authorization data..
//...
if (!authorized) {
throw new UnauthorizedException();
}
//...
}
Il fonctionne bien si l'utilisateur est autorisé, mais quand l'exception est levée, il ne génère pas de message SOAP avec un défaut, il se bloque tout 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
Je sens que je manque quelque chose de simple
EDIT Le problème s'est avéré survenir seulement dans le cas où une exception est levée peu de temps après le début de la méthode web. Lorsqu'un délai est introduit avant de lancer une exception, comme
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
throw new UnauthorizedException();
tout fonctionne correctement.
Est-ce que quelqu'un a une idée de ce qui peut causer un tel comportement étrange?
Le problème est que la méthode est censée retourner l'arborescence des dossiers, c'est ce qu'un client de service Web doit être attendu. Bien sûr, il y a une option pour passer un message d'erreur dans un paramètre OUT, mais je suppose que l'exception convient mieux dans ce cas. – greycat