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.JAXRSServerFactoryBeanDefinitionParser$SpringJAXRSServerFact
oryBean--1917449182,org.apache.cxf.jaxws.EndpointImpl--1050608923,org.apache.cxf.jaxws.EndpointImpl--880314741,wsExcepti
onInterceptorAspect,org.springframework.aop.config.internalAutoProxyCreator,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.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireC
apableBeanFactory.java:1338)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCap
ableBeanFactory.java:473)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBea
nFactory.java:409)
        at java.security.AccessController.doPrivileged(Native Method)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapab
leBeanFactory.java:380)
        at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
        at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegis
try.java:222)
        at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
        at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
        at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
        at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListable
BeanFactory.java:429)
        at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplic
ationContext.java:728)
        at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
        at
org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
        at
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
        at
org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
        at
org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java: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(LifecycleSupport.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(DelegatingMethodAccessorImpl.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.java: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(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractA
utowireCapableBeanFactory.java:1414)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowi
reCapableBeanFactory.java:1375)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.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(UnsafeObjectFieldAccessorImpl.java:57)
        at java.lang.reflect.Field.set(Field.java:656)
        at
org.apache.cxf.common.injection.ResourceInjector.injectField(ResourceInjector.java:283)
        at
org.apache.cxf.common.injection.ResourceInjector.visitField(ResourceInjector.java:167)
        at
org.apache.cxf.common.annotation.AnnotationProcessor.processFields(AnnotationProcessor.java:101)
        at
org.apache.cxf.common.annotation.AnnotationProcessor.processFields(AnnotationProcessor.java:95)
        at
org.apache.cxf.common.annotation.AnnotationProcessor.accept(AnnotationProcessor.java:69)
        at
org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector.java:81)
        at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.injectResources(JaxWsServerFactoryBean.java:221)
        at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.init(JaxWsServerFactoryBean.java: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-REST-client%2C-can-exception-be-wrapped-up-or-filtered-out-or-AOP-intercepted--tp26379915p26379915.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to