You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Xavier <xc...@gmail.com> on 2009/08/25 17:13:18 UTC

[JAXRS] ExceptionMappers not called

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.BusApplicationContext@17ef0a7: display name
[org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7]; startup date [Tue
Aug 25 16:51:25 CEST 2009]; parent:
org.springframework.web.context.support.XmlWebApplicationContext@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.BusApplicationContext@17ef0a7]:
org.springframework.beans.factory.support.DefaultListableBeanFactory@32835b
Console> 2009-08-25 16:51:25|DEBUG||
AbstractApplicationContext.obtainFreshBeanFactory |0 beans defined in
org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7: display name
[org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7]; startup date [Tue
Aug 25 16:51:25 CEST 2009]; parent:
org.springframework.web.context.support.XmlWebApplicationContext@15e0c2b
Console> 2009-08-25 16:51:25|DEBUG||
AbstractApplicationContext.initMessageSource |Unable to locate MessageSource
with name 'messageSource': using default
[org.springframework.context.support.DelegatingMessageSource@146ccac]
Console> 2009-08-25 16:51:25|DEBUG||
AbstractApplicationContext.initApplicationEventMulticaster |Unable to locate
ApplicationEventMulticaster with name 'applicationEventMulticaster': using
default
[org.springframework.context.event.SimpleApplicationEventMulticaster@1274873]
Console> 2009-08-25 16:51:25|DEBUG|| AbstractApplicationContext.publishEvent
|Publishing event in context
[org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7]:
org.springframework.context.event.ContextRefreshedEvent[source=org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7:
display name [org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7];
startup date [Tue Aug 25 16:51:25 CEST 2009]; parent:
org.springframework.web.context.support.XmlWebApplicationContext@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.XMLFaultOutInterceptor@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-tp25136326p25136326.html
Sent from the cxf-user mailing list archive at Nabble.com.


Re: [JAXRS] ExceptionMappers not called

Posted by Sergey Beryozkin <se...@iona.com>.
I have it fixed on the trunk so if for whatever reasons the providers have
been proxified then it will still work as expected

cheers, Sergey

Sergey Beryozkin-2 wrote:
> 
> Hi Xavier
> 
> I was about to start looking into it....(and in to some other open user
> queries).
> Thanks a lot for helping me - I'd spend a lot of time on it trying to
> reproduce the issue otherwise :-)...
> 
>>
>> Hello Sergey,
>>
>> Well, as I wanted to help you identify the problem this morning, I
>> quickly
>> setup up a sample project with 1 service bean that throws CustomException
>> or
>> CustomRuntimeException for a given {id}.
>> I added ExceptionMappers for those 2 custom exceptions, tested the whole
>> application (quickly, with my browser), and found that it worked!
>>
>> Step by step, I removed layers of my webapp (based on CXF + Spring +
>> Hibernate) and finally identified that the problem was in the AOP aspects
>> a
>> team member had configured in a sub module...
>> The tx aspects weaved almost every beans, including my jaxrs service bean
>> :-(
>>
>> I guess there must have been some kind of confusion between the CXF bus
>> and
>> the AOP proxy when an exception was thrown...
> 
> Hmm... I'll look into it. It is probably not a bug that a CXF does not
> recognize an AOP-weaved ExceptionMapper - but may be it 
> should - I'll see if I can enhance the providers registraion code a bit...
> 
> thanks, Sergey
> 
>>
>> Sorry if you lost some time trying to figure out what the problem was and
>> thank you very much for this great product !
>>
>> Regards
>> Xavier
>>
>>
>>
>>
>>
>>
>> Xavier wrote:
>>>
>>> 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
>>>
>>>
>>>
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/-JAXRS--ExceptionMappers-not-called-tp25136326p25149135.html
>> Sent from the cxf-user mailing list archive at Nabble.com.
>> 
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/-JAXRS--ExceptionMappers-not-called-tp25136326p25151444.html
Sent from the cxf-user mailing list archive at Nabble.com.


Re: [JAXRS] ExceptionMappers not called

Posted by Sergey Beryozkin <sb...@progress.com>.
Hi Xavier

I was about to start looking into it....(and in to some other open user queries).
Thanks a lot for helping me - I'd spend a lot of time on it trying to reproduce the issue otherwise :-)...

>
> Hello Sergey,
>
> Well, as I wanted to help you identify the problem this morning, I quickly
> setup up a sample project with 1 service bean that throws CustomException or
> CustomRuntimeException for a given {id}.
> I added ExceptionMappers for those 2 custom exceptions, tested the whole
> application (quickly, with my browser), and found that it worked!
>
> Step by step, I removed layers of my webapp (based on CXF + Spring +
> Hibernate) and finally identified that the problem was in the AOP aspects a
> team member had configured in a sub module...
> The tx aspects weaved almost every beans, including my jaxrs service bean
> :-(
>
> I guess there must have been some kind of confusion between the CXF bus and
> the AOP proxy when an exception was thrown...

Hmm... I'll look into it. It is probably not a bug that a CXF does not recognize an AOP-weaved ExceptionMapper - but may be it 
should - I'll see if I can enhance the providers registraion code a bit...

thanks, Sergey

>
> Sorry if you lost some time trying to figure out what the problem was and
> thank you very much for this great product !
>
> Regards
> Xavier
>
>
>
>
>
>
> Xavier wrote:
>>
>> 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
>>
>>
>>
>
> -- 
> View this message in context: http://www.nabble.com/-JAXRS--ExceptionMappers-not-called-tp25136326p25149135.html
> Sent from the cxf-user mailing list archive at Nabble.com.
> 


Re: [JAXRS] ExceptionMappers not called

Posted by Xavier <xc...@gmail.com>.
Hello Sergey,

Well, as I wanted to help you identify the problem this morning, I quickly
setup up a sample project with 1 service bean that throws CustomException or
CustomRuntimeException for a given {id}. 
I added ExceptionMappers for those 2 custom exceptions, tested the whole
application (quickly, with my browser), and found that it worked! 

Step by step, I removed layers of my webapp (based on CXF + Spring +
Hibernate) and finally identified that the problem was in the AOP aspects a
team member had configured in a sub module... 
The tx aspects weaved almost every beans, including my jaxrs service bean
:-( 

I guess there must have been some kind of confusion between the CXF bus and
the AOP proxy when an exception was thrown...

Sorry if you lost some time trying to figure out what the problem was and
thank you very much for this great product !

Regards
Xavier






Xavier wrote:
> 
> 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
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/-JAXRS--ExceptionMappers-not-called-tp25136326p25149135.html
Sent from the cxf-user mailing list archive at Nabble.com.


Re: [JAXRS] ExceptionMappers not called

Posted by Xavier <xc...@gmail.com>.
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.BusApplicationContext@17ef0a7: display name
>> [org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7]; startup date
>> [Tue Aug 25 16:51:25 CEST 2009]; parent:
>> org.springframework.web.context.support.XmlWebApplicationContext@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.BusApplicationContext@17ef0a7]:
>> org.springframework.beans.factory.support.DefaultListableBeanFactory@32835b
>> Console> 2009-08-25 16:51:25|DEBUG||
>> AbstractApplicationContext.obtainFreshBeanFactory |0 beans defined in
>> org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7: display name
>> [org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7]; startup date
>> [Tue Aug 25 16:51:25 CEST 2009]; parent:
>> org.springframework.web.context.support.XmlWebApplicationContext@15e0c2b
>> Console> 2009-08-25 16:51:25|DEBUG||
>> AbstractApplicationContext.initMessageSource |Unable to locate
>> MessageSource with name 'messageSource': using default
>> [org.springframework.context.support.DelegatingMessageSource@146ccac]
>> Console> 2009-08-25 16:51:25|DEBUG||
>> AbstractApplicationContext.initApplicationEventMulticaster |Unable to
>> locate ApplicationEventMulticaster with name
>> 'applicationEventMulticaster': using default
>> [org.springframework.context.event.SimpleApplicationEventMulticaster@1274873]
>> Console> 2009-08-25 16:51:25|DEBUG||
>> AbstractApplicationContext.publishEvent |Publishing event in context
>> [org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7]:
>> org.springframework.context.event.ContextRefreshedEvent[source=org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7:
>> display name [org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7];
>> startup date [Tue Aug 25 16:51:25 CEST 2009]; parent:
>> org.springframework.web.context.support.XmlWebApplicationContext@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.XMLFaultOutInterceptor@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.


Re: [JAXRS] ExceptionMappers not called

Posted by Sergey Beryozkin <se...@iona.com>.
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.BusApplicationContext@17ef0a7: display name
> [org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7]; startup date
> [Tue Aug 25 16:51:25 CEST 2009]; parent:
> org.springframework.web.context.support.XmlWebApplicationContext@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.BusApplicationContext@17ef0a7]:
> org.springframework.beans.factory.support.DefaultListableBeanFactory@32835b
> Console> 2009-08-25 16:51:25|DEBUG||
> AbstractApplicationContext.obtainFreshBeanFactory |0 beans defined in
> org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7: display name
> [org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7]; startup date
> [Tue Aug 25 16:51:25 CEST 2009]; parent:
> org.springframework.web.context.support.XmlWebApplicationContext@15e0c2b
> Console> 2009-08-25 16:51:25|DEBUG||
> AbstractApplicationContext.initMessageSource |Unable to locate
> MessageSource with name 'messageSource': using default
> [org.springframework.context.support.DelegatingMessageSource@146ccac]
> Console> 2009-08-25 16:51:25|DEBUG||
> AbstractApplicationContext.initApplicationEventMulticaster |Unable to
> locate ApplicationEventMulticaster with name
> 'applicationEventMulticaster': using default
> [org.springframework.context.event.SimpleApplicationEventMulticaster@1274873]
> Console> 2009-08-25 16:51:25|DEBUG||
> AbstractApplicationContext.publishEvent |Publishing event in context
> [org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7]:
> org.springframework.context.event.ContextRefreshedEvent[source=org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7:
> display name [org.apache.cxf.bus.spring.BusApplicationContext@17ef0a7];
> startup date [Tue Aug 25 16:51:25 CEST 2009]; parent:
> org.springframework.web.context.support.XmlWebApplicationContext@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.XMLFaultOutInterceptor@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-tp25136326p25138455.html
Sent from the cxf-user mailing list archive at Nabble.com.