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