SLING-4970 : Potential NPE with transitive models
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1698093 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
index 692bc56..8a51986 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
@@ -166,7 +166,7 @@
// we have to create an effective model to add the dependencies
final Model effectiveModel = ModelUtility.getEffectiveModel(info.localModel, resolverOptions);
- final List<Model> dependencies = searchSlingstartDependencies(env, info, effectiveModel);
+ final List<Model> dependencies = searchSlingstartDependencies(env, info, info.localModel, effectiveModel);
info.model = new Model();
for(final Model d : dependencies) {
ModelUtility.merge(info.model, d);
@@ -255,6 +255,7 @@
private static List<Model> searchSlingstartDependencies(
final Environment env,
final ProjectInfo info,
+ final Model rawModel,
final Model effectiveModel)
throws MavenExecutionException {
// slingstart or slingfeature
@@ -332,7 +333,16 @@
}
for(final org.apache.sling.provisioning.model.Artifact r : removeList) {
group.remove(r);
- info.localModel.getFeature(feature.getName()).getRunMode(runMode.getNames()).getArtifactGroup(group.getStartLevel()).remove(r);
+ final Feature localModelFeature = rawModel.getFeature(feature.getName());
+ if ( localModelFeature != null ) {
+ final RunMode localRunMode = localModelFeature.getRunMode(runMode.getNames());
+ if ( localRunMode != null ) {
+ final ArtifactGroup localAG = localRunMode.getArtifactGroup(group.getStartLevel());
+ if ( localAG != null ) {
+ localAG.remove(r);
+ }
+ }
+ }
}
}
}
@@ -348,7 +358,7 @@
// we have to create an effective model to add the dependencies
final Model effectiveModel = ModelUtility.getEffectiveModel(rawModel, new ResolverOptions());
- final List<Model> dependencies = searchSlingstartDependencies(env, info, effectiveModel);
+ final List<Model> dependencies = searchSlingstartDependencies(env, info, rawModel, effectiveModel);
Model mergingModel = new Model();
for(final Model d : dependencies) {
ModelUtility.merge(mergingModel, d);