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]