J'ai une application qui se compose de services Web SOAP et REST et d'un accès HTTP simple. Tous convertissent les demandes entrantes et les envoient à un gestionnaire. La chose la plus douloureuse est la gestion des exceptions. Afin de retourner la bonne réponse, je dois emballer chaque méthode avec un bloc try-catch et créer une réponse là-bas. J'ai pensé que je pourrais créer un filtre qui pourrait le faire. Mais comment le filtre peut-il reconnaître la source de celui-ci (savon, reste de repos) alors je savais que je devais retourner une réponse SOAP ou autre?La meilleure façon de gérer les exceptions dans une application avec services Web
Répondre
Cela dépend du framework WS que vous utilisez. Tout ce que je sais a une sorte d'intercepteurs/aspects que vous pouvez injecter et gérer des exceptions en un seul endroit. Par exemple dans apache-cxf il y a même un error chain sortant spécial où vous pouvez brancher vos propres intercepteurs.
Evidemment try-catch
dans chaque méthode est une mauvaise idée.
Il semble que vous n'utilisiez pas de framework parce que c'était typique des frameworks. Par exemple, Spring vous permet de découpler le code de la gestion des exceptions et de définir vos gestionnaires d'exceptions personnalisés.
Dans votre cas, vous avez généralement 2 solutions.
(1) Vous pouvez utiliser pattern Décorateur: envelopper chaque service avec décorateur où chaque méthode est mise en œuvre comme
try {
call real method
} catch() {
send error to client
}
Comme il est très bavard, vous pouvez gagner du temps en utilisant proxy (Dynamic fonctionnalité qui a été introduit en java 5). Ainsi, vous pouvez envelopper de manière dynamique chaque service (si vos services ont une interface définie).
(2) Vous pouvez le résoudre en utilisant la page d'erreur de l'API servlet:
javax.servlet.ServletException /servlet/ErrorDisplay
pour plus de détails voir http://java.sun.com/developer/technicalArticles/Servlets/servletapi2.3/
En couche inférieure à Web-Service Layer
, vous devez créer votre Exception
personnalisé et dans Web-Service layer
vous devez utiliser try-catch
approche pour atteindre occurred exception
et catch
bloquer log
et le convertir en votre exception de couche de service Web personnalisé. Je montre cette approche suivante:
@WebService
public class EmployeeWS
{
@WebMethod
public void add(Employee em) throws CustomWebServiceException
{
try
{
// call facade layer method
}
catch(Exception e)
{
logger.error(e.getMessage());
throw new CustomWebServiceException(e);
}
}
}
alternative avec prise d'essai dans une Web-Method
, vous pouvez utiliser AOP
approch (pour l'échantillon Spring AOP
) ou interceptor
approche Web-Service frameworks
(pour l'échantillon SOAPHandler<T>
dans JAX-WS
).
Remarque: En JAX-WS
standard, vous ne pouvez pas throw
un RuntimeException
parce Exception
doit préciser dans la finale WSDL
et si vous throw
un RuntimeException
votre client de service Web ne réalisent pas votre CustomException
, dans une autre votre Web-Method
besoin de lancers francs en soi signature.
Vous pouvez voir les documents de faramework Web-Service
sélectionnés pour plus d'informations.
Vous pouvez personnaliser votre classe !! Fais le!
Prenez facile sur des erreurs de diagnostic, comme insérer un numéro de protocole, un message journal, le message client, etc ...
- 1. Quelle est la meilleure façon de gérer les exceptions ObjectDataSource?
- 2. Quelle est la meilleure façon de gérer les exceptions JMS
- 3. Meilleure façon d'authentifier les services
- 4. Meilleure façon de gérer les messages d'erreur
- 5. Meilleure façon d'implémenter les services web de Spring
- 6. Meilleure façon de gérer une exception KeyNotFoundException
- 7. Meilleure façon de gérer les erreurs
- 8. la meilleure façon de gérer
- 9. Une meilleure façon de décrire CRUD dans une application web?
- 10. Quelle est la meilleure façon de gérer les exceptions dans Perl?
- 11. Comment gérer les exceptions?
- 12. Meilleure façon de gérer les exceptions non interceptées dans les tâches/l'action ForkJoinPool
- 13. Meilleure façon de gérer les emplacements?
- 14. Quelle est la meilleure façon de gérer les exceptions de type SOAP en python
- 15. La meilleure façon de gérer les autorisations utilisateur avec PHP
- 16. Quelle est la meilleure façon de gérer la journalisation de slf4j dans une application Web déployée dans Glassfish 3.0.1?
- 17. Quelle est la meilleure façon de consigner des exceptions dans Visual Basic, sur une application ASP.NET?
- 18. La meilleure façon de gérer les exceptions lors de l'utilisation HttpWebResponse
- 19. gérer les exceptions dans .net
- 20. Quelle est la meilleure façon de gérer les exceptions HttpWebRequest asynchrones en C#?
- 21. Meilleure façon de gérer les exceptions dans le bloc de saisie C#
- 22. Meilleure façon de gérer les erreurs et les messages dans le service Grails
- 23. Meilleure pratique: comment gérer les erreurs et les exceptions dans les contrôleurs d'API Web?
- 24. Meilleure façon de gérer les exemples de données dans les applications Web Java?
- 25. Meilleure façon de gérer les minuteries?
- 26. meilleure façon de gérer les ressources
- 27. meilleure façon de gérer JSON dans django
- 28. Quelle est la meilleure façon de gérer les écrans Retina?
- 29. Gérer les demandes de façon dynamique avec une page Web
- 30. Meilleure façon de gérer l'échec de malloc dans Cocoa
j'oublié de mentionner que - j'utilise Apache CXF. Je vais essayer ces intercepteurs, merci. – user219882