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] [Resolved] (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 resolved FELIX-5729.
-------------------------------------
Resolution: Fixed
Fixed in rev 1814588
> 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)