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