Package launch problem in Felix.missing [5.0] osgi.wiring.package requirement; (Osgi.wiring.package = com.sun.jersey.api.core)

I am using the maven-bundle-plugin to create a war file as a bundle that I would like to deploy to Felix. Here is the POM file for it.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
  <groupId>net.java</groupId>
  <artifactId>jvnet-parent</artifactId>
  <version>1</version>
</parent>
<groupId>com.sun.jersey.samples.helloworld-osgi-webapp</groupId>
<artifactId>war-bundle</artifactId>
<version>1.11</version>
<name>Helloworld OSGi WebApp - Jersey Sample WAR</name>
<packaging>war</packaging>
<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <!--  <scope>provided</scope> -->
    </dependency>
    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.core</artifactId>
        <version>4.2.0</version>
        <!--  <scope>provided</scope> -->
    </dependency>
    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.compendium</artifactId>
        <version>4.2.0</version>
        <!--  <scope>provided</scope> -->
    </dependency>
     <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jettison</groupId>
        <artifactId>jettison</artifactId>
        <version>1.1</version>
    </dependency>

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.5.5</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.5.5</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-jaxrs</artifactId>
        <version>1.5.5</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-xc</artifactId>
        <version>1.5.5</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.http.api</artifactId>
       <version>2.0.4</version>
    </dependency>

</dependencies>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <inherited>true</inherited>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <executions>
                <execution>
                    <id>bundle-manifest</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>manifest</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
              <manifestLocation>${project.build.directory}/META-INF</manifestLocation>
              <supportedProjectTypes>
                    <supportedProjectType>bundle</supportedProjectType>
                    <supportedProjectType>war</supportedProjectType>
              </supportedProjectTypes>
              <instructions>
                    <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
                    <Import-Package>com.sun.jersey.api.core,com.sun.jersey.spi.container.servlet,*</Import-Package>
                    <Export-Package>com.sun.jersey.samples.helloworld</Export-Package>
                    <Webapp-Context>jersyweb</Webapp-Context>
                    <Web-ContextPath>jersyweb</Web-ContextPath>
                    <Bundle-Activator>com.sun.jersey.samples.helloworld.WebAppContextListener</Bundle-Activator>
                    <Bundle-ClassPath>WEB-INF/classes</Bundle-ClassPath>
                    <Embed-Dependency>*;scope=compile|runtime;inline=false</Embed-Dependency>
                    <Embed-Transitive>true</Embed-Transitive>
              </instructions>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1-alpha-2</version>
            <configuration>
                <attachClasses>true</attachClasses>
                <archive>
                    <manifestFile>${project.build.directory}/META-INF/MANIFEST.MF</manifestFile>
                    <manifestEntries>
                      <Bundle-ClassPath>WEB-INF/classes</Bundle-ClassPath>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
    <pluginManagement>
        <plugins>
            <!--This plugin configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>
                                        org.apache.felix
                                    </groupId>
                                    <artifactId>
                                        maven-bundle-plugin
                                    </artifactId>
                                    <versionRange>
                                        [2.0.1,)
                                    </versionRange>
                                    <goals>
                                        <goal>manifest</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>
                                        org.jvnet.jaxb2.maven2
                                    </groupId>
                                    <artifactId>
                                        maven-jaxb2-plugin
                                    </artifactId>
                                    <versionRange>
                                        [0.8.1,)
                                    </versionRange>
                                    <goals>
                                        <goal>generate</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

      

When I create it using the maven installation, I can see the logically correct MANIFEST.MF file in the META-INF folder of the military package. Here is MANIFEST.MF.

**Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven Bundle Plugin
Built-By: parag.ki
Build-Jdk: 1.6.0_18
Bundle-ClassPath: WEB-INF/classes,servlet-api-2.5.jar,org.osgi.core-4.
 2.0.jar,org.osgi.compendium-4.2.0.jar,jersey-core-1.11.jar,jersey-ser
 ver-1.11.jar,asm-3.1.jar,jettison-1.1.jar,stax-api-1.0.1.jar,jackson-
 core-asl-1.5.5.jar,jackson-mapper-asl-1.5.5.jar,jackson-jaxrs-1.5.5.j
 ar,jackson-xc-1.5.5.jar,org.apache.felix.http.api-2.0.4.jar
