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]

Reply via email to