You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Carsten Ziegeler (JIRA)" <ji...@apache.org> on 2017/11/08 15:20:00 UTC

[jira] [Assigned] (FELIX-5729) NoSuchFieldError when @Reference referenceInterface type different than field type

     [ https://issues.apache.org/jira/browse/FELIX-5729?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Carsten Ziegeler reassigned FELIX-5729:
---------------------------------------

    Assignee: Carsten Ziegeler

> NoSuchFieldError when @Reference referenceInterface type different than field type
> ----------------------------------------------------------------------------------
>
>                 Key: FELIX-5729
>                 URL: https://issues.apache.org/jira/browse/FELIX-5729
>             Project: Felix
>          Issue Type: Bug
>          Components: SCR Tooling
>            Reporter: Ioan-Cristian Linte
>            Assignee: Carsten Ziegeler
>            Priority: Minor
>             Fix For: maven-scr-plugin-1.26.0, scr ant task 1.18.0, scr generator 1.18.0, scr bnd plugin 1.8.2
>
>
> {{NoSuchFieldError}} is thrown when injecting dependencies for a component {{Foo}} that has a field {{bar}} of type {{T1}} with {{@Reference(referenceInterface = T2.class)}} and {{T2}} implements {{T1}}.
> This error is caused by the bind/unbind methods generated by maven-scr-plugin which have bytecode generated for get/set field {{bar}} operations with field descriptor of type {{T2}} instead of {{T1}}.
> Bytecode:
> {code:java}
> protected void bindBar(T2);
>     Code:
>        0: aload_0
>        1: aload_1
>        2: putfield      #95                 // Field bar:LT2;
>        5: return
>   protected void unbindBar(T2);
>     Code:
>        0: aload_0
>        1: getfield      #95                 // Field bar:LT2;
>        4: aload_1
>        5: if_acmpne     13
>        8: aload_0
>        9: aconst_null
>       10: putfield      #95                 // Field bar:LT2;
> {code}
> StackTrace:
> {noformat}
> The bindBar method has thrown an exception (java.lang.NoSuchFieldError: bar)
> java.lang.NoSuchFieldError: bar
> 	at Foo.bindBar(Foo.java)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:498)
> 	at org.apache.felix.scr.impl.inject.BaseMethod.invokeMethod(BaseMethod.java:224)
> 	at org.apache.felix.scr.impl.inject.BaseMethod.access$500(BaseMethod.java:39)
> 	at org.apache.felix.scr.impl.inject.BaseMethod$Resolved.invoke(BaseMethod.java:617)
> 	at org.apache.felix.scr.impl.inject.BaseMethod.invoke(BaseMethod.java:501)
> 	at org.apache.felix.scr.impl.inject.BindMethod.invoke(BindMethod.java:655)
> 	at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:1722)
> 	at org.apache.felix.scr.impl.manager.DependencyManager.open(DependencyManager.java:1556)
> 	at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:261)
> 	at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:109)
> 	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:906)
> 	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:879)
> 	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:823)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)