< prev index next >

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

Print this page

        

*** 58,79 **** return super.getInode(lookup.apply(path)); } JarFileSystem(ZipFileSystemProvider provider, Path zfpath, Map<String,?> env) throws IOException { super(provider, zfpath, env); ! if (isMultiReleaseJar()) { int version; - Object o = env.get("multi-release"); if (o instanceof String) { String s = (String)o; if (s.equals("runtime")) { version = Runtime.version().feature(); } else { ! version = Integer.parseInt(s); } } else if (o instanceof Integer) { ! version = (Integer)o; } else if (o instanceof Version) { version = ((Version)o).feature(); } else { throw new IllegalArgumentException("env parameter must be String, Integer, " + "or Version"); --- 58,81 ---- return super.getInode(lookup.apply(path)); } JarFileSystem(ZipFileSystemProvider provider, Path zfpath, Map<String,?> env) throws IOException { super(provider, zfpath, env); ! Object o = getRuntimeVersion(env); ! if (isMultiReleaseJar() && (o != null)) { int version; if (o instanceof String) { String s = (String)o; if (s.equals("runtime")) { version = Runtime.version().feature(); + } else if (s.matches("^[1-9][0-9]*$")) { + version = Version.parse(s).feature(); } else { ! throw new IllegalArgumentException("Invalid runtime version"); } } else if (o instanceof Integer) { ! 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,90 **** --- 83,110 ---- 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 = null; + if( env.containsKey(ZipFileSystemProvider.RELEASE_VERSION)) { + o = env.get(ZipFileSystemProvider.RELEASE_VERSION); + } else { + o = env.get(ZipFileSystemProvider.MULTI_RELEASE); + } + return o; + } + 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 >