Yes, you are correct. Didn't find any resources in the failing case. I
found the annotation scanning didn't work properly as expected. I am
debugging it. thanks.

Thanks & Best Regards

Austin (  周?杰/Yun Jie Zhou)
z/OS System Test and Performance, China System & Technology Lab
Tel: 86-10-82452455 Ext: 52455
Mobile: 13811310391
E-Mail: [email protected]



From:   Romain Manni-Bucau <[email protected]>
To:     "[email protected]" <[email protected]>
Cc:     Jesse L Farinacci <[email protected]>
Date:   08/05/2015 05:36 PM
Subject:        Re: Problem with override getClasses() and getSingletons() in
            subclass javax.ws.rs.core.Application



Hi

did you log the resources you found when it fails?

I guess you dont find the resources in the failling case.


Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau
> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
<http://www.tomitribe.com>

2015-08-05 10:37 GMT+02:00 Yun Jie Zhou <[email protected]>:

>
> Dear All,
>
> We use annotation scanning to discover Resouce classes defined in our
> application and override the getClasses() with it (we add self-defined
> annotation @DiscoerableResource to our Resource classes ).
> At meantime, we want to override getSingletons() to customize a JSON
> provider.  Then we got
> org.apache.cxf.service.factory.ServiceConstructionException, refer
> exception trace.
>
> If we don't override getSingletons() only override the getClasses(), the
> scanning method works fine. And the normal way of override  getClasses()
> (just add Resource.class to a Set) can work fine with the getSingletons()
> overriding.
> Anyone who know the reason why annotation scanning getClasses() cannot
> coexist with getSingletons() overriding? thanks.
>
> Code snippet:
> @Override
>   public Set<Class<?>> getClasses()
>   {
>     final Set<Class<?>> discoverableResources = new HashSet<Class<?>>();
>
>     try
>     {
>       final AnnotationDB db = new AnnotationDB();
>       db.scanArchives(ClasspathUrlFinder.findClassPaths(packageName));
>
>       final Set<String> discoverableResourceClasses =
db.getAnnotationIndex
> ()
>           .get(DiscoverableResource.class.getName());
>
>       if (discoverableResourceClasses != null)
>       {
>         for (final String discoverableResource :
> discoverableResourceClasses)
>         {
>           try
>           {
>             if (LOG.isLoggable(Level.FINE))
>             {
>               LOG.fine("Adding " + discoverableResource);
>             }
>
>             discoverableResources.add(classLoader
>                 .loadClass(discoverableResource));
>           }
>
>           catch (final ClassNotFoundException e)
>           {
>             LOG.warning(e.getMessage());
>             if (LOG.isLoggable(Level.INFO))
>             {
>               LOG.log(Level.INFO, e.getMessage(), e);
>             }
>           }
>         }
>       }
>     }
>
>     catch (final IOException e)
>     {
>       LOG.warning(e.getMessage());
>       if (LOG.isLoggable(Level.INFO))
>       {
>         LOG.log(Level.INFO, e.getMessage(), e);
>       }
>     }
>
>     return discoverableResources;
>   }
>
>   @Override
>   public Set<Object> getSingletons()
>   {
>     return Collections.singleton((Object) new JacksonJsonProvider(
>         new ObjectMapper()));
>   }
>
>
> Exception stacktrace:
> Aug 05, 2015 3:51:24 PM org.apache.cxf.jaxrs.AbstractJAXRSFactoryBean
> checkResources
> SEVERE: No resource classes found
> Aug 05, 2015 3:51:24 PM org.apache.openejb.observer.ObserverManager
> $MethodInvocation invoke
> SEVERE: error invoking
> org.apache.tomee.webservices.TomeeJaxRsService@c86d0239
> org.apache.cxf.service.factory.ServiceConstructionException
>         at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create
> (JAXRSServerFactoryBean.java:194)
>         at
> org.apache.openejb.server.cxf.rs.CxfRsHttpListener.deployApplication
> (CxfRsHttpListener.java:441)
>         at org.apache.openejb.server.rest.RESTService.deployApplication
> (RESTService.java:463)
>         at
> org.apache.openejb.server.rest.RESTService.afterApplicationCreated
> (RESTService.java:233)
>         at
> org.apache.tomee.webservices.TomeeJaxRsService.afterApplicationCreated
> (TomeeJaxRsService.java:53)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:76)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:607)
>         at org.apache.openejb.observer.ObserverManager
> $MethodInvocation.invoke(ObserverManager.java:399)
>         at
> org.apache.openejb.observer.ObserverManager$InvocationList.invoke
> (ObserverManager.java:514)
>         at org.apache.openejb.observer.ObserverManager.doFire
> (ObserverManager.java:110)
>         at org.apache.openejb.observer.ObserverManager.fireEvent
> (ObserverManager.java:99)
>         at org.apache.openejb.loader.SystemInstance.fireEvent
> (SystemInstance.java:134)
>         at org.apache.tomee.catalina.TomcatWebAppBuilder.afterStart
> (TomcatWebAppBuilder.java:1651)
>         at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent
> (GlobalListenerSupport.java:116)
>         at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent
> (LifecycleSupport.java:117)
>         at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent
> (LifecycleBase.java:90)
>         at org.apache.catalina.util.LifecycleBase.setStateInternal
> (LifecycleBase.java:402)
>         at org.apache.catalina.util.LifecycleBase.start
> (LifecycleBase.java:168)
>         at org.apache.catalina.core.ContainerBase.addChildInternal
> (ContainerBase.java:901)
>         at org.apache.catalina.core.ContainerBase.addChild
> (ContainerBase.java:877)
>         at org.apache.catalina.core.StandardHost.addChild
> (StandardHost.java:649)
>         at org.apache.catalina.startup.HostConfig.deployWAR
> (HostConfig.java:1083)
>         at org.apache.catalina.startup.HostConfig$DeployWar.run
> (HostConfig.java:1880)
>         at java.util.concurrent.Executors$RunnableAdapter.call
> (Executors.java:471)
>         at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:166)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker
> (ThreadPoolExecutor.java:1145)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:615)
>         at java.lang.Thread.run(Thread.java:781)
> Caused by: javax.ws.rs.WebApplicationException
>         at org.apache.cxf.jaxrs.AbstractJAXRSFactoryBean.checkResources
> (AbstractJAXRSFactoryBean.java:315)
>         at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create
> (JAXRSServerFactoryBean.java:144)
>         ... 30 more
>
> Thanks & Best Regards
>
> Austin (  周?杰/Yun Jie Zhou)
> z/OS System Test and Performance, China System & Technology Lab
> Tel: 86-10-82452455 Ext: 52455
> Mobile: 13811310391
> E-Mail: [email protected]

Reply via email to