You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by Yun Jie Zhou <yu...@cn.ibm.com> on 2015/08/05 10:37:50 UTC

Problem with override getClasses() and getSingletons() in subclass javax.ws.rs.core.Application

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: yunjiez@cn.ibm.com

Re: Problem with override getClasses() and getSingletons() in subclass javax.ws.rs.core.Application (solved)

Posted by Yun Jie Zhou <yu...@cn.ibm.com>.
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: yunjiez@cn.ibm.com



From:	Jean-Louis Monteiro <jl...@tomitribe.com>
To:	users@tomee.apache.org
Cc:	Jesse L Farinacci <jl...@us.ibm.com>
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 <yu...@cn.ibm.com> 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: yunjiez@cn.ibm.com

Re: Problem with override getClasses() and getSingletons() in subclass javax.ws.rs.core.Application

Posted by Jean-Louis Monteiro <jl...@tomitribe.com>.
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 <yu...@cn.ibm.com> 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: yunjiez@cn.ibm.com

Re: Problem with override getClasses() and getSingletons() in subclass javax.ws.rs.core.Application

Posted by Yun Jie Zhou <yu...@cn.ibm.com>.
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: yunjiez@cn.ibm.com



From:	Romain Manni-Bucau <rm...@gmail.com>
To:	"users@tomee.apache.org" <us...@tomee.apache.org>
Cc:	Jesse L Farinacci <jl...@us.ibm.com>
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 <yu...@cn.ibm.com>:

>
> 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: yunjiez@cn.ibm.com

Re: Problem with override getClasses() and getSingletons() in subclass javax.ws.rs.core.Application

Posted by Romain Manni-Bucau <rm...@gmail.com>.
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 <yu...@cn.ibm.com>:

>
> 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: yunjiez@cn.ibm.com