[
https://issues.apache.org/jira/browse/CAMEL-8185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14262739#comment-14262739
]
ASF GitHub Bot commented on CAMEL-8185:
---------------------------------------
GitHub user sabre1041 opened a pull request:
https://github.com/apache/camel/pull/364
CAMEL-8185: Changed parameter of scr reference event methods
Modified the default bind/unbind scr reference method parameter from a
ComponentResolver to a ServiceReference to avoid the possibility of an argument
type mismatch exception. This can occur if multiple versions of Camel are
installed (such as JBoss Fuse 6.1) and have registered their own versions of
services within the OSGi ServiceRegistry.
Since these methods do not utilize the ComponentResolver themselves, moving
to a ServiceReference does not change the functionality of the component and
the end user can define bind/unbind methods of their own.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/sabre1041/camel CAMEL-8185
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/camel/pull/364.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #364
----
commit 1615d666854403e42d283f966bbeb767977ce7a7
Author: Andrew Block <[email protected]>
Date: 2015-01-02T02:29:59Z
CAMEL-8185: Changed parameter of scr reference event methods from service
interface to service reference to handle multiple service versions
----
> camel-scr - 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)