You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@karaf.apache.org by "Jean-Baptiste Onofré (Jira)" <ji...@apache.org> on 2020/10/08 13:29:00 UTC

[jira] [Assigned] (KARAF-6612) Get NPE in FeatureDeploymentListener.bundleChanged()

     [ https://issues.apache.org/jira/browse/KARAF-6612?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jean-Baptiste Onofré reassigned KARAF-6612:
-------------------------------------------

    Assignee:     (was: Jean-Baptiste Onofré)

> Get NPE in FeatureDeploymentListener.bundleChanged()
> ----------------------------------------------------
>
>                 Key: KARAF-6612
>                 URL: https://issues.apache.org/jira/browse/KARAF-6612
>             Project: Karaf
>          Issue Type: Bug
>          Components: karaf
>    Affects Versions: 4.2.1, 4.2.8
>         Environment: Tested on Windows
>            Reporter: Bob Paulin
>            Priority: Minor
>              Labels: Linux, Windows
>
> I'm trying to run a standard distribution with all features defined as startup.   When I do this the karaf instance starts but logs a number of errors:
> {code:java}
>  2020-01-30T21:36:36,333 | ERROR | activator-1-thread-2 | FeatureDeploymentListener        | 27 - org.apache.karaf.deployer.features - 4.2.8 | Unable to update deployed features for bundle: org.apache.karaf.features.extension - 4.2.8
> java.lang.NullPointerException: null
> 	at org.apache.karaf.deployer.features.FeatureDeploymentListener.bundleChanged(FeatureDeploymentListener.java:247) [!/:?]
> 	at org.apache.karaf.deployer.features.FeatureDeploymentListener.init(FeatureDeploymentListener.java:95) [!/:?]
> 	at org.apache.karaf.deployer.features.osgi.Activator$DeploymentFinishedListener.deploymentEvent(Activator.java:86) [!/:?]
> 	at org.apache.karaf.features.internal.service.FeaturesServiceImpl.registerListener(FeaturesServiceImpl.java:295) [!/:?]
> 	at org.apache.karaf.deployer.features.osgi.Activator.doStart(Activator.java:53) [!/:?]
> 	at org.apache.karaf.util.tracker.BaseActivator.run(BaseActivator.java:312) [!/:?]
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_222]
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_222]
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_222]
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_222]
> 	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_222]{code}
>  
> I'm using the following pom.xml
>  
> {code:java}
>  <?xml version="1.0" encoding="UTF-8"?>
> <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>    <groupId>com.bobpaulin.karaf.startup</groupId>
>     <artifactId>karaf-startup-standard</artifactId>
>     <version>0.0.1-SNAPSHOT</version>
>     <packaging>karaf-assembly</packaging>
>     <name>Startup Standard Distribution</name>
>     
>     <properties>
>         <karaf.version>4.2.8</karaf.version>
>     </properties>
>     
>      <!-- Import Karaf POM to use the correct version of the Karaf dependencies -->
>     <dependencyManagement>
>     <dependencies>
>             <dependency>
>                 <groupId>org.apache.karaf</groupId>
>                 <artifactId>karaf</artifactId>
>                 <version>${karaf.version}</version>
>                 <type>pom</type>
>                 <scope>import</scope>
>             </dependency>
>         </dependencies>
>     </dependencyManagement>    <dependencies>
>         <dependency>
>         <!-- scope is compile so all features (there is only one) are installed into startup.properties and the feature repo itself is not added in etc/org.apache.karaf.features.cfg file -->
>             <groupId>org.apache.karaf.features</groupId>
>             <artifactId>framework</artifactId>
>             <version>${karaf.version}</version>
>             <type>kar</type>
>         </dependency>
>         <dependency>
>             <groupId>org.apache.karaf.features</groupId>
>             <artifactId>framework</artifactId>
>             <classifier>features</classifier>
>             <version>${karaf.version}</version>
>             <type>xml</type>
>         </dependency>
>         
>         <dependency>
>             <groupId>org.apache.karaf.features</groupId>
>             <artifactId>enterprise</artifactId>
>             <classifier>features</classifier>
>             <type>xml</type>
>             <version>${karaf.version}</version>
>         </dependency>
>         <dependency>
>             <groupId>org.apache.karaf.features</groupId>
>             <artifactId>spring</artifactId>
>             <version>${karaf.version}</version>
>             <classifier>features</classifier>
>             <type>xml</type>
>         </dependency>
>         <dependency>
>         <!-- scope is runtime so the feature repo is listed in etc/org.apache.karaf.features.cfg file, and features will installed into the system directory -->
>             <groupId>org.apache.karaf.features</groupId>
>             <artifactId>standard</artifactId>
>             <classifier>features</classifier>
>             <version>${karaf.version}</version>
>             <type>xml</type>
>         </dependency>
>     </dependencies>    <build>
>         <!-- if you want to include resources in the distribution -->
>         <resources>
>             <resource>
>                 <directory>src/main/resources</directory>
>                 <filtering>false</filtering>
>                 <includes>
>                     <include>**/*</include>
>                 </includes>
>             </resource>
>             <resource>
>                 <directory>src/main/filtered-resources</directory>
>                 <filtering>true</filtering>
>                 <includes>
>                     <include>**/*</include>
>                 </includes>
>             </resource>
>         </resources>        <plugins>
>             <!-- if you want to include resources in the distribution -->
>             <plugin>
>                 <groupId>org.apache.maven.plugins</groupId>
>                 <artifactId>maven-resources-plugin</artifactId>
>                 <version>3.0.2</version>
>                 <executions>
>                     <execution>
>                         <id>process-resources</id>
>                         <goals>
>                             <goal>resources</goal>
>                         </goals>
>                     </execution>
>                 </executions>
>             </plugin>
>             <!-- karaf-maven-plugin will call both assembly and archive goals -->
>             <plugin>
>                 <groupId>org.apache.karaf.tooling</groupId>
>                 <artifactId>karaf-maven-plugin</artifactId>
>                 <version>${karaf.version}</version>
>                 <extensions>true</extensions>
>                 <configuration>
>                     <startupFeatures>
>                     	<startupFeature>standard</startupFeature>
>                         <startupFeature>eventadmin</startupFeature>
>                     </startupFeatures>
>                     <javase>1.8</javase>
>                 </configuration>
>             </plugin>
>         </plugins>
>     </build>
> </project>
> {code}
>  
> Some debugging shows the in the FeatureDeploymentListener the featuresService.listRequirements() is returning an empty map so the call to requirements.get(ROOT_REGION) is returning null before the next call to removeAll
> {code:java}
> Map<String, Set<String>> requirements =
> featuresService.listRequirements();
> requirements.get(ROOT_REGION).removeAll(reqsToRemove);
> requirements.get(ROOT_REGION).addAll(reqsToAdd); {code}
>  
> Not sure if we just need a simple null check here or if I'm doing something not supported.  Thanks!
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)