[
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)