Bnd-LastModified: 1333436962460
Bundle-Activator: com.sun.jersey.samples.helloworld.WebAppContextListe
 ner
Bundle-Description: Java.net - The Source for Java Technology Collabor
 ation
Bundle-ManifestVersion: 2
Bundle-Name: Helloworld OSGi WebApp - Jersey Sample WAR
Bundle-SymbolicName: war-bundle
Bundle-Version: 1.11.0
Embed-Dependency: *;scope=compile|runtime;inline=false
Embed-Transitive: true
Embedded-Artifacts: servlet-api-2.5.jar;g="javax.servlet";a="servlet-a
 pi";v="2.5",org.osgi.core-4.2.0.jar;g="org.osgi";a="org.osgi.core";v=
 "4.2.0",org.osgi.compendium-4.2.0.jar;g="org.osgi";a="org.osgi.compen
 dium";v="4.2.0",jersey-core-1.11.jar;g="com.sun.jersey";a="jersey-cor
 e";v="1.11",jersey-server-1.11.jar;g="com.sun.jersey";a="jersey-serve
 r";v="1.11",asm-3.1.jar;g="asm";a="asm";v="3.1",jettison-1.1.jar;g="o
 rg.codehaus.jettison";a="jettison";v="1.1",stax-api-1.0.1.jar;g="stax
 ";a="stax-api";v="1.0.1",jackson-core-asl-1.5.5.jar;g="org.codehaus.j
 ackson";a="jackson-core-asl";v="1.5.5",jackson-mapper-asl-1.5.5.jar;g
 ="org.codehaus.jackson";a="jackson-mapper-asl";v="1.5.5",jackson-jaxr
 s-1.5.5.jar;g="org.codehaus.jackson";a="jackson-jaxrs";v="1.5.5",jack
 son-xc-1.5.5.jar;g="org.codehaus.jackson";a="jackson-xc";v="1.5.5",or
 g.apache.felix.http.api-2.0.4.jar;g="org.apache.felix";a="org.apache.
 felix.http.api";v="2.0.4"
Import-Package: com.sun.jersey.api.core,com.sun.jersey.samples.hellowo
 rld,com.sun.jersey.spi.container.servlet,com.sun.net.httpserver,javax
 .activation,javax.annotation.security,javax.imageio,javax.imageio.spi
 ,javax.imageio.stream,javax.mail,javax.mail.internet,javax.mail.util,
 javax.microedition.io,javax.naming,javax.security.auth.x500,javax.xml
 .bind,javax.xml.bind.annotation,javax.xml.bind.annotation.adapters,ja
 vax.xml.datatype,javax.xml.parsers,javax.xml.transform,javax.xml.tran
 sform.dom,javax.xml.transform.sax,javax.xml.transform.stream,org.joda
 .time,org.joda.time.format,org.w3c.dom,org.w3c.dom.bootstrap,org.w3c.
 dom.ls,org.xml.sax
Tool: Bnd-1.50.0
Web-ContextPath: jersyweb
Webapp-Context: jersyweb**

      

But when I deploy it to Apache Felix and run it I see the following error.

g! org.osgi.framework.BundleException: Unresolved constraint in war-bundle bundle [5]: Unable to resolve 5.0: Missing requirement [5.0] osgi.wiring.package; (Osgi.wiring.package = com.sun.jersey.api.core)

The com.sun.jersey.api.core package is part of jersey-core-1.11.jar already mentioned in Bundle-ClassPath in MANIFEST.MF, why am I getting this error?

If I start posting the appropriate bundle file, for example the bundle for jersey-core-1.11.jar, then the problem is solved, but I don't find it a very good solution. In fact, only the maven bundle plugin and tags are provided for this purpose.

Please advice.

+3


source to share


1 answer


With a quick look at the MANIFEST file, I can see that there is an import package for com.sun.jersey.api.core. I think you are injecting this package too, but this does not affect this dependency. If you ask for addiction, you get it

Simple uninstall that should work, in maven you can remove it from the Import-Package line.



Plus, you are investing a lot. I think it is not a good idea to embed the api servlet in a webapp like the application server does. This might work, but problems can arise when deploying to other application servers.

+4


source







All Articles