>From my understanding you basically want a centralised place to handle exceptions and a way to control what is returned to the client? We use an exception mapper which receives all possible exceptions and you can then return the desired response object based on the exception. We have a many to one mapping between exceptions and the status codes we return in XML format and are able to handle all exceptions ensuring that not undesired responses get sent back to the client.
Have a look at http://cwiki.apache.org/CXF20DOC/jax-rs.html#JAX-RS-Exceptionhandling -----Original Message----- From: vickatvuuch [mailto:[email protected]] Sent: Tuesday, 17 November 2009 9:30 AM To: [email protected] Subject: CXF jaxrs REST exception stack trace propagated to REST client, can exception be wrapped up or filtered out or AOP intercepted? Hi All, Is there a way to Not propagate unchecked exception stack traces back to the client? Use case: I have a port, that expects certain parameters, if one of them is null it may throw unchecked IllegalArgumentException, which could be rectified if it was all under my control. Imagine that other team members adding new ports and not wrapping it up completely. What I wanted was to have a way to control what goes out to the client hopefully in one place. For instance I have defined WSBaseException from which all other WS layer exceptions should be derived and thrown out of the WS layer (annotated with WebFault). First thing I did, I tried try AOP "after-throwing" pointcut, which is where I was hoping to intercept all outgoing exceptions and wrap them up in the WSBaseException for anything that would come out unless it was already WSBaseException, but that didn't work, still debugging why it fails, btw AOP config and exception is below: But my question is mostly about how to do this without extra AOP, does CXF has a way of dealing with this situation already, may be I'm missing something? Thanks, -Vitaly <bean id="wsExceptionInterceptorAspect" class="com.foo.webservices.v1.WSExceptionTranslator"/> <aop:config> <aop:pointcut id="wsServiceOperation" expression="execution(* com.foo.webservices.v1.ports.auth.MyServiceImpl*.(..))"/> <aop:aspect id="wsAfterThrowing" ref="wsExceptionInterceptorAspect"> <aop:after-throwing pointcut-ref="wsServiceOperation" throwing="exception" method="afterThrowing"/> </aop:aspect> </aop:config> The above blows up on server startup, when it is loading the Imlp on which I have a pointcut: jaxws.EndpointImpl---1853031827,org.apache.cxf.jaxrs.spring.JAXRSServerFac toryBeanDefinitionParser$SpringJAXRSServerFact oryBean--1917449182,org.apache.cxf.jaxws.EndpointImpl--1050608923,org.apac he.cxf.jaxws.EndpointImpl--880314741,wsExcepti onInterceptorAspect,org.springframework.aop.config.internalAutoProxyCreato r,wsServiceOperation,org.springframework.aop.a spectj.AspectJPointcutAdvisor#0]; root of factory hierarchy - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.cxf.jaxws.EndpointImp l---1687321673': Invocation of init method failed; nested exception is javax.xml.ws.WebServiceException: Creation of End point failed at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto ry.initializeBean(AbstractAutowireC apableBeanFactory.java:1338) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto ry.doCreateBean(AbstractAutowireCap ableBeanFactory.java:473) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto ry$1.run(AbstractAutowireCapableBea nFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto ry.createBean(AbstractAutowireCapab leBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject( AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.get Singleton(DefaultSingletonBeanRegis try.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(Ab stractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Abst ractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Abst ractBeanFactory.java:164) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preIn stantiateSingletons(DefaultListable BeanFactory.java:429) at org.springframework.context.support.AbstractApplicationContext.finishBeanF actoryInitialization(AbstractApplic ationContext.java:728) at org.springframework.context.support.AbstractApplicationContext.refresh(Abs tractApplicationContext.java:380) at org.springframework.web.context.ContextLoader.createWebApplicationContext( ContextLoader.java:255) at org.springframework.web.context.ContextLoader.initWebApplicationContext(Co ntextLoader.java:199) at org.springframework.web.context.ContextLoaderListener.contextInitialized(C ontextLoaderListener.java:45) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.jav a:3934) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java :791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:850) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:724) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:493) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupp ort.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:722) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:583) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorIm pl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) Caused by: javax.xml.ws.WebServiceException: Creation of Endpoint failed at org.apache.cxf.jaxws.JaxWsServerFactoryBean.init(JaxWsServerFactoryBean.ja va:181) at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean. java:168) at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:346) at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:259) at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:209) at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:404) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorIm pl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto ry.invokeCustomInitMethod(AbstractA utowireCapableBeanFactory.java:1414) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto ry.invokeInitMethods(AbstractAutowi reCapableBeanFactory.java:1375) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto ry.initializeBean(AbstractAutowireC apableBeanFactory.java:1335) ... 39 more Caused by: java.lang.IllegalArgumentException at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java :37) at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImp l.java:57) at java.lang.reflect.Field.set(Field.java:656) at org.apache.cxf.common.injection.ResourceInjector.injectField(ResourceInjec tor.java:283) at org.apache.cxf.common.injection.ResourceInjector.visitField(ResourceInject or.java:167) at org.apache.cxf.common.annotation.AnnotationProcessor.processFields(Annotat ionProcessor.java:101) at org.apache.cxf.common.annotation.AnnotationProcessor.processFields(Annotat ionProcessor.java:95) at org.apache.cxf.common.annotation.AnnotationProcessor.accept(AnnotationProc essor.java:69) at org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.j ava:81) at org.apache.cxf.jaxws.JaxWsServerFactoryBean.injectResources(JaxWsServerFac toryBean.java:221) at org.apache.cxf.jaxws.JaxWsServerFactoryBean.init(JaxWsServerFactoryBean.ja va:175) ... 51 more Nov 16, 2009 5:23:23 PM org.apache.catalina.core.StandardContext start -- View this message in context: http://old.nabble.com/CXF-jaxrs-REST-exception-stack-trace-propagated-to-R EST-client%2C-can-exception-be-wrapped-up-or-filtered-out-or-AOP-intercept ed--tp26379915p26379915.html Sent from the cxf-user mailing list archive at Nabble.com.
