You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Pierre De Rop (JIRA)" <ji...@apache.org> on 2015/03/19 07:37:38 UTC
[jira] [Created] (FELIX-4832) ClassCastException with autoconfig
Iterable fields
Pierre De Rop created FELIX-4832:
------------------------------------
Summary: ClassCastException with autoconfig Iterable fields
Key: FELIX-4832
URL: https://issues.apache.org/jira/browse/FELIX-4832
Project: Felix
Issue Type: Bug
Components: Dependency Manager
Affects Versions: org.apache.felix.dependencymanager-r1
Reporter: Pierre De Rop
Assignee: Pierre De Rop
Priority: Critical
Fix For: org.apache.felix.dependencymanager-r2
When you configure a service dependency using auto configuration without specifying a field name and when there is a field in the component instance with a type that is assignable to an Iterable, but without a valid generic type, then a fatal class cast exception occurs.
For example, assuming we have the following Activator code:
{code}
dm.createComponent()
.setImplementation(Consumer.class)
.add(dm.createServiceDependency().setService(OtherService.class).setRequired(true));
{code}
and the following consumer, which has a valid "m_providers" field, but another "m_notInjectMe" field that must not be injected:
{code}
class Consumer {
// Auto injected
final Iterable<OtherService> m_providers = new ConcurrentLinkedQueue<>();
// should never be injected, but causes a class cast exception:
final List m_notInjectMe = new ArrayList();
...
}
{code}
Then the following exception occurs:
{code}
java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
at org.apache.felix.dm.impl.FieldUtil.mayInjectToIterable(FieldUtil.java:292)
at org.apache.felix.dm.impl.FieldUtil.mapField(FieldUtil.java:255)
at org.apache.felix.dm.impl.FieldUtil.injectDependencyField(FieldUtil.java:105)
at org.apache.felix.dm.impl.ComponentImpl.configureImplementation(ComponentImpl.java:1027)
at org.apache.felix.dm.impl.ComponentImpl.invokeAutoConfigDependencies(ComponentImpl.java:822)
at org.apache.felix.dm.impl.ComponentImpl.performTransition(ComponentImpl.java:543)
at org.apache.felix.dm.impl.ComponentImpl.handleChange(ComponentImpl.java:494)
at org.apache.felix.dm.impl.ComponentImpl.handleAdded(ComponentImpl.java:360)
at org.apache.felix.dm.impl.ComponentImpl.access$700(ComponentImpl.java:68)
at org.apache.felix.dm.impl.ComponentImpl$5.run(ComponentImpl.java:289)
at org.apache.felix.dm.impl.SerialExecutor.runTask(SerialExecutor.java:138)
at org.apache.felix.dm.impl.SerialExecutor.runTasks(SerialExecutor.java:120)
at org.apache.felix.dm.impl.SerialExecutor.execute(SerialExecutor.java:86)
at org.apache.felix.dm.impl.SerialExecutor.execute(SerialExecutor.java:105)
at org.apache.felix.dm.impl.ComponentImpl.handleEvent(ComponentImpl.java:284)
at org.apache.felix.dm.impl.ServiceDependencyImpl.addedService(ServiceDependencyImpl.java:256)
at org.apache.felix.dm.tracker.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1278)
at org.apache.felix.dm.tracker.ServiceTracker$Tracked$2.execute(ServiceTracker.java:1394)
at org.apache.felix.dm.tracker.ServiceTracker$Tracked$1.run(ServiceTracker.java:1191)
at org.apache.felix.dm.impl.SerialExecutor.runTask(SerialExecutor.java:138)
at org.apache.felix.dm.impl.SerialExecutor.runTasks(SerialExecutor.java:120)
at org.apache.felix.dm.impl.SerialExecutor.execute(SerialExecutor.java:86)
at org.apache.felix.dm.tracker.ServiceTracker$Tracked.serviceChangedHideAspects(ServiceTracker.java:1197)
at org.apache.felix.dm.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1052)
at org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:987)
at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:838)
at org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:545)
at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4547)
at org.apache.felix.framework.Felix.registerService(Felix.java:3521)
at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:348)
at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:322)
at com.alcatel.as.service.metering2.SimpleMonitorable$1.run(SimpleMonitorable.java:164)
at com.alcatel.as.service.concurrent.SerialExecutor.runTasks(SerialExecutor.java:64)
at com.alcatel.as.service.concurrent.SerialExecutor.execute(SerialExecutor.java:49)
at com.alcatel.as.service.metering2.SimpleMonitorable.start(SimpleMonitorable.java:159)
at com.alcatel.as.service.metering2.impl.MonitorableSystem.start(MonitorableSystem.java:166)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.felix.dm.impl.InvocationUtil.invokeMethod(InvocationUtil.java:112)
at org.apache.felix.dm.impl.InvocationUtil.invokeCallbackMethod(InvocationUtil.java:67)
at org.apache.felix.dm.impl.ComponentImpl.invokeCallbackMethod(ComponentImpl.java:923)
at org.apache.felix.dm.impl.ComponentImpl.invoke(ComponentImpl.java:893)
at org.apache.felix.dm.impl.ComponentImpl.performTransition(ComponentImpl.java:555)
at org.apache.felix.dm.impl.ComponentImpl.handleChange(ComponentImpl.java:494)
at org.apache.felix.dm.impl.ComponentImpl.startDependencies(ComponentImpl.java:662)
at org.apache.felix.dm.impl.ComponentImpl.performTransition(ComponentImpl.java:537)
at org.apache.felix.dm.impl.ComponentImpl.handleChange(ComponentImpl.java:494)
at org.apache.felix.dm.impl.ComponentImpl.access$500(ComponentImpl.java:68)
at org.apache.felix.dm.impl.ComponentImpl$3.run(ComponentImpl.java:227)
at org.apache.felix.dm.impl.SerialExecutor.runTask(SerialExecutor.java:138)
at org.apache.felix.dm.impl.SerialExecutor.runTasks(SerialExecutor.java:120)
at org.apache.felix.dm.impl.SerialExecutor.execute(SerialExecutor.java:86)
at org.apache.felix.dm.impl.SerialExecutor.execute(SerialExecutor.java:105)
at org.apache.felix.dm.impl.ComponentImpl.start(ComponentImpl.java:223)
at org.apache.felix.dm.impl.ComponentScheduler.add(ComponentScheduler.java:71)
at org.apache.felix.dm.DependencyManager.add(DependencyManager.java:173)
at com.alcatel.as.service.metering2.impl.Activator.init(Activator.java:56)
at org.apache.felix.dm.DependencyActivatorBase.start(DependencyActivatorBase.java:75)
at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:2223)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2141)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:977)
at com.alcatel.as.service.bundleinstaller.impl.BundleInstallerImpl$DeployedBundle.start(BundleInstallerImpl.java:961)
at com.alcatel.as.service.bundleinstaller.impl.BundleInstallerImpl.startBundles(BundleInstallerImpl.java:633)
at com.alcatel.as.service.bundleinstaller.impl.BundleInstallerImpl.frameworkEvent(BundleInstallerImpl.java:152)
at com.alcatel.as.service.bundleinstaller.impl.BundleInstallerImpl.start(BundleInstallerImpl.java:121)
at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:2223)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2141)
at org.apache.felix.framework.Felix.updateBundle(Felix.java:2481)
at org.apache.felix.framework.BundleImpl.update(BundleImpl.java:995)
at org.apache.felix.framework.BundleImpl.update(BundleImpl.java:982)
at com.alcatel.as.service.bundleinstaller.impl.BundleInstallerImpl.checkSelfUpdate(BundleInstallerImpl.java:202)
at com.alcatel.as.service.bundleinstaller.impl.BundleInstallerImpl.frameworkEvent(BundleInstallerImpl.java:139)
at org.apache.felix.framework.util.EventDispatcher.invokeFrameworkListenerCallback(EventDispatcher.java:880)
at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:830)
at org.apache.felix.framework.util.EventDispatcher.run(EventDispatcher.java:1143)
at org.apache.felix.framework.util.EventDispatcher.access$000(EventDispatcher.java:55)
at org.apache.felix.framework.util.EventDispatcher$1.run(EventDispatcher.java:102)
at java.lang.Thread.run(Thread.java:745)
{code}
This exception prevents the correct component activation.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)