< prev index next >

src/jdk.zipfs/share/classes/jdk/nio/zipfs/JarFileSystem.java

Print this page

        

@@ -60,20 +60,20 @@
 
     JarFileSystem(ZipFileSystemProvider provider, Path zfpath, Map<String,?> env) throws IOException {
         super(provider, zfpath, env);
         if (isMultiReleaseJar()) {
             int version;
-            Object o = env.get("multi-release");
+            Object o = getRuntimeVersion(env);
             if (o instanceof String) {
                 String s = (String)o;
                 if (s.equals("runtime")) {
                     version = Runtime.version().feature();
                 } else {
-                    version = Integer.parseInt(s);
+                    version = Version.parse(s).feature();
                 }
             } else if (o instanceof Integer) {
-                version = (Integer)o;
+                version = Version.parse(((Integer)o).toString()).feature();
             } else if (o instanceof Version) {
                 version = ((Version)o).feature();
             } else {
                 throw new IllegalArgumentException("env parameter must be String, Integer, "
                         + "or Version");

@@ -81,10 +81,22 @@
             createVersionedLinks(version < 0 ? 0 : version);
             setReadOnly();
         }
     }
 
+    /**
+     * Utility method to get the release version for a multi-release JAR.  It
+     * first checks the documented property {@code releaseVersion} and if not
+     * found checks the original property {@code multi-release}
+     * @param env  ZIP FS map
+     * @return  release version or null if it is not specified
+     */
+    private Object getRuntimeVersion(Map<String, ?> env) {
+        Object o = env.get(ZipFileSystemProvider.RELEASE_VERSION);
+        return   o != null ? o : env.get(ZipFileSystemProvider.MULTI_RELEASE);
+    }
+
     private boolean isMultiReleaseJar() throws IOException {
         try (InputStream is = newInputStream(getBytes("/META-INF/MANIFEST.MF"))) {
             String multiRelease = new Manifest(is).getMainAttributes()
                 .getValue(Attributes.Name.MULTI_RELEASE);
             return "true".equalsIgnoreCase(multiRelease);
< prev index next >