You can modify the etc/config.properties file, in particular the
  org.osgi.framework.system.capabilities
configuration.  If some service are provided by default by the framework
and are missing,
you may want to raise a JIRA issue and provide a patch / pull request.

2017-02-05 12:05 GMT+01:00 Markus Rathgeb <maggu2...@gmail.com>:

> Ah, okay, I assume it is caused by the missing
> Provide-Capability of the Equinox bundle that it provides that service.
> Could this information be added by some configuration file without
> modify the Equinox bundle itself?
>
> 2017-02-05 11:49 GMT+01:00 Markus Rathgeb <maggu2...@gmail.com>:
> > Hello,
> >
> > I thought I understand how the dependency flag is working for features
> > and bundles, but at least it seems to be different.
> > Perhaps someone could explain me the following scenario:
> >
> > Feature file:
> > ===
> > <?xml version="1.0" encoding="UTF-8"?>
> > <features name="saxparserfactory"
> > xmlns="http://karaf.apache.org/xmlns/features/v1.4.0";>
> >
> >   <feature name="saxparserfactory" version="1.0-SNAPSHOT">
> >     <requirement>osgi.service;filter:="(objectClass=javax.
> xml.parsers.SAXParserFactory)";effective:=active</requirement>
> >     <feature dependency="true">jboss-xerces</feature>
> >   </feature>
> >
> >   <feature name="jboss-xerces" description="JBoss Xerces"
> > version="1.0-SNAPSHOT">
> >     <details>OSGi service for 'javax.xml.parsers.
> SAXParserFactory'</details>
> >
> >     <!-- Maven repository:
> > https://repository.jboss.org/nexus/content/repositories/releases/ -->
> >     <!-- <bundle
> > start-level="30">mvn:org.jboss.osgi.xerces/jbosgi-
> xerces/3.1.0.Final</bundle>
> > -->
> >     <bundle start-level="30">https://repository.jboss.org/nexus/
> content/repositories/releases/org/jboss/osgi/xerces/jbosgi-
> xerces/3.1.0.Final/jbosgi-xerces-3.1.0.Final.jar</bundle>
> >     <capability>osgi.service;objectClass=javax.xml.parsers.
> SAXParserFactory</capability>
> >
> >     <bundle dependency="true"
> > start-level="30">mvn:org.osgi/org.osgi.util.xml/1.0.1</bundle>
> >     <bundle dependency="true"
> > start-level="8">mvn:org.ops4j.pax.logging/pax-logging-api/1.9.1</bundle>
> >   </feature>
> >
> > </features>
> > ===
> >
> > I would expect if I install the feature "saxparserfactory" the feature
> > jboss-xerces is installed only if the requirements are not already
> > fulfilled.
> > The only requirement the feature drops in should be to ensure that
> > there is a SAXParserFactory service available.
> > Should this be possible?
> >
> >
> > Test
> > ===
> >
> > I used the current Karaf 4.1.0 form the second voting round.
> >
> > Start a clean instance:
> > $ bin/karaf clean
> >
> > As expected Apache Felix is the used OSGi framework
> >
> > karaf@root()> bundle:list -t 0 -s 0 | grep Active
> >  0 │ Active │   0 │ 5.6.1   │ org.apache.felix.framework
> >
> > I added the feature repository file.
> >
> > karaf@root()> feature:repo-add
> > file:///home/maggu2810/tmp/saxparserfactory-feature.xml
> > Adding feature url file:///home/maggu2810/tmp/
> saxparserfactory-feature.xml
> >
> > After that let's look if there is already a SAXParserFactory present:
> >
> > karaf@root()> service:list javax.xml.parsers.SAXParserFactory
> >
> > No output, so as expected, no service found.
> >
> > Check what will be done if the feature is installed:
> >
> > karaf@root()> feature:install -t -v saxparserfactory
> > Adding features: saxparserfactory/[1.0.0.SNAPSHOT,1.0.0.SNAPSHOT]
> > Changes to perform:
> >   Region: root
> >     Bundles to install:
> >       https://repository.jboss.org/nexus/content/repositories/
> releases/org/jboss/osgi/xerces/jbosgi-xerces/3.1.0.
> Final/jbosgi-xerces-3.1.0.Final.jar
> >       mvn:org.osgi/org.osgi.util.xml/1.0.1
> >
> > This is as I expect what should be done.
> >
> > Let's exit the Karaf container.
> >
> > karaf@root()> shutdown -f
> >
> >
> >
> > After that I used the Equinox framework
> >
> > $ echo 'karaf.framework=equinox' >> etc/custom.properties
> >
> > and started again a clean isntance.
> >
> > $ bin/karaf clean
> >
> > Ensure the feature repository is available:
> >
> > karaf@root()> feature:repo-add
> > file:///home/maggu2810/tmp/saxparserfactory-feature.xml
> > Adding feature url file:///home/maggu2810/tmp/
> saxparserfactory-feature.xml
> >
> > The Equinox OSGi framework bundle already provides a SAXParserFactory
> service.
> >
> > karaf@root()> service:list javax.xml.parsers.SAXParserFactory
> > [javax.xml.parsers.SAXParserFactory]
> > ------------------------------------
> >  service.pid = 0.org.eclipse.osgi.internal.framework.
> XMLParsingServiceFactory
> >  service.vendor = Eclipse.org - Equinox
> >  service.id = 20
> >  service.bundleid = 0
> >  service.scope = bundle
> > Provided by :
> >  OSGi System Bundle (0)
> >
> > Now I would expect that the installation of the saxparserfactory
> > feature will not trigger an installation of the jboss-xerces feature,
> > because all requirements should be already satisfied.
> > But it looks like:
> >
> > karaf@root()> feature:install -t -v saxparserfactory
> > Adding features: saxparserfactory/[1.0.0.SNAPSHOT,1.0.0.SNAPSHOT]
> > Changes to perform:
> >   Region: root
> >     Bundles to install:
> >       https://repository.jboss.org/nexus/content/repositories/
> releases/org/jboss/osgi/xerces/jbosgi-xerces/3.1.0.
> Final/jbosgi-xerces-3.1.0.Final.jar
> >       mvn:org.osgi/org.osgi.util.xml/1.0.1
> >
> > What am I doing wrong?
> >
> > Best regards,
> > Markus Rathgeb
>



-- 
------------------------
Guillaume Nodet

Reply via email to