Thanks for your reply. I found a bug in the annotation scanning processing,
I fixed it.

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:   Jean-Louis Monteiro <[email protected]>
To:     [email protected]
Cc:     Jesse L Farinacci <[email protected]>
Date:   08/05/2015 10:15 PM
Subject:        Re: Problem with override getClasses() and getSingletons() in
            subclass javax.ws.rs.core.Application



Hi,

Do you mind creating a small example to reproduce and share it on Github or
so?

Thanks
JLouis

--
Jean-Louis Monteiro
http://twitter.com/jlouismonteiro
http://www.tomitribe.com

On Wed, Aug 5, 2015 at 1:37 AM, Yun Jie Zhou <[email protected]> wrote:

>
> 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