Hello Sergey, Thank you for your reply. I tried both cases before posting this message and i both cases, I did not reach any breakpoint (in debug mode) I had put in my ExceptionMappers
Regards, Xavier Sergey Beryozkin wrote: > > Hi Xavier > > I'm finishing some DOSGI JAX-RS work so I will run the tests tomorrow > morning at the latest. Just one question, before I try to do a test : > > what happens if you only have a base AuthenticationExceptionMapper ? Does > it catch ForbiddenLGOException ? > what happens if you remove AuthenticationExceptionMapper ? Does > ForbiddenLGOExceptionmapper catch ForbiddenLGOExceptions in this case ? > > thanks, Sergey > > > Xavier wrote: >> >> Hello, >> >> I've been facing the following issue for the last two days and I can't >> find that's wrong with my config (using CXF 2.2.3 with Spring 2.5) : >> >> I have regsitered 2 ExceptionMappers that should intercept some custom >> checked exceptions that my service bean may throw. These exceptions are >> authentication related. For now, the Exception Mappers are not called, >> and on the browser side, I get 500 errors pages with (ugly) stacktraces, >> instead of 403 errors pages with a custom message. >> I'd like to use the exception mappers to be able to handle any king of >> exceptions (those checked exceptions and later any other runtime >> exception with custom messages), instead of having try/catch blocks >> everywhere with WebApplicationException wrappers. Code would remain >> cleaner and lighter ;-) >> >> Here are my config files and classes: >> >> web.xml: >> <?xml version="1.0" encoding="UTF-8"?> >> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xmlns="http://java.sun.com/xml/ns/javaee" >> xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee >> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >> id="WebApp_ID" version="2.5"> >> >> <context-param> >> <param-name>contextConfigLocation</param-name> >> <param-value>classpath*:META-INF/spring*Context.xml</param-value> >> </context-param> >> >> <listener> >> >> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> >> </listener> >> >> <servlet> >> <display-name>CXF Servlet</display-name> >> <servlet-name>CXFServlet</servlet-name> >> >> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> >> <load-on-startup>1</load-on-startup> >> </servlet> >> >> <servlet-mapping> >> <servlet-name>CXFServlet</servlet-name> >> <url-pattern>/*</url-pattern> >> </servlet-mapping> >> >> >> </web-app> >> >> >> >> spring config file (named springCXFContext.xml): >> >> <?xml version="1.0" encoding="UTF-8"?> >> <beans xmlns="http://www.springframework.org/schema/beans" >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xmlns:context="http://www.springframework.org/schema/context" >> xmlns:jaxrs="http://cxf.apache.org/jaxrs" >> xmlns:cxf="http://cxf.apache.org/core" >> xsi:schemaLocation=" >> http://www.springframework.org/schema/beans >> http://www.springframework.org/schema/beans/spring-beans.xsd >> http://www.springframework.org/schema/context >> http://www.springframework.org/schema/context/spring-context-2.5.xsd >> http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd >> http://cxf.apache.org/core http://cxf.apache.org/schemascore.xsd"> >> >> <import resource="classpath:META-INF/cxf/cxf.xml" /> >> <import >> resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" /> >> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> >> >> >> >> <jaxrs:server id="alertesService" address="/"> >> <jaxrs:features> >> <cxf:logging /> >> </jaxrs:features> >> >> <jaxrs:serviceBeans> >> <ref bean="alertesServiceBean" /> >> </jaxrs:serviceBeans> >> <jaxrs:providers > >> <bean class="org.apache.cxf.jaxrs.provider.AtomFeedProvider" /> >> <ref bean="forbiddenOfficineExceptionMapper" /> >> <ref bean="forbiddenLGOExceptionMapper" /> >> <ref bean="genericFaultResponseExceptionMapper" /> >> </jaxrs:providers> >> </jaxrs:server> >> >> >> >> <bean id="alertesServiceBean" class="x.y.z.AlertesService" /> >> <bean id="forbiddenOfficineExceptionMapper" >> class="x.y.z.provider.ForbiddenOfficineExceptionMapper" /> >> <bean id="forbiddenLGOExceptionMapper" >> class="x.y.z.provider.ForbiddenLGOExceptionMapper" /> >> <bean id="authenticationExceptionMapper" >> class="x.y.z.provider.AuthenticationExceptionMapper" /> >> <bean id="genericFaultResponseExceptionMapper" >> class="x.y.z.provider.GenericFaultResponseExceptionMapper" /> >> >> </beans> >> >> >> Code for ForbiddenOfficineExceptionMapper : >> >> @Provider >> public class ForbiddenOfficineExceptionMapper implements >> ExceptionMapper<ForbiddenOfficineException> { >> >> public Response toResponse(ForbiddenOfficineException e) { >> return >> Response.status(403).type(MediaType.TEXT_PLAIN).entity("...").build(); >> } >> } >> >> >> Code (snippet)for AlertesServiceBean : >> >> @GET >> @Path("/{finess}/heartbeat") >> @Produces("text/plain") >> @Transactional(readOnly = true) >> public Response heartbeat(@PathParam("finess") String codeFiness, >> @Context UriInfo ui, @Context HttpHeaders headers) >> throws >> AuthenticationException >> { ... } >> >> (AuthenticationException is the super class of >> ForbiddenOfficineException) >> >> >> BTW, some console messages (running on tomcat 6): >> >> 25 août 2009 16:50:30 org.apache.tomcat.util.digester.SetPropertiesRule >> begin >> ATTENTION: [SetPropertiesRule]{Server/Service/Engine/Host/Context} >> Setting property 'source' to >> 'org.eclipse.jst.j2ee.server:DP-ServicesAnnexes-WS' did not find a >> matching property. >> 25 août 2009 16:50:30 org.apache.catalina.core.AprLifecycleListener init >> INFO: Loaded APR based Apache Tomcat Native library 1.1.14. >> 25 août 2009 16:50:30 org.apache.catalina.core.AprLifecycleListener init >> INFO: APR capabilities: IPv6 [false], sendfile [true], accept filters >> [false], random [true]. >> 25 août 2009 16:50:31 org.apache.coyote.http11.Http11AprProtocol init >> INFO: Initialisation de Coyote HTTP/1.1 sur http-8080 >> 25 août 2009 16:50:31 org.apache.coyote.ajp.AjpAprProtocol init >> INFO: Initializing Coyote AJP/1.3 on ajp-8009 >> 25 août 2009 16:50:31 org.apache.catalina.startup.Catalina load >> INFO: Initialization processed in 2603 ms >> 25 août 2009 16:50:32 org.apache.catalina.core.StandardService start >> INFO: D�marrage du service Catalina >> 25 août 2009 16:50:32 org.apache.catalina.core.StandardEngine start >> INFO: Starting Servlet Engine: Apache Tomcat/6.0.18 >> 25 août 2009 16:50:35 org.apache.catalina.core.ApplicationContext log >> INFO: Initializing Spring root WebApplicationContext >> ehcache configuration for cache named >> [org.hibernate.cache.StandardQueryCache]; using defaults. >> 25 août 2009 16:51:24 org.apache.cxf.endpoint.ServerImpl initDestination >> INFO: Setting the server's publish address to be / >> 25 août 2009 16:51:25 org.apache.cxf.transport.servlet.CXFServlet >> updateContext >> INFO: Load the bus with application context >> Console> 2009-08-25 16:51:25|INFO || >> AbstractApplicationContext.prepareRefresh |Refreshing >> org.apache.cxf.bus.spring.busapplicationcont...@17ef0a7: display name >> [org.apache.cxf.bus.spring.busapplicationcont...@17ef0a7]; startup date >> [Tue Aug 25 16:51:25 CEST 2009]; parent: >> org.springframework.web.context.support.xmlwebapplicationcont...@15e0c2b >> 25 août 2009 16:51:25 org.apache.cxf.bus.spring.BusApplicationContext >> getConfigResources >> INFO: No cxf.xml configuration file detected, relying on defaults. >> Console> 2009-08-25 16:51:25|INFO || >> AbstractApplicationContext.obtainFreshBeanFactory |Bean factory for >> application context >> [org.apache.cxf.bus.spring.busapplicationcont...@17ef0a7]: >> org.springframework.beans.factory.support.defaultlistablebeanfact...@32835b >> Console> 2009-08-25 16:51:25|DEBUG|| >> AbstractApplicationContext.obtainFreshBeanFactory |0 beans defined in >> org.apache.cxf.bus.spring.busapplicationcont...@17ef0a7: display name >> [org.apache.cxf.bus.spring.busapplicationcont...@17ef0a7]; startup date >> [Tue Aug 25 16:51:25 CEST 2009]; parent: >> org.springframework.web.context.support.xmlwebapplicationcont...@15e0c2b >> Console> 2009-08-25 16:51:25|DEBUG|| >> AbstractApplicationContext.initMessageSource |Unable to locate >> MessageSource with name 'messageSource': using default >> [org.springframework.context.support.delegatingmessagesou...@146ccac] >> Console> 2009-08-25 16:51:25|DEBUG|| >> AbstractApplicationContext.initApplicationEventMulticaster |Unable to >> locate ApplicationEventMulticaster with name >> 'applicationEventMulticaster': using default >> [org.springframework.context.event.simpleapplicationeventmulticas...@1274873] >> Console> 2009-08-25 16:51:25|DEBUG|| >> AbstractApplicationContext.publishEvent |Publishing event in context >> [org.apache.cxf.bus.spring.busapplicationcont...@17ef0a7]: >> org.springframework.context.event.contextrefreshedevent[source=org.apache.cxf.bus.spring.busapplicationcont...@17ef0a7: >> display name [org.apache.cxf.bus.spring.busapplicationcont...@17ef0a7]; >> startup date [Tue Aug 25 16:51:25 CEST 2009]; parent: >> org.springframework.web.context.support.xmlwebapplicationcont...@15e0c2b] >> 25 août 2009 16:51:25 org.apache.cxf.transport.servlet.AbstractCXFServlet >> replaceDestinationFactory >> INFO: Servlet transport factory already registered >> 25 août 2009 16:51:26 org.apache.coyote.http11.Http11AprProtocol start >> INFO: D�marrage de Coyote HTTP/1.1 sur http-8080 >> 25 août 2009 16:51:26 org.apache.coyote.ajp.AjpAprProtocol start >> INFO: Starting Coyote AJP/1.3 on ajp-8009 >> 25 août 2009 16:51:26 org.apache.catalina.startup.Catalina start >> INFO: Server startup in 54687 ms >> 25 août 2009 16:51:40 org.apache.cxf.interceptor.LoggingInInterceptor >> logging >> INFO: Inbound Message >> ... >> [spring, hibernate and auth stuff occur here] >> ... >> >> 25 août 2009 16:51:48 org.apache.cxf.phase.PhaseInterceptorChain >> doIntercept >> INFO: Application has thrown exception, unwinding now: >> dp.servicesannexes.exception.ForbiddenOfficineException: L'officine n'est >> pas encore active >> 25 août 2009 16:51:49 org.apache.cxf.phase.PhaseInterceptorChain >> doIntercept >> INFO: Application has thrown exception, unwinding now: >> dp.servicesannexes.exception.ForbiddenOfficineException: L'officine n'est >> pas encore active >> 25 août 2009 16:51:49 org.apache.cxf.phase.PhaseInterceptorChain unwind >> ATTENTION: Exception in handleFault on interceptor >> org.apache.cxf.binding.xml.interceptor.xmlfaultoutintercep...@db19d3 >> org.apache.cxf.interceptor.Fault: L'officine n'est pas encore active >> at >> org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:148) >> at >> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:114) >> at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:118) >> at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:78) >> at >> org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) >> at >> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417) >> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269) >> at java.util.concurrent.FutureTask.run(FutureTask.java:123) >> at >> org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37) >> at >> org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:98) >> at >> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236) >> at >> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:104) >> at >> org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:99) >> at >> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:452) >> at >> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:159) >> at >> org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:220) >> at >> org.apache.cxf.transport.servlet.AbstractCXFServlet.doGet(AbstractCXFServlet.java:158) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) >> at >> org.apache.cxf.transport.servlet.AbstractCXFServlet.service(AbstractCXFServlet.java:211) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> at >> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) >> at >> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) >> at >> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) >> at >> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) >> at >> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) >> at >> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) >> at >> org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:857) >> at >> org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565) >> at >> org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509) >> at java.lang.Thread.run(Thread.java:595) >> Caused by <root cause> >> >> >> Any idea why the exception is not caught by the registered >> ExceptionMapper ? >> >> Thank you in advance >> Regards, >> Xavier >> > > -- View this message in context: http://www.nabble.com/-JAXRS--ExceptionMappers-not-called-tp25136326p25138588.html Sent from the cxf-user mailing list archive at Nabble.com.
