Gestion des erreurs avec CXF intercepteurs - changer le message de réponse
Je suis en train de gérer les erreurs provenant de mon backend. Le handleMessage()
est appelée si une erreur se produit, mais le contenu est une instance de XmlMessage. Je voudrais le changer de mon propre réponse - il suffit de régler le code de réponse et ajouter un peu de message.
Je n'ai pas trouvé de documents appropriés qui pourrait me dire comment faire cela...
Ces axamples sont pour le REPOS mais j'aimerais gérer cette chose dans la fabrication de SAVON.
intercepteur
public class ErrorHandlerInterceptor extends AbstractPhaseInterceptor<Message> {
public ErrorHandlerInterceptor() {
super(Phase.POST_LOGICAL);
}
@Override
public void handleMessage(Message message) throws Fault {
Response response = Response
.status(Response.Status.BAD_REQUEST)
.entity("HOW TO GET A MESSAGE FROM AN EXCEPTION IN HERE???")
.build();
message.getExchange().put(Response.class, response);
}
}
context.xml
<bean id="errorHandlerInterceptor"
class="cz.cvut.fit.wst.server.interceptor.ErrorHandlerInterceptor" />
<jaxrs:server address="/rest/">
<jaxrs:serviceBeans>
<ref bean="restService" />
</jaxrs:serviceBeans>
<jaxrs:outFaultInterceptors>
<ref bean="errorHandlerInterceptor" />
</jaxrs:outFaultInterceptors>
</jaxrs:server>
OriginalL'auteur user219882 | 2012-04-08
Vous devez vous connecter pour publier un commentaire.
Et voici l'autre pièce de votre puzzle. Vous utilisez déjà JAX-RS, alors pourquoi ne pas utiliser JAX-WS?
Ce fil et ce blog cartographie de l'occupation des Exceptions dans les erreurs SOAP. Court et doux:
Et il y a votre cartographie. Il suffit de spécifier les implémentations de la au-dessus de signatures dans le cadre de
@WebFault
et votre API SOAP doit correspondre à ces heureux. De toute évidence, les liens contiennent plus de détails.Tandis que l'effort est noble (je suis content d'avoir aidé!), qui, malheureusement, isn pas comment le système de récompense des œuvres (details). Je suis à l'aise avec les concilier pour vous parce que j'ai un intérêt dans le résultat, mais il existe l'option d'accorder un supplément de prime si vous sentez que deux réponses sont méritantes. Désolé pour la peine, je ne pensais pas écrire le système. 🙂
Oh, c'est trop mauvais. J'ai décidé de le faire: je donne la prime à mjwenk parce que la réputation qui lui permet plus que vous et accepter votre réponse puisque vous avez des liens à la fois de REPOS et de SAVON. Je suppose que c'est la seule façon équitable (ou au moins un peu). Merci pour la mention...
Tout à fait raisonnable! Merci d'être au-dessus de conseil à ce sujet et de me laisser savoir. 🙂
OriginalL'auteur MrGomez
Si vous êtes à l'aide de JAX-RS, pourquoi ne pas l'installation d'une exception mapper, puis utilisez-le mappeur pour gérer la réponse.
Un exemple simple:
Ensuite, vous devez enregistrer le fournisseur dans le jaxrs servir en ajoutant:
dans la configuration du serveur dans le contexte. Avec cela, vous avez un accès complet à l'exception, et que vous pouvez obtenir ce que vous voulez d'elle.
Pour le savon, je pense que vous devez utiliser un intercepteur. Je n'étais pas toujours en mesure de comprendre exactement ce que je devais faire pour trouver du travail dans CXF du savon choses. Heureusement pour moi, il n'était pas vraiment un problème, mais jax-rs semble être beaucoup plus agréable.
Que faire si j'ai un scénario suivant. J'ai un intercepteur qui effectue une validation. Et j'ai un gestionnaire d'Exception. Si je veux lancer mon custom exception de l'intercepteur, mon gestionnaire d'exception est toResponse méthode-elle être invoquée?
Vous pouvez répondre sur cette question stackoverflow.com/questions/17079790/...
Si l'auto-scan (<jaxrs:l'adresse du serveur="/rs" basePackages="com.abc.service" />), aucune inscription requise.
OriginalL'auteur mjwenk