summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-11-29 05:40:57 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2022-11-29 05:40:57 +0000
commitd78a594b32795c102af4153c65d42b45a184198e (patch)
treea908a5567b843dd2645058bd6129fccaf58d69bc /config-model
parentf8fd0b1769259397ba82ac068986389b49b45fad (diff)
Go back to parsing Import-Package with bndlib for now
Diffstat (limited to 'config-model')
-rw-r--r--config-model/pom.xml16
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java21
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java13
3 files changed, 39 insertions, 11 deletions
diff --git a/config-model/pom.xml b/config-model/pom.xml
index 15dc9860ba7..a11e72fa1be 100644
--- a/config-model/pom.xml
+++ b/config-model/pom.xml
@@ -283,6 +283,22 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>biz.aQute.bnd</groupId>
+ <artifactId>biz.aQute.bndlib</artifactId>
+ <version>6.1.0</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <!-- These are not needed for our use of bndlib -->
+ <groupId>org.osgi</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
<groupId>org.lz4</groupId>
<artifactId>lz4-java</artifactId>
</dependency>
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java
index 1089d36dda1..9c0e7be452a 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java
@@ -1,6 +1,9 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.application.validation;
+import aQute.bnd.header.Parameters;
+import aQute.bnd.osgi.Domain;
+import aQute.bnd.version.VersionRange;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.application.api.ComponentInfo;
import com.yahoo.config.application.api.DeployLogger;
@@ -19,8 +22,8 @@ import javax.xml.xpath.XPathFactory;
import java.io.IOException;
import java.io.StringReader;
import java.nio.file.Paths;
-import java.util.List;
import java.util.Optional;
+import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
@@ -76,14 +79,14 @@ public abstract class AbstractBundleValidator extends Validator {
}
}
- protected final void forEachImportPackage(Manifest mf, Consumer<String> consumer) {
- String importPackage = mf.getMainAttributes().getValue("Import-Package");
- ImportPackageInfo importPackages = new ImportPackageInfo(importPackage);
- List<String> tokens = new TokenizeAndDeQuote(";,=", "\"'").tokenize(importPackage);
-
- for (String packageName : importPackages.packages()) {
- consumer.accept(packageName);
- }
+ protected final void forEachImportPackage(Manifest mf, BiConsumer<String, VersionRange> consumer) {
+ Parameters importPackage = Domain.domain(mf).getImportPackage();
+ importPackage.forEach((packageName, attrs) -> {
+ VersionRange versionRange = attrs.getVersion() != null
+ ? VersionRange.parseOSGiVersionRange(attrs.getVersion())
+ : null;
+ consumer.accept(packageName, versionRange);
+ });
}
protected final void log(DeployState state, Level level, String fmt, Object... args) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java
index 299e91f8ea2..1e3b27bc2fa 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.application.validation;
+import aQute.bnd.version.VersionRange;
import com.yahoo.config.model.deploy.DeployState;
import org.w3c.dom.Document;
@@ -62,10 +63,11 @@ public class BundleValidator extends AbstractBundleValidator {
private void validateImportedPackages(DeployState state, JarFile jar, Manifest manifest) {
Map<DeprecatedProvidedBundle, List<String>> deprecatedPackagesInUse = new HashMap<>();
- forEachImportPackage(manifest, (packageName) -> {
+ forEachImportPackage(manifest, (packageName, versionRange) -> {
for (DeprecatedProvidedBundle deprecatedBundle : DeprecatedProvidedBundle.values()) {
for (Predicate<String> matcher : deprecatedBundle.javaPackageMatchers) {
- if (matcher.test(packageName)) {
+ if (matcher.test(packageName)
+ && (versionRange == null || deprecatedBundle.versionDiscriminator.test(versionRange))) {
deprecatedPackagesInUse.computeIfAbsent(deprecatedBundle, __ -> new ArrayList<>())
.add(packageName);
}
@@ -89,15 +91,22 @@ public class BundleValidator extends AbstractBundleValidator {
final String name;
final Collection<Predicate<String>> javaPackageMatchers;
+ final Predicate<VersionRange> versionDiscriminator;
final String description;
+ DeprecatedProvidedBundle(String name, String description, Collection<String> javaPackagePatterns) {
+ this(name, description, __ -> true, javaPackagePatterns);
+ }
+
DeprecatedProvidedBundle(String name,
String description,
+ Predicate<VersionRange> versionDiscriminator,
Collection<String> javaPackagePatterns) {
this.name = name;
this.javaPackageMatchers = javaPackagePatterns.stream()
.map(s -> Pattern.compile(s).asMatchPredicate())
.collect(Collectors.toList());
+ this.versionDiscriminator = versionDiscriminator;
this.description = description;
}
}