private void verifySymbolicName() { Map<String, Map<String, String>> bsn = parseHeader(getHeader(Analyzer.BUNDLE_SYMBOLICNAME)); if (!bsn.isEmpty()) { if (bsn.size() > 1) error("More than one BSN specified " + bsn); String name = (String) bsn.keySet().iterator().next(); if (!SYMBOLICNAME.matcher(name).matches()) { error("Symbolic Name has invalid format: " + name); } } }
private boolean verifyListHeader(String name, Pattern regex, boolean error) { String value = manifest.getMainAttributes().getValue(name); if (value == null) return false; Map<String, Map<String, String>> map = parseHeader(value); for (String header : map.keySet()) { if (!regex.matcher(header).matches()) { String msg = "Invalid value for " + name + ", " + value + " does not match " + regex.pattern(); if (error) error(msg); else warning(msg); } } return true; }
/** * Verify if the header does not contain any other directives * * @param header * @param directives */ private void verifyDirectives(String header, String directives) { Pattern pattern = Pattern.compile(directives); Map<String,Map<String,String>> map = parseHeader(manifest.getMainAttributes().getValue(header)); for ( Map.Entry<String, Map<String,String>> entry : map.entrySet()) { for ( String key : entry.getValue().keySet()) { if ( key.endsWith(":")) { if ( ! key.startsWith("x-")) { Matcher m = pattern.matcher(key); if ( m.matches()) continue; warning("Unknown directive %s in %s, allowed directives are %s, and 'x-*'.", key, header, directives.replace('|', ',')); } } } } }
public void verifyBundleClasspath() { Map<String, Map<String, String>> bcp = parseHeader(getHeader(Analyzer.BUNDLE_CLASSPATH)); if (bcp.isEmpty() || bcp.containsKey(".")) return; for (String path : dot.getResources().keySet()) { if (path.endsWith(".class")) { warning("The Bundle-Classpath does not contain the actual bundle JAR (as specified with '.' in the Bundle-Classpath) but the JAR does contain classes. Is this intentional?"); return; } } }
private boolean verifyListHeader(String name, Pattern regex, boolean error) { String value = manifest.getMainAttributes().getValue(name); if (value == null) return false; Map<String, Map<String, String>> map = parseHeader(value); for (String header : map.keySet()) { if (!regex.matcher(header).matches()) { String msg = "Invalid value for " + name + ", " + value + " does not match " + regex.pattern(); if (error) error(msg); else warning(msg); } } return true; }
private void verifySymbolicName() { Map<String, Map<String, String>> bsn = parseHeader(getHeader(Analyzer.BUNDLE_SYMBOLICNAME)); if (!bsn.isEmpty()) { if (bsn.size() > 1) error("More than one BSN specified " + bsn); String name = (String) bsn.keySet().iterator().next(); if (!isBsn(name)) { error("Symbolic Name has invalid format: " + name); } } }
public Verifier(Jar jar, Properties properties) throws Exception { this.dot = jar; this.properties = properties; this.manifest = jar.getManifest(); if (manifest == null) { manifest = new Manifest(); error("This file contains no manifest and is therefore not a bundle"); } main = this.manifest.getMainAttributes(); verifyHeaders(main); r3 = getHeader(Analyzer.BUNDLE_MANIFESTVERSION) == null; usesRequire = getHeader(Analyzer.REQUIRE_BUNDLE) != null; fragment = getHeader(Analyzer.FRAGMENT_HOST) != null; bundleClasspath = getBundleClassPath(); mimports = parseHeader(manifest.getMainAttributes().getValue( Analyzer.IMPORT_PACKAGE)); mdynimports = parseHeader(manifest.getMainAttributes().getValue( Analyzer.DYNAMICIMPORT_PACKAGE)); mexports = parseHeader(manifest.getMainAttributes().getValue( Analyzer.EXPORT_PACKAGE)); ignore = parseHeader(manifest.getMainAttributes().getValue( Analyzer.IGNORE_PACKAGE)); }
public Verifier(Jar jar, Properties properties) throws Exception { this.dot = jar; this.properties = properties; this.manifest = jar.getManifest(); if (manifest == null) { manifest = new Manifest(); error("This file contains no manifest and is therefore not a bundle"); } main = this.manifest.getMainAttributes(); verifyHeaders(main); r3 = getHeader(Analyzer.BUNDLE_MANIFESTVERSION) == null; usesRequire = getHeader(Analyzer.REQUIRE_BUNDLE) != null; fragment = getHeader(Analyzer.FRAGMENT_HOST) != null; bundleClasspath = getBundleClassPath(); mimports = parseHeader(manifest.getMainAttributes().getValue( Analyzer.IMPORT_PACKAGE)); mdynimports = parseHeader(manifest.getMainAttributes().getValue( Analyzer.DYNAMICIMPORT_PACKAGE)); mexports = parseHeader(manifest.getMainAttributes().getValue( Analyzer.EXPORT_PACKAGE)); ignore = parseHeader(manifest.getMainAttributes().getValue( Analyzer.IGNORE_PACKAGE)); }
private void verifyComponent() { String serviceComponent = getHeader("Service-Component"); if (serviceComponent != null) { Map<String, Map<String, String>> map = parseHeader(serviceComponent); for (String component : map.keySet()) { if (component.indexOf("*") < 0 && !dot.exists(component)) { error("Service-Component entry can not be located in JAR: " + component); } else { // validate component ... } } } }
private void verifyComponent() { String serviceComponent = getHeader("Service-Component"); if (serviceComponent != null) { Map<String, Map<String, String>> map = parseHeader(serviceComponent); for (String component : map.keySet()) { if (component.indexOf("*") < 0 && !dot.exists(component)) { error("Service-Component entry can not be located in JAR: " + component); } else { // validate component ... } } } }
public boolean verifyActivationPolicy(String policy) { Map<String, Map<String, String>> map = parseHeader(policy); if (map.size() == 0) warning("Bundle-ActivationPolicy is set but has no argument %s", policy); else if (map.size() > 1) warning("Bundle-ActivationPolicy has too many arguments %s", policy); else { Map<String, String> s = map.get("lazy"); if (s == null) warning( "Bundle-ActivationPolicy set but is not set to lazy: %s", policy); else return true; } return false; }
public boolean verifyActivationPolicy(String policy) { Map<String, Map<String, String>> map = parseHeader(policy); if (map.size() == 0) warning("Bundle-ActivationPolicy is set but has no argument %s", policy); else if (map.size() > 1) warning("Bundle-ActivationPolicy has too many arguments %s", policy); else { Map<String, String> s = map.get("lazy"); if (s == null) warning( "Bundle-ActivationPolicy set but is not set to lazy: %s", policy); else return true; } return false; }
public void verifyBundleClasspath() { Map<String, Map<String, String>> bcp = parseHeader(getHeader(Analyzer.BUNDLE_CLASSPATH)); if (bcp.isEmpty() || bcp.containsKey(".")) return; for ( String path : bcp.keySet() ) { if ( path.endsWith("/")) error("A Bundle-ClassPath entry must not end with '/': %s", path); if ( dot.getDirectories().containsKey(path)) // We assume that any classes are in a directory // and therefore do not care when the bundle is included return; } for (String path : dot.getResources().keySet()) { if (path.endsWith(".class")) { warning("The Bundle-Classpath does not contain the actual bundle JAR (as specified with '.' in the Bundle-Classpath) but the JAR does contain classes. Is this intentional?"); return; } } }
return; Map<String, Map<String, String>> map = parseHeader(dynamicImportPackage); for (String name : map.keySet()) { name = name.trim();
return; Map<String, Map<String, String>> map = parseHeader(dynamicImportPackage); for (String name : map.keySet()) { name = name.trim();
list.add(dot); } else { Map<String, Map<String, String>> entries = parseHeader(bcp); for (Map.Entry<String, Map<String, String>> ex : entries.entrySet()) { String jarOrDir = ex.getKey();
list.add(dot); } else { Map<String, Map<String, String>> entries = parseHeader(bcp); for (String jarOrDir : entries.keySet()) { if (jarOrDir.equals(".")) {
public void verify() throws IOException { if (classSpace == null) classSpace = analyzeBundleClasspath(dot, parseHeader(getHeader(Analyzer.BUNDLE_CLASSPATH)), contained, referred, uses); verifyManifestFirst(); verifyActivator(); verifyActivationPolicy(); verifyComponent(); verifyNative(); verifyInvalidExports(); verifyInvalidImports(); verifyUnresolvedReferences(); verifySymbolicName(); verifyListHeader("Bundle-RequiredExecutionEnvironment", EENAME, false); verifyHeader("Bundle-ManifestVersion", BUNDLEMANIFESTVERSION, false); verifyHeader("Bundle-Version", VERSION, true); verifyListHeader("Bundle-Classpath", FILE, false); verifyDynamicImportPackage(); verifyBundleClasspath(); if (usesRequire) { if (!getErrors().isEmpty()) { getWarnings() .add( 0, "Bundle uses Require Bundle, this can generate false errors because then not enough information is available without the required bundles"); } } }
public void verify() throws Exception { if (classSpace == null) classSpace = analyzeBundleClasspath(dot, parseHeader(getHeader(Analyzer.BUNDLE_CLASSPATH)), contained, referred, uses);