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.

Reply via email to