[ 
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)

Reply via email to