I am still new to felix and osgi and I am trying to create a war that I can 
deploy to felix.

Here is my pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.company</groupId>
  <artifactId>container</artifactId>
  <version>1.0.0</version>
  <packaging>war</packaging>
  <name>Container</name>
  <description>An OSGi bundle version of the Container</description>
  <url>http://www.wso1.org</url>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>1.4.0</version>
        <extensions>true</extensions>
        <executions>
        <execution>
            <id>bundle-manifest</id>
            <phase>process-classes</phase>
            <goals>
            <goal>manifest</goal>
            </goals>
        </execution>
        </executions>
        <configuration>
          <supportedProjectTypes>
                <supportedProjectType>jar</supportedProjectType>
                <supportedProjectType>bundle</supportedProjectType>
                <supportedProjectType>war</supportedProjectType>
          </supportedProjectTypes>
          <instructions>
            
<Bundle-SymbolicName>${pom.groupId}.${pom.artifactId}</Bundle-SymbolicName>
            <Bundle-Name>${pom.name}</Bundle-Name>
            <Bundle-Version>${pom.version}</Bundle-Version>
            <Bundle-Activator>com.company.container.Activator</Bundle-Activator>
            <Private-Package>com.company.container.*</Private-Package>
            <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
            <Embed-Directory>WEB-INF/lib</Embed-Directory>
            <Embed-Transitive>true</Embed-Transitive>
            <Web-ContextPath>/container</Web-ContextPath>
            <Webapp-Context>/container</Webapp-Context>
            <_wab>src/main/webapp</_wab>
          </instructions>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1.1</version>
        <executions>
        <execution>
            <phase>compile</phase>
            <goals>
            <goal>exploded</goal>
            </goals>
        </execution>
        </executions>
        <configuration>
        <webappDirectory>src/main/webapp/</webappDirectory>
        <archive>
            <!-- add the generated manifest to the war -->
            
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
        </archive>
        </configuration>
    </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.osgi.core</artifactId>
      <version>1.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.utils</artifactId>
      <version>1.2.0</version>
    </dependency>
        <dependency>
          <groupId>org.apache.felix</groupId>
          <artifactId>org.apache.felix.http.bundle</artifactId>
          <version>2.2.1</version>
        </dependency>
        <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20080701</version>
    </dependency>
  </dependencies>
</project>
</xml>

In my code for my bundle I am using org.json. Here is the manifest that is 
produced

Manifest-Version: 1.0
Webapp-Context: /container
Embed-Directory: WEB-INF/lib
Private-Package: com.company.container;version="1.0.0",com.company.c
 ontainer.object;version="1.0.0",com.company.container.services;versi
 on="1.0.0",com.company.container.services.impl;version="1.0.0",com.c
 ompany.container.servlet;version="1.0.0"
Tool: Bnd-0.0.238
Bundle-Name: Container
Created-By: 1.6.0_65 (Apple Inc.)
Web-ContextPath: /container
Bundle-Version: 1.0.0
Bnd-LastModified: 1383057583330
Embed-Transitive: true
Bundle-ManifestVersion: 2
Bundle-Activator: com.company.container.Activator
Bundle-Description: An OSGi bundle version of the Container
Import-Package: javax.servlet;version="2.5",javax.servlet.http;version
 ="2.5",org.json,org.osgi.framework;version="1.4",org.osgi.service.htt
 p;version="1.2",org.osgi.util.tracker;version="1.3"
Embed-Dependency: *;scope=compile|runtime
Bundle-SymbolicName: com.company.container

As you can see, org.json is not in the Private-Package list. It is in the 
Import-Package list. Unfortunately it is not being exported by any bundles 
running on my felix server.

I can see the json.jar file in the list of files in the wars WEB-INF/lib 
directory.

When I install and start this I get the following error
org.osgi.framework.BundleException: Unresolved constraint in bundle 
com.company.container [98]: Unable to resolve 98.0: missing requirement [98.0] 
osgi.wiring.package; (osgi.wiring.package=org.json)

What is the correct way to handle this? Have the jar in the WEB-INF and somehow 
import it from there? or have it be in the bundle? And how do I go about making 
the correct solution work?

Thanks

Reply via email to