Hi,

That’s an issue in the bundle (JAXB is affected AFAIR) itself (already 
reported). I have to implement a workaround to avoid this with JDK 9+.

About condition, they are evaluated at runtime by the resolver. Thanks to that, 
if later you install a condition feature, then the inner resources will be 
installed.

Regards
JB

> Le 27 févr. 2020 à 16:34, Alex Soto <alex.s...@envieta.com> a écrit :
> 
> Thank you JB,
> 
> I have made the changes you suggested, but the behavior is very strange; the 
> first time I run, I get this error:
> 
> java.lang.ArrayIndexOutOfBoundsException: 19
>       at aQute.bnd.osgi.Clazz.parseClassFile(Clazz.java:576)
>       at aQute.bnd.osgi.Clazz.parseClassFile(Clazz.java:494)
>       at aQute.bnd.osgi.Clazz.parseClassFileWithCollector(Clazz.java:483)
>       at aQute.bnd.osgi.Clazz.parseClassFile(Clazz.java:473)
>       at aQute.bnd.osgi.Analyzer.analyzeJar(Analyzer.java:2177)
>       at aQute.bnd.osgi.Analyzer.analyzeBundleClasspath(Analyzer.java:2083)
>       at aQute.bnd.osgi.Analyzer.analyze(Analyzer.java:138)
>       at aQute.bnd.osgi.Analyzer.calcManifest(Analyzer.java:616)
>       at org.ops4j.pax.swissbox.bnd.BndUtils.createBundle(BndUtils.java:161)
>       at 
> org.ops4j.pax.url.wrap.internal.Connection.getInputStream(Connection.java:83)
>       at java.net.URL.openStream(URL.java:1045)
>       at 
> org.apache.karaf.features.internal.download.impl.SimpleDownloadTask.download(SimpleDownloadTask.java:78)
>       at 
> org.apache.karaf.features.internal.download.impl.AbstractRetryableDownloadTask.run(AbstractRetryableDownloadTask.java:60)
>       at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>       at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
>       at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>       at java.lang.Thread.run(Thread.java:748)
> java.lang.ArrayIndexOutOfBoundsException: 19
>       at aQute.bnd.osgi.Clazz.parseClassFile(Clazz.java:576)
>       at aQute.bnd.osgi.Clazz.parseClassFile(Clazz.java:494)
>       at aQute.bnd.osgi.Clazz.parseClassFileWithCollector(Clazz.java:483)
>       at aQute.bnd.osgi.Clazz.parseClassFile(Clazz.java:473)
>       at aQute.bnd.osgi.Analyzer.analyzeJar(Analyzer.java:2177)
>       at aQute.bnd.osgi.Analyzer.analyzeBundleClasspath(Analyzer.java:2083)
>       at aQute.bnd.osgi.Analyzer.analyze(Analyzer.java:138)
>       at aQute.bnd.osgi.Analyzer.calcManifest(Analyzer.java:616)
>       at org.ops4j.pax.swissbox.bnd.BndUtils.createBundle(BndUtils.java:161)
>       at 
> org.ops4j.pax.url.wrap.internal.Connection.getInputStream(Connection.java:83)
>       at java.net.URL.openStream(URL.java:1045)
>       at 
> org.apache.karaf.features.internal.download.impl.SimpleDownloadTask.download(SimpleDownloadTask.java:78)
>       at 
> org.apache.karaf.features.internal.download.impl.AbstractRetryableDownloadTask.run(AbstractRetryableDownloadTask.java:60)
>       at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>       at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
>       at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>       at java.lang.Thread.run(Thread.java:748)
> 
> Followed by multiple errors of the kind:
> 
> Uses constraint violation. Unable to resolve resource XXXX.  because it is 
> exposed to package 'javax.xml.bind' from resources jakarta.xml.bind-api 
> [jakarta.xml.bind-api [52](R 52.0)] and org.apache.felix.framework 
> [org.apache.felix.framework [0](R 0)] via two dependency chains.
> 
> 
> However, after I exit Karaf and run it again, the errors disappear, and the 
> bundles in the conditional are not deployed as expected.
> All of the above happens when  building the code with Java 13 (although 
> passing —release 1.8 to the compiler).
> 
> I wonder, is the condition evaluated at build time or at runtime?
> 
> Now, when I compile with Java 8,  I still get the Index out of bound errors 
> from BND the first time it runs, but not the uses constraints violation 
> errors.
> 
> 
> Best regards,
> Alex soto
> 
> 
> 
> 
>> On Feb 27, 2020, at 9:46 AM, Jean-Baptiste Onofre <j...@nanthrax.net 
>> <mailto:j...@nanthrax.net>> wrote:
>> 
>> Hi Alex,
>> 
>> Can you try this condition:
>> 
>> <condition>req:osgi.ee;filter:="(&amp;(osgi.ee=JavaSE)(!(version>=1.8)))"</condition>
>> 
>> And also remove the dependency flag.
>> 
>> Regards
>> JB
>> 
>>> Le 27 févr. 2020 à 15:42, Alex Soto <alex.s...@envieta.com 
>>> <mailto:alex.s...@envieta.com>> a écrit :
>>> 
>>> Perhaps I am still doing something wrong, or not understanding how the 
>>> condition works.
>>> I have this in my features.xml:
>>> 
>>> 
>>>             <conditional>
>>>                     <!-- From Java 9 and up add JaveEE dependencies -->
>>>                     
>>> <condition>req:osgi.ee;filter:="(&amp;(osgi.ee=JavaSE)(version>=9))"</condition>
>>> 
>>>                     <bundle 
>>> dependency="true">mvn:jakarta.xml.bind/jakarta.xml.bind-api/${jaxb.version}</bundle>
>>>                     <bundle 
>>> dependency="true">mvn:com.sun.activation/javax.activation/1.2.0</bundle>
>>>                     <bundle 
>>> dependency="true">wrap:mvn:org.glassfish.jaxb/txw2/${jaxb.version}</bundle>
>>>                     <bundle 
>>> dependency="true">mvn:com.sun.istack/istack-commons-runtime/3.0.8</bundle>
>>>                     <bundle 
>>> dependency="true">mvn:org.jvnet.staxex/stax-ex/1.8.1</bundle>
>>>                     <bundle 
>>> dependency="true">mvn:com.sun.xml.fastinfoset/FastInfoset/1.2.16</bundle>
>>>                     <bundle 
>>> dependency="true">wrap:mvn:org.glassfish.jaxb/jaxb-runtime/${jaxb.version}</bundle>
>>>             </conditional>
>>> 
>>> 
>>> But when I run on Java 8, the above bundles are deployed, but my intention 
>>> is the opposite. 
>>> Of course this causes a lot of errors. Please help.
>>> 
>>> Best regards,
>>> Alex soto
>>> 
>>> 
>>> 
>>> 
>>>> On Feb 26, 2020, at 4:21 PM, Jean-Baptiste Onofré <j...@nanthrax.net 
>>>> <mailto:j...@nanthrax.net>> wrote:
>>>> 
>>>> Thanks Guillaume, it?s what I was looking for. 
>>>> 
>>>> Regards 
>>>> JB
>>>> 
>>>> Le mer. 26 f?vr. 2020 ? 21:31, Guillaume Nodet <gno...@apache.org 
>>>> <mailto:gno...@apache.org>> a ?crit :
>>>> This should be doable using something like in the test 
>>>> https://github.com/apache/karaf/blob/master/features/core/src/test/resources/org/apache/karaf/features/internal/service/f06.xml#L30-L33
>>>>  
>>>> <https://github.com/apache/karaf/blob/master/features/core/src/test/resources/org/apache/karaf/features/internal/service/f06.xml#L30-L33>
>>>> Le mer. 26 f?vr. 2020 ? 19:53, Alex Soto <alex.s...@envieta.com 
>>>> <mailto:alex.s...@envieta.com>> a ?crit :
>>>> In Features XML, is it possible to add a bundle conditionally based on JDK 
>>>> version?
>>>> 
>>>> <conditional>
>>>>    <condition>???</condition>
>>>> </conditonal>
>>>> 
>>>> BTW, I could not find documentation about what can be put in the condition 
>>>> tag.
>>>> I looked here https://karaf.apache.org/manual/latest/provisioning 
>>>> <https://karaf.apache.org/manual/latest/provisioning> but there is no 
>>>> mention of this.
>>>> 
>>>> Best regards,
>>>> Alex soto
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> ------------------------
>>>> Guillaume Nodet
>>>> 
>>> 
>> 
> 

Reply via email to