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