[
https://issues.apache.org/jira/browse/CAMEL-8185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14261538#comment-14261538
]
Andrew Block commented on CAMEL-8185:
-------------------------------------
Tested using both Karaf 2.4 and Fuse 6.1.1 (redhat-611412) using the
camel-archetype-scr with a similar configuration as described in this issue.
Successfully deployed to Karaf but threw identical exception in Fuse.
Diagnosed issue to be a potential class loading issue with SCR using bind
methods from an abstract class. When overriding methods in subclass and calling
super, context deployed successfully on both Fuse and Karaf without error.
> IllegalArgumentException: argument type mismatch
> ------------------------------------------------
>
> Key: CAMEL-8185
> URL: https://issues.apache.org/jira/browse/CAMEL-8185
> Project: Camel
> Issue Type: Bug
> Components: camel-scr
> Affects Versions: 2.15.0
> Reporter: Charles Moulliard
>
> When camel-scr (2.15-SNAPSHOT) is deployed and used with Apache Karaf -
> 2.3.0.redhat-611412
> The following errors are generated when SCR got the CamelComponent or lost
> the Component
> {code}
> 2014-12-26 11:13:49,453 | ERROR | r-1.0.0-thread-2 | osgi-camel-scr
> | ? ? | 255 -
> com.redhat.gpe.training.osgi-camel-scr - 1.0.0 |
> [com.redhat.gpe.training.osgi.camel.BootStrap(52)] The gotCamelComponent
> method has thrown an exception
> java.lang.IllegalArgumentException: argument type mismatch
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)[:1.7.0_51]
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)[:1.7.0_51]
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_51]
> at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_51]
> at
> org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:231)[82:org.apache.felix.scr:1.8.0.redhat-611412]
> at
> org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:39)[82:org.apache.felix.scr:1.8.0.redhat-611412]
> {code}
> {code}
> 2014-12-26 11:22:50,355 | ERROR | l Console Thread | osgi-camel-scr
> | ? ? | 255 -
> com.redhat.gpe.training.osgi-camel-scr - 1.0.0 |
> [com.redhat.gpe.training.osgi.camel.BootStrap(52)] The lostCamelComponent
> method has thrown an exception
> java.lang.IllegalArgumentException: argument type mismatch
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)[:1.7.0_51]
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)[:1.7.0_51]
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_51]
> at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_51]
> at
> org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:231)[82:org.apache.felix.scr:1.8.0.redhat-611412]
> at
> org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:39)[82:org.apache.felix.scr:1.8.0.redhat-611412]
> at
> org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:624)[82:org.apache.felix.scr:1.8.0.redhat-611412]
> at
> org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:508)[82:org.apache.felix.scr:1.8.0.redhat-611412]
> at
> org.apache.felix.scr.impl.helper.BindMethod.invoke(BindMethod.java:37)[82:org.apache.felix.scr:1.8.0.redhat-611412]
> at
> org.apache.felix.scr.impl.manager.DependencyManager.invokeUnbindMethod(DependencyManager.java:1711)[82:org.apache.felix.scr:1.8.0.redhat-611412]
> {code}
> Here is the code used as example :
> {code}
> import org.apache.camel.CamelContext;
> import org.apache.camel.RoutesBuilder;
> import org.apache.camel.scr.AbstractCamelRunner;
> import org.apache.camel.spi.ComponentResolver;
> import org.apache.felix.scr.annotations.*;
> import org.slf4j.Logger;
> import org.slf4j.LoggerFactory;
> import java.util.ArrayList;
> import java.util.List;
> @Component(label = BootStrap.COMPONENT_LABEL, description =
> BootStrap.COMPONENT_DESCRIPTION)
> @Properties({
> @Property(name = "camelContextId", value = "camel-scr-exercise"),
> @Property(name = "active", value = "true")
> })
> @References({
> @Reference(name = "camelComponent",referenceInterface =
> ComponentResolver.class,
> cardinality = ReferenceCardinality.MANDATORY_MULTIPLE, policy
> = ReferencePolicy.DYNAMIC,
> policyOption = ReferencePolicyOption.GREEDY, bind =
> "gotCamelComponent", unbind = "lostCamelComponent")
> })
> public class BootStrap extends AbstractCamelRunner {
> public static final String COMPONENT_LABEL = "bootstrap.CamelScrExercise";
> public static final String COMPONENT_DESCRIPTION = "This is the
> description for camel-scr-exercise.";
> public static final Logger LOGGER =
> LoggerFactory.getLogger(BootStrap.class);
> @Override
> protected List<RoutesBuilder> getRouteBuilders() {
> LOGGER.info("Load Camel Routes definition");
> List<RoutesBuilder> routesBuilders = new ArrayList<>();
> routesBuilders.add(new GreeterRoute());
> return routesBuilders;
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)