[ 
https://issues.apache.org/jira/browse/FELIX-5972?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16663915#comment-16663915
 ] 

Thomas Watson commented on FELIX-5972:
--------------------------------------

Thanks for providing the simple to setup and follow recreation scenario, very 
helpful!

I have tracked this down to an issue in bnd which I need to open an issue for.  
The class biz.aQute.resolve.BndResolver is doing something wrong with respect 
to the osgi.wiring.host namespace.  It appears they are creating multiple 
osgi.wiring.host capabilities for a single host resource.  This is wrong 
according to the javadoc for the [osgi.wiring.host 
namespace|https://osgi.org/javadoc/osgi.core/7.0.0/org/osgi/framework/namespace/HostNamespace.html]
 where it states:

A non-fragment resource with the with the osgi.bundle type identity provides 
zero or one† host capabilities. A fragment resource with the osgi.fragment type 
identity must not declare a host capability and must declare exactly one host 
requirement.

In this scenario they have one resource that provides 7 osgi.wiring.host 
capabilities!

Provide[osgi.wiring.host]\{bundle-version=6.0.1, 
osgi.wiring.host=org.apache.felix.framework}{}
Provide[osgi.wiring.host]\{bundle-version=6.0.1, 
osgi.wiring.host=system.bundle}{}
Provide[osgi.wiring.host]\{bundle-version=1.2.3, 
osgi.wiring.host=ch.qos.logback.classic}{}
Provide[osgi.wiring.host]\{bundle-version=1.2.3, 
osgi.wiring.host=ch.qos.logback.core}{}
Provide[osgi.wiring.host]\{bundle-version=1.7.25, osgi.wiring.host=slf4j.api}{}
Provide[osgi.wiring.host]\{bundle-version=1.2.0, 
osgi.wiring.host=org.apache.felix.log}{}
Provide[osgi.wiring.host]\{bundle-version=1.0.0, 
osgi.wiring.host=org.apache.felix.logback}{}

This ends up invalidating some assumptions the resolver makes with regard to a 
1-to-1 mapping between a resource and its host capability.

> prevent ArrayIndexOutOfBoundsException while resolving
> ------------------------------------------------------
>
>                 Key: FELIX-5972
>                 URL: https://issues.apache.org/jira/browse/FELIX-5972
>             Project: Felix
>          Issue Type: Bug
>          Components: Resolver
>            Reporter: Stefan Bischof
>            Priority: Major
>
> ***Describe the bug*
>  when resolving I got an java.lang.ArrayIndexOutOfBoundsException: -1
> it may cause the -runpath Instruction
> *To Reproduce*
>  push the resolve button at {{test.log/works.bndrun}} -> it resolves
>  push the resolve button at {{test.log/fail.bndrun}} -> Exception
>  the only diff is that there is one mor required bundle
> i tried so centralize all logging instructions
>  cnf/ext/logging.bnd
> provide an Example
>  Repo: {{[https://github.com/stbischof/logging/tree/master]}}
> Command:
> {code:java}
> java -jar biz.aQute.bnd-4.1.0.jar clean
> java -jar biz.aQute.bnd-4.1.0.jar _par
> java -jar biz.aQute.bnd-4.1.0.jar resolve resolve **/fail.bndrun 
> {code}
>  
> *Expected behavior*
>  it should resolve
> *Stacktrace*
>  
> {code:java}
> java.lang.ArrayIndexOutOfBoundsException: -1 000: Exception: 
> java.lang.ArrayIndexOutOfBoundsException: -1 at 
> java.util.ArrayList.elementData(ArrayList.java:422) at 
> java.util.ArrayList.set(ArrayList.java:450) at 
> org.apache.felix.resolver.util.ShadowList.replace(ShadowList.java:74) at 
> org.apache.felix.resolver.Candidates.prepare(Candidates.java:939) at 
> org.apache.felix.resolver.ResolverImpl.getInitialCandidates(ResolverImpl.java:547)
>  at org.apache.felix.resolver.ResolverImpl.doResolve(ResolverImpl.java:432) 
> at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:421) at 
> org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:375) at 
> biz.aQute.resolve.BndResolver.resolve(BndResolver.java:32) at 
> biz.aQute.resolve.ResolveProcess.resolveRequired(ResolveProcess.java:81) at 
> biz.aQute.resolve.ProjectResolver.resolve(ProjectResolver.java:105) at 
> biz.aQute.resolve.Bndrun.resolve(Bndrun.java:95) at 
> aQute.bnd.main.ResolveCommand._resolve(ResolveCommand.java:275) 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 
> aQute.lib.getopt.CommandLine.execute(CommandLine.java:150) at 
> aQute.lib.getopt.CommandLine.subCmd(CommandLine.java:624) at 
> aQute.bnd.main.bnd._resolve(bnd.java:4237) 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 
> aQute.lib.getopt.CommandLine.execute(CommandLine.java:150) at 
> aQute.bnd.main.bnd._bnd(bnd.java:444) 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 
> aQute.lib.getopt.CommandLine.execute(CommandLine.java:150) at 
> aQute.bnd.main.bnd.start(bnd.java:292) at 
> aQute.bnd.main.bnd.main(bnd.java:269) {code}
> **
>  
>  
> *Environment (please complete the following information):*
>  * bnd-Version: {{bndtools 4.2.0.2018.10.19.2218-SNAPSHOT}}
>  * Java-Version: {{java -version}}
>  
> {code:java}
> openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-b15) 
> OpenJDK 64-Bit Server VM (build 25.181-b15, mixed mode)  
> {code}
>  * bnd-Part: bnd-lib,bndtools
>  * OS: Linux
>  * OSGi-Framework: Felix
>  * Related Spec: none
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to