Author: remy.maucherat(a)jboss.com
Date: 2011-02-23 06:14:40 -0500 (Wed, 23 Feb 2011)
New Revision: 1666
Removed:
trunk/java/org/apache/catalina/util/Extension.java
trunk/java/org/apache/catalina/util/ExtensionValidator.java
trunk/java/org/apache/catalina/util/ManifestResource.java
Modified:
trunk/java/org/apache/catalina/core/StandardContext.java
trunk/webapps/docs/changelog.xml
Log:
- Drop extension validator, now taken over by AS.
Modified: trunk/java/org/apache/catalina/core/StandardContext.java
===================================================================
--- trunk/java/org/apache/catalina/core/StandardContext.java 2011-02-21 10:33:59 UTC (rev
1665)
+++ trunk/java/org/apache/catalina/core/StandardContext.java 2011-02-23 11:14:40 UTC (rev
1666)
@@ -87,7 +87,6 @@
import org.apache.catalina.deploy.jsp.TagLibraryInfo;
import org.apache.catalina.session.StandardManager;
import org.apache.catalina.util.CharsetMapper;
-import org.apache.catalina.util.ExtensionValidator;
import org.apache.catalina.util.RequestUtil;
import org.apache.catalina.util.URLEncoder;
import org.apache.naming.resources.BaseDirContext;
@@ -3703,26 +3702,10 @@
// Post work directory
postWorkDirectory();
- // Validate required extensions
- boolean dependencyCheck = true;
- try {
- dependencyCheck = ExtensionValidator.validateApplication
- (getResources(), this);
- } catch (IOException ioe) {
- log.error("Error in dependencyCheck", ioe);
- dependencyCheck = false;
- }
-
- if (!dependencyCheck) {
- // do not make application available if depency check fails
- ok = false;
- }
-
// Standard container startup
if (log.isDebugEnabled())
log.debug("Processing standard container startup");
-
// Binding thread
ClassLoader oldCCL = bindThread();
Deleted: trunk/java/org/apache/catalina/util/Extension.java
===================================================================
--- trunk/java/org/apache/catalina/util/Extension.java 2011-02-21 10:33:59 UTC (rev 1665)
+++ trunk/java/org/apache/catalina/util/Extension.java 2011-02-23 11:14:40 UTC (rev 1666)
@@ -1,304 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- *
http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package org.apache.catalina.util;
-
-
-import java.util.StringTokenizer;
-
-
-/**
- * Utility class that represents either an available "Optional Package"
- * (formerly known as "Standard Extension") as described in the manifest
- * of a JAR file, or the requirement for such an optional package. It is
- * used to support the requirements of the Servlet Specification, version
- * 2.3, related to providing shared extensions to all webapps.
- * <p>
- * In addition, static utility methods are available to scan a manifest
- * and return an array of either available or required optional modules
- * documented in that manifest.
- * <p>
- * For more information about optional packages, see the document
- * <em>Optional Package Versioning</em> in the documentation bundle for your
- * Java2 Standard Edition package, in file
- * <code>guide/extensions/versioning.html</code>.
- *
- * @author Craig McClanahan
- * @author Justyna Horwat
- * @author Greg Murray
- * @version $Revision$ $Date$
- */
-
-public final class Extension {
-
-
- // ------------------------------------------------------------- Properties
-
-
- /**
- * The name of the optional package being made available, or required.
- */
- private String extensionName = null;
-
-
- public String getExtensionName() {
- return (this.extensionName);
- }
-
- public void setExtensionName(String extensionName) {
- this.extensionName = extensionName;
- }
-
- /**
- * The URL from which the most recent version of this optional package
- * can be obtained if it is not already installed.
- */
- private String implementationURL = null;
-
- public String getImplementationURL() {
- return (this.implementationURL);
- }
-
- public void setImplementationURL(String implementationURL) {
- this.implementationURL = implementationURL;
- }
-
-
- /**
- * The name of the company or organization that produced this
- * implementation of this optional package.
- */
- private String implementationVendor = null;
-
- public String getImplementationVendor() {
- return (this.implementationVendor);
- }
-
- public void setImplementationVendor(String implementationVendor) {
- this.implementationVendor = implementationVendor;
- }
-
-
- /**
- * The unique identifier of the company that produced the optional
- * package contained in this JAR file.
- */
- private String implementationVendorId = null;
-
- public String getImplementationVendorId() {
- return (this.implementationVendorId);
- }
-
- public void setImplementationVendorId(String implementationVendorId) {
- this.implementationVendorId = implementationVendorId;
- }
-
-
- /**
- * The version number (dotted decimal notation) for this implementation
- * of the optional package.
- */
- private String implementationVersion = null;
-
- public String getImplementationVersion() {
- return (this.implementationVersion);
- }
-
- public void setImplementationVersion(String implementationVersion) {
- this.implementationVersion = implementationVersion;
- }
-
-
- /**
- * The name of the company or organization that originated the
- * specification to which this optional package conforms.
- */
- private String specificationVendor = null;
-
- public String getSpecificationVendor() {
- return (this.specificationVendor);
- }
-
- public void setSpecificationVendor(String specificationVendor) {
- this.specificationVendor = specificationVendor;
- }
-
-
- /**
- * The version number (dotted decimal notation) of the specification
- * to which this optional package conforms.
- */
- private String specificationVersion = null;
-
- public String getSpecificationVersion() {
- return (this.specificationVersion);
- }
-
- public void setSpecificationVersion(String specificationVersion) {
- this.specificationVersion = specificationVersion;
- }
-
-
- /**
- * fulfilled is true if all the required extension dependencies have been
- * satisfied
- */
- private boolean fulfilled = false;
-
- public void setFulfilled(boolean fulfilled) {
- this.fulfilled = fulfilled;
- }
-
- public boolean isFulfilled() {
- return fulfilled;
- }
-
- // --------------------------------------------------------- Public Methods
-
- /**
- * Return <code>true</code> if the specified
<code>Extension</code>
- * (which represents an optional package required by this application)
- * is satisfied by this <code>Extension</code> (which represents an
- * optional package that is already installed. Otherwise, return
- * <code>false</code>.
- *
- * @param required Extension of the required optional package
- */
- public boolean isCompatibleWith(Extension required) {
-
- // Extension Name must match
- if (extensionName == null)
- return (false);
- if (!extensionName.equals(required.getExtensionName()))
- return (false);
-
- // If specified, available specification version must be >= required
- if (required.getSpecificationVersion() != null) {
- if (!isNewer(specificationVersion,
- required.getSpecificationVersion()))
- return (false);
- }
-
- // If specified, Implementation Vendor ID must match
- if (required.getImplementationVendorId() != null) {
- if (implementationVendorId == null)
- return (false);
- if (!implementationVendorId.equals(required
- .getImplementationVendorId()))
- return (false);
- }
-
- // If specified, Implementation version must be >= required
- if (required.getImplementationVersion() != null) {
- if (!isNewer(implementationVersion,
- required.getImplementationVersion()))
- return (false);
- }
-
- // This available optional package satisfies the requirements
- return (true);
-
- }
-
- /**
- * Return a String representation of this object.
- */
- public String toString() {
-
- StringBuilder sb = new StringBuilder("Extension[");
- sb.append(extensionName);
- if (implementationURL != null) {
- sb.append(", implementationURL=");
- sb.append(implementationURL);
- }
- if (implementationVendor != null) {
- sb.append(", implementationVendor=");
- sb.append(implementationVendor);
- }
- if (implementationVendorId != null) {
- sb.append(", implementationVendorId=");
- sb.append(implementationVendorId);
- }
- if (implementationVersion != null) {
- sb.append(", implementationVersion=");
- sb.append(implementationVersion);
- }
- if (specificationVendor != null) {
- sb.append(", specificationVendor=");
- sb.append(specificationVendor);
- }
- if (specificationVersion != null) {
- sb.append(", specificationVersion=");
- sb.append(specificationVersion);
- }
- sb.append("]");
- return (sb.toString());
-
- }
-
-
- // -------------------------------------------------------- Private Methods
-
-
-
- /**
- * Return <code>true</code> if the first version number is greater than
- * or equal to the second; otherwise return <code>false</code>.
- *
- * @param first First version number (dotted decimal)
- * @param second Second version number (dotted decimal)
- *
- * @exception NumberFormatException on a malformed version number
- */
- private boolean isNewer(String first, String second)
- throws NumberFormatException {
-
- if ((first == null) || (second == null))
- return (false);
- if (first.equals(second))
- return (true);
-
- StringTokenizer fTok = new StringTokenizer(first, ".", true);
- StringTokenizer sTok = new StringTokenizer(second, ".", true);
- int fVersion = 0;
- int sVersion = 0;
- while (fTok.hasMoreTokens() || sTok.hasMoreTokens()) {
- if (fTok.hasMoreTokens())
- fVersion = Integer.parseInt(fTok.nextToken());
- else
- fVersion = 0;
- if (sTok.hasMoreTokens())
- sVersion = Integer.parseInt(sTok.nextToken());
- else
- sVersion = 0;
- if (fVersion < sVersion)
- return (false);
- else if (fVersion > sVersion)
- return (true);
- if (fTok.hasMoreTokens()) // Swallow the periods
- fTok.nextToken();
- if (sTok.hasMoreTokens())
- sTok.nextToken();
- }
-
- return (true); // Exact match
-
- }
-
-
-}
Deleted: trunk/java/org/apache/catalina/util/ExtensionValidator.java
===================================================================
--- trunk/java/org/apache/catalina/util/ExtensionValidator.java 2011-02-21 10:33:59 UTC
(rev 1665)
+++ trunk/java/org/apache/catalina/util/ExtensionValidator.java 2011-02-23 11:14:40 UTC
(rev 1666)
@@ -1,427 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- *
http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.catalina.util;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
-import java.util.jar.JarInputStream;
-import java.util.jar.Manifest;
-
-import javax.naming.Binding;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.directory.DirContext;
-
-import org.apache.catalina.core.StandardContext;
-import org.apache.naming.resources.Resource;
-
-
-/**
- * Ensures that all extension dependies are resolved for a WEB application
- * are met. This class builds a master list of extensions available to an
- * applicaiton and then validates those extensions.
- *
- * See
http://java.sun.com/j2se/1.4/docs/guide/extensions/spec.html for
- * a detailed explanation of the extension mechanism in Java.
- *
- * @author Greg Murray
- * @author Justyna Horwat
- * @version $Revision$ $Date$
- *
- */
-public final class ExtensionValidator {
-
- private static org.jboss.logging.Logger log=
- org.jboss.logging.Logger.getLogger(ExtensionValidator.class);
-
- /**
- * The string resources for this package.
- */
- private static StringManager sm =
- StringManager.getManager("org.apache.catalina.util");
-
- private static ArrayList containerAvailableExtensions = null;
- private static ArrayList containerManifestResources = new ArrayList();
-
-
- // ----------------------------------------------------- Static Initializer
-
-
- /**
- * This static initializer loads the container level extensions that are
- * available to all web applications. This method scans all extension
- * directories available via the "java.ext.dirs" System property.
- *
- * The System Class-Path is also scanned for jar files that may contain
- * available extensions.
- */
- static {
-
- // check for container level optional packages
- String systemClasspath = System.getProperty("java.class.path");
-
- StringTokenizer strTok = new StringTokenizer(systemClasspath,
- File.pathSeparator);
-
- // build a list of jar files in the classpath
- while (strTok.hasMoreTokens()) {
- String classpathItem = strTok.nextToken();
- if (classpathItem.toLowerCase(Locale.ENGLISH).endsWith(".jar")) {
- File item = new File(classpathItem);
- if (item.exists()) {
- try {
- addSystemResource(item);
- } catch (IOException e) {
- log.error(sm.getString
- ("extensionValidator.failload", item), e);
- }
- }
- }
- }
-
- // add specified folders to the list
- addFolderList("java.ext.dirs");
- addFolderList("catalina.ext.dirs");
-
- }
-
-
- // --------------------------------------------------------- Public Methods
-
-
- /**
- * Runtime validation of a Web Applicaiton.
- *
- * This method uses JNDI to look up the resources located under a
- * <code>DirContext</code>. It locates Web Application MANIFEST.MF
- * file in the /META-INF/ directory of the application and all
- * MANIFEST.MF files in each JAR file located in the WEB-INF/lib
- * directory and creates an <code>ArrayList</code> of
- * <code>ManifestResorce<code> objects. These objects are then passed
- * to the validateManifestResources method for validation.
- *
- * @param dirContext The JNDI root of the Web Application
- * @param context The context from which the Logger and path to the
- * application
- *
- * @return true if all required extensions satisfied
- */
- public static synchronized boolean validateApplication(
- DirContext dirContext,
- StandardContext context)
- throws IOException {
-
- String appName = context.getPath();
- ArrayList appManifestResources = new ArrayList();
- // If the application context is null it does not exist and
- // therefore is not valid
- if (dirContext == null) return false;
- // Find the Manifest for the Web Applicaiton
- InputStream inputStream = null;
- try {
- NamingEnumeration wne = dirContext.listBindings("/META-INF/");
- Binding binding = (Binding) wne.nextElement();
- if
(binding.getName().toUpperCase(Locale.ENGLISH).equals("MANIFEST.MF")) {
- Resource resource = (Resource)dirContext.lookup
- ("/META-INF/" + binding.getName());
- inputStream = resource.streamContent();
- Manifest manifest = new Manifest(inputStream);
- inputStream.close();
- inputStream = null;
- ManifestResource mre = new ManifestResource
-
(sm.getString("extensionValidator.web-application-manifest"),
- manifest, ManifestResource.WAR);
- appManifestResources.add(mre);
- }
- } catch (NamingException nex) {
- // Application does not contain a MANIFEST.MF file
- } catch (NoSuchElementException nse) {
- // Application does not contain a MANIFEST.MF file
- } finally {
- if (inputStream != null) {
- try {
- inputStream.close();
- } catch (Throwable t) {
- // Ignore
- }
- }
- }
-
- // Locate the Manifests for all bundled JARs
- NamingEnumeration ne = null;
- try {
- if (dirContext != null) {
- ne = dirContext.listBindings("WEB-INF/lib/");
- }
- while ((ne != null) && ne.hasMoreElements()) {
- Binding binding = (Binding)ne.nextElement();
- if
(!binding.getName().toLowerCase(Locale.ENGLISH).endsWith(".jar")) {
- continue;
- }
- Object resourceObject = dirContext.lookup("/WEB-INF/lib/" +
binding.getName());
- if (resourceObject instanceof Resource) {
- Resource resource = (Resource) resourceObject;
- Manifest jmanifest = getManifest(resource.streamContent());
- if (jmanifest != null) {
- ManifestResource mre = new ManifestResource(
- binding.getName(),
- jmanifest,
- ManifestResource.APPLICATION);
- appManifestResources.add(mre);
- }
- }
- }
- } catch (NamingException nex) {
- // Jump out of the check for this application because it
- // has no resources
- }
-
- return validateManifestResources(appName, appManifestResources);
- }
-
-
- /**
- * Checks to see if the given system JAR file contains a MANIFEST, and adds
- * it to the container's manifest resources.
- *
- * @param jarFile The system JAR whose manifest to add
- */
- public static void addSystemResource(File jarFile) throws IOException {
- Manifest manifest = getManifest(new FileInputStream(jarFile));
- if (manifest != null) {
- ManifestResource mre
- = new ManifestResource(jarFile.getAbsolutePath(),
- manifest,
- ManifestResource.SYSTEM);
- containerManifestResources.add(mre);
- }
- }
-
-
- // -------------------------------------------------------- Private Methods
-
-
- /**
- * Validates a <code>ArrayList</code> of
<code>ManifestResource</code>
- * objects. This method requires an application name (which is the
- * context root of the application at runtime).
- *
- * <code>false</false> is returned if the extension dependencies
- * represented by any given <code>ManifestResource</code> objects
- * is not met.
- *
- * This method should also provide static validation of a Web Applicaiton
- * if provided with the necessary parameters.
- *
- * @param appName The name of the Application that will appear in the
- * error messages
- * @param resources A list of <code>ManifestResource</code> objects
- * to be validated.
- *
- * @return true if manifest resource file requirements are met
- */
- private static boolean validateManifestResources(String appName,
- ArrayList resources) {
- boolean passes = true;
- int failureCount = 0;
- ArrayList availableExtensions = null;
-
- Iterator it = resources.iterator();
- while (it.hasNext()) {
- ManifestResource mre = (ManifestResource)it.next();
- ArrayList requiredList = mre.getRequiredExtensions();
- if (requiredList == null) {
- continue;
- }
-
- // build the list of available extensions if necessary
- if (availableExtensions == null) {
- availableExtensions = buildAvailableExtensionsList(resources);
- }
-
- // load the container level resource map if it has not been built
- // yet
- if (containerAvailableExtensions == null) {
- containerAvailableExtensions
- = buildAvailableExtensionsList(containerManifestResources);
- }
-
- // iterate through the list of required extensions
- Iterator rit = requiredList.iterator();
- while (rit.hasNext()) {
- boolean found = false;
- Extension requiredExt = (Extension)rit.next();
- // check the applicaion itself for the extension
- if (availableExtensions != null) {
- Iterator ait = availableExtensions.iterator();
- while (ait.hasNext()) {
- Extension targetExt = (Extension) ait.next();
- if (targetExt.isCompatibleWith(requiredExt)) {
- requiredExt.setFulfilled(true);
- found = true;
- break;
- }
- }
- }
- // check the container level list for the extension
- if (!found && containerAvailableExtensions != null) {
- Iterator cit = containerAvailableExtensions.iterator();
- while (cit.hasNext()) {
- Extension targetExt = (Extension) cit.next();
- if (targetExt.isCompatibleWith(requiredExt)) {
- requiredExt.setFulfilled(true);
- found = true;
- break;
- }
- }
- }
- if (!found) {
- // Failure
- log.info(sm.getString(
- "extensionValidator.extension-not-found-error",
- appName, mre.getResourceName(),
- requiredExt.getExtensionName()));
- passes = false;
- failureCount++;
- }
- }
- }
-
- if (!passes) {
- log.info(sm.getString(
- "extensionValidator.extension-validation-error", appName,
- failureCount + ""));
- }
-
- return passes;
- }
-
- /*
- * Build this list of available extensions so that we do not have to
- * re-build this list every time we iterate through the list of required
- * extensions. All available extensions in all of the
- * <code>MainfestResource</code> objects will be added to a
- * <code>HashMap</code> which is returned on the first dependency list
- * processing pass.
- *
- * The key is the name + implementation version.
- *
- * NOTE: A list is built only if there is a dependency that needs
- * to be checked (performance optimization).
- *
- * @param resources A list of <code>ManifestResource</code> objects
- *
- * @return HashMap Map of available extensions
- */
- private static ArrayList buildAvailableExtensionsList(ArrayList resources) {
-
- ArrayList availableList = null;
-
- Iterator it = resources.iterator();
- while (it.hasNext()) {
- ManifestResource mre = (ManifestResource)it.next();
- ArrayList list = mre.getAvailableExtensions();
- if (list != null) {
- Iterator values = list.iterator();
- while (values.hasNext()) {
- Extension ext = (Extension) values.next();
- if (availableList == null) {
- availableList = new ArrayList();
- availableList.add(ext);
- } else {
- availableList.add(ext);
- }
- }
- }
- }
-
- return availableList;
- }
-
- /**
- * Return the Manifest from a jar file or war file
- *
- * @param inStream Input stream to a WAR or JAR file
- * @return The WAR's or JAR's manifest
- */
- private static Manifest getManifest(InputStream inStream)
- throws IOException {
-
- Manifest manifest = null;
- JarInputStream jin = null;
-
- try {
- jin = new JarInputStream(inStream);
- manifest = jin.getManifest();
- jin.close();
- jin = null;
- } finally {
- if (jin != null) {
- try {
- jin.close();
- } catch (Throwable t) {
- // Ignore
- }
- }
- }
-
- return manifest;
- }
-
-
- /**
- * Add the JARs specified to the extension list.
- */
- private static void addFolderList(String property) {
-
- // get the files in the extensions directory
- String extensionsDir = System.getProperty(property);
- if (extensionsDir != null) {
- StringTokenizer extensionsTok
- = new StringTokenizer(extensionsDir, File.pathSeparator);
- while (extensionsTok.hasMoreTokens()) {
- File targetDir = new File(extensionsTok.nextToken());
- if (!targetDir.exists() || !targetDir.isDirectory()) {
- continue;
- }
- File[] files = targetDir.listFiles();
- for (int i = 0; i < files.length; i++) {
- if
(files[i].getName().toLowerCase(Locale.ENGLISH).endsWith(".jar")) {
- try {
- addSystemResource(files[i]);
- } catch (IOException e) {
- log.error
- (sm.getString
- ("extensionValidator.failload", files[i]),
e);
- }
- }
- }
- }
- }
-
- }
-
-
-}
Deleted: trunk/java/org/apache/catalina/util/ManifestResource.java
===================================================================
--- trunk/java/org/apache/catalina/util/ManifestResource.java 2011-02-21 10:33:59 UTC (rev
1665)
+++ trunk/java/org/apache/catalina/util/ManifestResource.java 2011-02-23 11:14:40 UTC (rev
1666)
@@ -1,242 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- *
http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.catalina.util;
-
-import java.util.Iterator;
-import java.util.jar.Manifest;
-import java.util.jar.Attributes;
-import java.util.ArrayList;
-
-/**
- * Representation of a Manifest file and its available extensions and
- * required extensions
- *
- * @author Greg Murray
- * @author Justyna Horwat
- * @version $Revision$ $Date$
- *
- */
-public class ManifestResource {
-
- // ------------------------------------------------------------- Properties
-
- // These are the resource types for determining effect error messages
- public static final int SYSTEM = 1;
- public static final int WAR = 2;
- public static final int APPLICATION = 3;
-
- private ArrayList availableExtensions = null;
- private ArrayList requiredExtensions = null;
-
- private String resourceName = null;
- private int resourceType = -1;
-
- public ManifestResource(String resourceName, Manifest manifest,
- int resourceType) {
- this.resourceName = resourceName;
- this.resourceType = resourceType;
- processManifest(manifest);
- }
-
- /**
- * Gets the name of the resource
- *
- * @return The name of the resource
- */
- public String getResourceName() {
- return resourceName;
- }
-
- /**
- * Gets the list of available extensions
- *
- * @return List of available extensions
- */
- public ArrayList getAvailableExtensions() {
- return availableExtensions;
- }
-
- /**
- * Gets the list of required extensions
- *
- * @return List of required extensions
- */
- public ArrayList getRequiredExtensions() {
- return requiredExtensions;
- }
-
- // --------------------------------------------------------- Public Methods
-
- /**
- * Gets the number of available extensions
- *
- * @return The number of available extensions
- */
- public int getAvailableExtensionCount() {
- return (availableExtensions != null) ? availableExtensions.size() : 0;
- }
-
- /**
- * Gets the number of required extensions
- *
- * @return The number of required extensions
- */
- public int getRequiredExtensionCount() {
- return (requiredExtensions != null) ? requiredExtensions.size() : 0;
- }
-
- /**
- * Convienience method to check if this <code>ManifestResource</code>
- * has an requires extensions.
- *
- * @return true if required extensions are present
- */
- public boolean requiresExtensions() {
- return (requiredExtensions != null) ? true : false;
- }
-
- /**
- * Returns <code>true</code> if all required extension dependencies
- * have been meet for this <code>ManifestResource</code> object.
- *
- * @return boolean true if all extension dependencies have been satisfied
- */
- public boolean isFulfilled() {
- if (requiredExtensions == null) {
- return true;
- }
- Iterator it = requiredExtensions.iterator();
- while (it.hasNext()) {
- Extension ext = (Extension)it.next();
- if (!ext.isFulfilled()) return false;
- }
- return true;
- }
-
- public String toString() {
-
- StringBuilder sb = new StringBuilder("ManifestResource[");
- sb.append(resourceName);
-
- sb.append(", isFulfilled=");
- sb.append(isFulfilled() +"");
- sb.append(", requiredExtensionCount =");
- sb.append(getRequiredExtensionCount());
- sb.append(", availableExtensionCount=");
- sb.append(getAvailableExtensionCount());
- switch (resourceType) {
- case SYSTEM : sb.append(", resourceType=SYSTEM"); break;
- case WAR : sb.append(", resourceType=WAR"); break;
- case APPLICATION : sb.append(", resourceType=APPLICATION"); break;
- }
- sb.append("]");
- return (sb.toString());
- }
-
-
- // -------------------------------------------------------- Private Methods
-
- private void processManifest(Manifest manifest) {
- availableExtensions = getAvailableExtensions(manifest);
- requiredExtensions = getRequiredExtensions(manifest);
- }
-
- /**
- * Return the set of <code>Extension</code> objects representing
optional
- * packages that are required by the application associated with the
- * specified <code>Manifest</code>.
- *
- * @param manifest Manifest to be parsed
- *
- * @return List of required extensions, or null if the application
- * does not require any extensions
- */
- private ArrayList getRequiredExtensions(Manifest manifest) {
-
- Attributes attributes = manifest.getMainAttributes();
- String names = attributes.getValue("Extension-List");
- if (names == null)
- return null;
-
- ArrayList extensionList = new ArrayList();
- names += " ";
-
- while (true) {
-
- int space = names.indexOf(' ');
- if (space < 0)
- break;
- String name = names.substring(0, space).trim();
- names = names.substring(space + 1);
-
- String value =
- attributes.getValue(name + "-Extension-Name");
- if (value == null)
- continue;
- Extension extension = new Extension();
- extension.setExtensionName(value);
- extension.setImplementationURL
- (attributes.getValue(name + "-Implementation-URL"));
- extension.setImplementationVendorId
- (attributes.getValue(name + "-Implementation-Vendor-Id"));
- String version = attributes.getValue(name +
"-Implementation-Version");
- extension.setImplementationVersion(version);
- extension.setSpecificationVersion
- (attributes.getValue(name + "-Specification-Version"));
- extensionList.add(extension);
- }
- return extensionList;
- }
-
- /**
- * Return the set of <code>Extension</code> objects representing
optional
- * packages that are bundled with the application associated with the
- * specified <code>Manifest</code>.
- *
- * @param manifest Manifest to be parsed
- *
- * @return List of available extensions, or null if the web application
- * does not bundle any extensions
- */
- private ArrayList getAvailableExtensions(Manifest manifest) {
-
- Attributes attributes = manifest.getMainAttributes();
- String name = attributes.getValue("Extension-Name");
- if (name == null)
- return null;
-
- ArrayList extensionList = new ArrayList();
-
- Extension extension = new Extension();
- extension.setExtensionName(name);
- extension.setImplementationURL(
- attributes.getValue("Implementation-URL"));
- extension.setImplementationVendor(
- attributes.getValue("Implementation-Vendor"));
- extension.setImplementationVendorId(
- attributes.getValue("Implementation-Vendor-Id"));
- extension.setImplementationVersion(
- attributes.getValue("Implementation-Version"));
- extension.setSpecificationVersion(
- attributes.getValue("Specification-Version"));
-
- extensionList.add(extension);
-
- return extensionList;
- }
-
-}
Modified: trunk/webapps/docs/changelog.xml
===================================================================
--- trunk/webapps/docs/changelog.xml 2011-02-21 10:33:59 UTC (rev 1665)
+++ trunk/webapps/docs/changelog.xml 2011-02-23 11:14:40 UTC (rev 1666)
@@ -16,6 +16,16 @@
<body>
+<section name="JBoss Web 7.0.0.Beta3 (remm)">
+ <subsection name="Catalina">
+ <changelog>
+ <update>
+ Drop extension validator, now taken over in the embedding application server.
(markt)
+ </update>
+ </changelog>
+ </subsection>
+</section>
+
<section name="JBoss Web 7.0.0.Beta2 (remm)">
<subsection name="General">
<changelog>