Developer
Documentation
Resources
Get Support
Sign in
Developer
Get Support
Sign in
DOCUMENTATION
Cloud
Data Center
Resources
Sign in
Developer
Sign in
DOCUMENTATION
Cloud
Data Center
Resources
Sign in
Last updated Dec 8, 2017

BundleException with no bundle constraint specified

Symptoms -- What Goes Wrong

A plugin fails to load at runtime, and the log contains an OsgiContainerException with a BundleException as its root cause. For example:

1
2
WARNING: Unable to enable plugin 'com.atlassian.myplugin.my-plugin'
com.atlassian.plugin.osgi.container.OsgiContainerException: Cannot start plugin: com.atlassian.myplugin.my-plugin
       at com.atlassian.plugin.osgi.factory.OsgiPlugin.enableInternal(OsgiPlugin.java:385)
       at com.atlassian.plugin.impl.AbstractPlugin.enable(AbstractPlugin.java:212)
       ...
Caused by: org.osgi.framework.BundleException: Unable to resolve due to constraint violation.
       at org.apache.felix.framework.Felix._resolveBundle(Felix.java:1732)
       at org.apache.felix.framework.Felix._startBundle(Felix.java:1588)
       at org.apache.felix.framework.Felix.startBundle(Felix.java:1541)
       at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:371)

Cause

If your plugin is failing to enable with the message "Unable to resolve due to constraint violation." but doesn't specify a particular package or what the constraint violation is, it's possible that the exporter of a package that you are importing is imposing a uses constraint directive that your plugin is not satisfying. You may need to add a <Package-Import> to your own plugin to satisfy this directive.

Resolution

At the moment, determining which bundle imposes a uses constraint is primarily guesswork. You will need to look through the META-INF/manifest.mf files of bundles from which you are importing packages looking for uses directives in the Export-Package: section.

For example:

1
2
Manifest-Version: 1.0
Export-Package: com.pyxis.greenhopper;uses:="javax.xml.bind.annotation";version:="4.3.1"
Import-Package: javax.xml.bind.annotation;version="2.1.0"

The uses:="javax.xml.bind.annotation" implies that plugins importing both com.pyxis.greenhopper and javax.xml.bind.annotation must import version "2.1.0" of javax.xml.bind.annotation. This can be achieved by adding the relevant <Package-Import> to your pom.xml:

1
2
<build>
<plugins>
  <plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    <configuration>
      <instructions>        
        <Import-Package>          
          javax.xml.bind*;version="2.1.0", <!-- note the specified version String -->
          *
        </Import-Package>        
        <Spring-Context>*;timeout:=60</Spring-Context>
      </instructions>
    </configuration>
  </plugin>
</plugins>
</build>

More Information

See also understanding the OSGi uses directive

Rate this page: