This is an automated email from the ASF dual-hosted git repository.
markt-asf pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat-jakartaee-migration.git
The following commit(s) were added to refs/heads/main by this push:
new 5ff5f48 Restore handling of multi-name import packages
5ff5f48 is described below
commit 5ff5f48f11d3cee8337e0b274b6f47e6d7a7879f
Author: Mark Thomas <[email protected]>
AuthorDate: Tue Sep 8 10:08:00 2026 +0100
Restore handling of multi-name import packages
---
CHANGES.md | 2 +-
.../apache/tomcat/jakartaee/ManifestConverter.java | 20 +++++++++++++++-----
.../tomcat/jakartaee/ManifestConverterTest.java | 22 ++++++++++++++++++++++
3 files changed, 38 insertions(+), 6 deletions(-)
diff --git a/CHANGES.md b/CHANGES.md
index a595584..dae9ba0 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -8,7 +8,7 @@
- Do not buffer very large nested archives when processing them in streaming
mode. (remm)
- Improve cache robustness. (remm)
- Improve robustness of source and destination manipulation operations when
migrating. (remm)
-- Improve processing of relevant version numbers in manifests. (remm)
+- Improve processing of relevant version numbers in manifests. (remm/markt)
- Avoid shallow copy style issue when converting manifests attributes. (remm)
- Make file extension check more robust. (markt)
diff --git a/src/main/java/org/apache/tomcat/jakartaee/ManifestConverter.java
b/src/main/java/org/apache/tomcat/jakartaee/ManifestConverter.java
index 82a5f3b..d3ebfa5 100644
--- a/src/main/java/org/apache/tomcat/jakartaee/ManifestConverter.java
+++ b/src/main/java/org/apache/tomcat/jakartaee/ManifestConverter.java
@@ -268,16 +268,26 @@ public class ManifestConverter implements Converter {
}
/**
- * Determines whether the given package name is the jakarta.servlet package
+ * Determines whether the given package name(s) is(are) the
jakarta.servlet package
* or a sub-package of it (e.g. jakarta.servlet.http). Package names that
* merely contain that string (e.g. jakarta.servletX or
* com.foo.jakarta.servlet) are not matched.
- * @param packageName the package name to test
- * @return true if the package name is jakarta.servlet or a sub-package of
it
+ * <p>
+ * Multi-name inputs are expected to consist of a semi-colon separated
list of package names
+ * @param packageName the package name(s) to test.
+ * @return true if the package name(s) is(are) jakarta.servlet or a
sub-package of it
*/
private static boolean isJakartaServletPackage(String packageName) {
- return packageName != null &&
- (packageName.equals(JAKARTA_SERVLET) ||
packageName.startsWith(JAKARTA_SERVLET + "."));
+ if (packageName == null) {
+ return false;
+ }
+ String[] names = packageName.split(";");
+ for (String name : names) {
+ if (!name.equals(JAKARTA_SERVLET) &&
!name.startsWith(JAKARTA_SERVLET + ".")) {
+ return false;
+ }
+ }
+ return true;
}
private String replaceVersion(String entryValue) {
diff --git
a/src/test/java/org/apache/tomcat/jakartaee/ManifestConverterTest.java
b/src/test/java/org/apache/tomcat/jakartaee/ManifestConverterTest.java
index 6b5438c..7047ada 100644
--- a/src/test/java/org/apache/tomcat/jakartaee/ManifestConverterTest.java
+++ b/src/test/java/org/apache/tomcat/jakartaee/ManifestConverterTest.java
@@ -80,6 +80,28 @@ public class ManifestConverterTest {
assertTrue(result.contains(exports3));
}
+ @Test
+ public void testConvertMultiNameImportPackage() throws IOException {
+ ManifestConverter converter = new ManifestConverter();
+
+ Manifest manifest = new Manifest();
+ manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION,
"1.0");
+ manifest.getMainAttributes().putValue("Import-Package",
+ "javax.servlet;javax.servlet.http;version=\"[2.0.0,5.0.0)\"");
+
+ ByteArrayOutputStream manifestBytes = new ByteArrayOutputStream();
+ manifest.write(manifestBytes);
+
+ ByteArrayOutputStream dest = new ByteArrayOutputStream();
+ boolean converted = converter.convert("META-INF/MANIFEST.MF",
+ new ByteArrayInputStream(manifestBytes.toByteArray()), dest,
EESpecProfiles.TOMCAT);
+
+ assertTrue("Package names should count as a conversion", converted);
+ String result = dest.toString("UTF-8").replaceAll("\\s", "");
+ assertTrue(result, result.contains(
+
"jakarta.servlet;jakarta.servlet.http;version=\"[5.0.0,7.0.0)\""));
+ }
+
@Test
public void testAcceptsRootManifest() {
ManifestConverter converter = new ManifestConverter();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]