Boolean (SimpleJavaParameters parameters) { final List<VirtualFile> files = parameters.getClassPath().getVirtualFiles(); for (VirtualFile file : files) { if (file.getName().matches(".*xalan.*\\.jar")) { final VirtualFile root = JarFileSystem.getInstance().getJarRootForLocalFile(file); final VirtualFile manifestFile = root != null ? root.findFileByRelativePath("META-INF/MANIFEST.MF") : null; if (manifestFile != null) { try { Manifest manifest = manifestFile.getUserData(MANIFEST); if (manifest == null) { manifest = new Manifest(manifestFile.getInputStream()); manifestFile.putUserData(MANIFEST, manifest); } Attributes attributes = manifest.getAttributes("org/apache/xalan/"); if (attributes == null) { attributes = manifest.getAttributes("org/apache/xalan"); } if (attributes == null) { LOG.info("No manifest attributes for 'org/apache/xalan/' in " + manifestFile.getPresentableUrl()); continue; } final String version = attributes.getValue("Implementation-Version"); if (version != null) { final String[] parts = version.split("\\."); if (parts.length >= 2) { if (Integer.parseInt(parts[0]) >= 2 && Integer.parseInt(parts[1]) >= 6) { return true; } } LOG.info("Unsupported Xalan version: " + version); } else { LOG.info("No Xalan version information in " + file.getPath()); } } catch (IOException e) { LOG.warn("Unable to read manifest from " + file.getName(), e); } } else { LOG.info("No manifest file in " + file.getPath()); } return false; } } return null; }