You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2009/09/22 20:35:56 UTC

svn commit: r817754 - in /tomcat/trunk/java/org/apache/catalina/startup: ContextConfig.java WebRuleSet.java

Author: markt
Date: Tue Sep 22 18:35:50 2009
New Revision: 817754

URL: http://svn.apache.org/viewvc?rev=817754&view=rev
Log:
Use the re-factored JAR scanning code to scan JAR for web-fragments and parse any that are found. Discovered fragments are not yet used to configure the web app.

Modified:
    tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
    tomcat/trunk/java/org/apache/catalina/startup/WebRuleSet.java

Modified: tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=817754&r1=817753&r2=817754&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Tue Sep 22 18:35:50 2009
@@ -24,11 +24,15 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.JarURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Properties;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
 
 import javax.servlet.ServletContext;
 
@@ -53,6 +57,8 @@
 import org.apache.catalina.deploy.FilterMap;
 import org.apache.catalina.deploy.LoginConfig;
 import org.apache.catalina.deploy.SecurityConstraint;
+import org.apache.tomcat.JarScanner;
+import org.apache.tomcat.JarScannerCallback;
 import org.apache.tomcat.util.res.StringManager;
 import org.apache.tomcat.util.digester.Digester;
 import org.apache.tomcat.util.digester.RuleSet;
@@ -141,18 +147,31 @@
      * deployment descriptor files.
      */
     protected Digester webDigester = null;
-    
-    
+
     /**
-     * The <code>Digester</code>s available to process web application
+     * The <code>Digester</code> we will use to process web fragment
      * deployment descriptor files.
      */
+    protected Digester webFragmentDigester = null;
+
+    
     protected static Digester[] webDigesters = new Digester[4];
+
+    /**
+     * The <code>Digester</code>s available to process web fragment
+     * deployment descriptor files.
+     */
+    protected static Digester[] webFragmentDigesters = new Digester[4];
     
     /**
-     * The <code>Rule</code> used to parse the web.xml
+     * The <code>Rule</code>s used to parse the web.xml
      */
-    protected static WebRuleSet webRuleSet = new WebRuleSet();
+    protected static WebRuleSet webRuleSet = new WebRuleSet(false);
+
+    /**
+     * The <code>Rule</code>s used to parse the web-fragment.xml
+     */
+    protected static WebRuleSet webFragmentRuleSet = new WebRuleSet(true);
 
     /**
      * Deployment count.
@@ -164,6 +183,61 @@
                                 new LoginConfig("NONE", null, null, null);
 
 
+    // Names of JARs that are known not to contain web-fragment.xml
+    private static HashSet<String> noFragmentJars;
+    
+    /*
+     * Initializes the set of JARs that are known not to contain any TLDs
+     */
+    static {
+        noFragmentJars = new HashSet<String>();
+        // Bootstrap JARs
+        noFragmentJars.add("bootstrap.jar");
+        noFragmentJars.add("commons-daemon.jar");
+        noFragmentJars.add("tomcat-juli.jar");
+        // Main JARs
+        noFragmentJars.add("annotations-api.jar");
+        noFragmentJars.add("catalina.jar");
+        noFragmentJars.add("catalina-ant.jar");
+        noFragmentJars.add("catalina-ha.jar");
+        noFragmentJars.add("catalina-tribes.jar");
+        noFragmentJars.add("el-api.jar");
+        noFragmentJars.add("jasper.jar");
+        noFragmentJars.add("jasper-el.jar");
+        noFragmentJars.add("jasper-jdt.jar");
+        noFragmentJars.add("jsp-api.jar");
+        noFragmentJars.add("servlet-api.jar");
+        noFragmentJars.add("tomcat-api.jar");
+        noFragmentJars.add("tomcat-coyote.jar");
+        noFragmentJars.add("tomcat-dbcp.jar");
+        // i18n JARs
+        noFragmentJars.add("tomcat-i18n-en.jar");
+        noFragmentJars.add("tomcat-i18n-es.jar");
+        noFragmentJars.add("tomcat-i18n-fr.jar");
+        noFragmentJars.add("tomcat-i18n-ja.jar");
+        // Misc JARs not included with Tomcat
+        noFragmentJars.add("ant.jar");
+        noFragmentJars.add("commons-dbcp.jar");
+        noFragmentJars.add("commons-beanutils.jar");
+        noFragmentJars.add("commons-fileupload-1.0.jar");
+        noFragmentJars.add("commons-pool.jar");
+        noFragmentJars.add("commons-digester.jar");
+        noFragmentJars.add("commons-logging.jar");
+        noFragmentJars.add("commons-collections.jar");
+        noFragmentJars.add("jmx.jar");
+        noFragmentJars.add("jmx-tools.jar");
+        noFragmentJars.add("xercesImpl.jar");
+        noFragmentJars.add("xmlParserAPIs.jar");
+        noFragmentJars.add("xml-apis.jar");
+        // JARs from J2SE runtime
+        noFragmentJars.add("sunjce_provider.jar");
+        noFragmentJars.add("ldapsec.jar");
+        noFragmentJars.add("localedata.jar");
+        noFragmentJars.add("dnsns.jar");
+        noFragmentJars.add("tools.jar");
+        noFragmentJars.add("sunpkcs11.jar");
+    }
+
     // ------------------------------------------------------------- Properties
 
 
@@ -412,36 +486,47 @@
      * Create (if necessary) and return a Digester configured to process the
      * web application deployment descriptor (web.xml).
      */
-    public static Digester createWebXmlDigester(boolean namespaceAware,
-                                                boolean validation) {
+    public void createWebXmlDigester(boolean namespaceAware,
+            boolean validation) {
         
-        Digester digester = null;
         if (!namespaceAware && !validation) {
             if (webDigesters[0] == null) {
                 webDigesters[0] = DigesterFactory.newDigester(validation,
                         namespaceAware, webRuleSet);
+                webFragmentDigesters[0] = DigesterFactory.newDigester(validation,
+                        namespaceAware, webFragmentRuleSet);
             }
-            digester = webDigesters[0];
+            webDigester = webDigesters[0];
+            webFragmentDigester = webFragmentDigesters[0];
+            
         } else if (!namespaceAware && validation) {
             if (webDigesters[1] == null) {
                 webDigesters[1] = DigesterFactory.newDigester(validation,
                         namespaceAware, webRuleSet);
+                webFragmentDigesters[1] = DigesterFactory.newDigester(validation,
+                        namespaceAware, webFragmentRuleSet);
             }
-            digester = webDigesters[1];
+            webDigester = webDigesters[1];
+            webFragmentDigester = webFragmentDigesters[1];
         } else if (namespaceAware && !validation) {
             if (webDigesters[2] == null) {
                 webDigesters[2] = DigesterFactory.newDigester(validation,
                         namespaceAware, webRuleSet);
+                webFragmentDigesters[2] = DigesterFactory.newDigester(validation,
+                        namespaceAware, webFragmentRuleSet);
             }
-            digester = webDigesters[2];
+            webDigester = webDigesters[2];
+            webFragmentDigester = webFragmentDigesters[2];
         } else {
             if (webDigesters[3] == null) {
                 webDigesters[3] = DigesterFactory.newDigester(validation,
+                        namespaceAware, webFragmentRuleSet);
+                webFragmentDigesters[3] = DigesterFactory.newDigester(validation,
                         namespaceAware, webRuleSet);
             }
-            digester = webDigesters[3];
+            webDigester = webDigesters[3];
+            webFragmentDigester = webFragmentDigesters[3];
         }
-        return digester;
     }
 
     
@@ -816,7 +901,8 @@
                     context.getName(), Boolean.valueOf(useXmlValidation),
                     Boolean.valueOf(useXmlNamespaceAware)));
         }
-        webDigester = createWebXmlDigester(useXmlNamespaceAware, useXmlValidation);
+        
+        createWebXmlDigester(useXmlNamespaceAware, useXmlValidation);
         
         webConfig();
 
@@ -1133,23 +1219,23 @@
             // This is unusual enough to log
             log.info(sm.getString("contextConfig.defaultMissing"));
         } else {
-            parseWebXml(globalWebXml, webXml);
+            parseWebXml(globalWebXml, webXml, false);
         }
 
         // Parse host level web.xml if present
         // Additive apart from welcome pages
         webXml.setReplaceWelcomeFiles(true);
         InputSource hostWebXml = getHostWebXmlSource();
-        parseWebXml(hostWebXml, webXml);
+        parseWebXml(hostWebXml, webXml, false);
         
         // Parse context level web.xml
         webXml.setReplaceWelcomeFiles(true);
         InputSource contextWebXml = getContextWebXmlSource();
-        parseWebXml(contextWebXml, webXml);
+        parseWebXml(contextWebXml, webXml, false);
         
         if (!webXml.isMetadataComplete()) {
             // Have to process JARs for fragments
-            Map<String,WebXml> fragments = processJarsForWebFragments();
+            Map<URL,WebXml> fragments = processJarsForWebFragments();
             
             // Merge the fragments into the main web.xml
             mergeWebFragments(webXml, fragments);
@@ -1301,7 +1387,8 @@
     }
 
 
-    protected void parseWebXml(InputSource source, WebXml dest) {
+    protected void parseWebXml(InputSource source, WebXml dest,
+            boolean fragment) {
         
         if (source == null) return;
 
@@ -1310,10 +1397,17 @@
         // Web digesters and rulesets are shared between contexts but are not
         // thread safe. Whilst there should only be one thread at a time
         // processing a config, play safe and sync.
-        synchronized(webDigester) {
+        Digester digester;
+        if (fragment) {
+            digester = webFragmentDigester;
+        } else {
+            digester = webDigester;
+        }
+        
+        synchronized(digester) {
             
-            webDigester.push(dest);
-            webDigester.setErrorHandler(handler);
+            digester.push(dest);
+            digester.setErrorHandler(handler);
             
             if(log.isDebugEnabled()) {
                 log.debug(sm.getString("contextConfig.applicationStart",
@@ -1321,7 +1415,7 @@
             }
 
             try {
-                webDigester.parse(source);
+                digester.parse(source);
 
                 if (handler.getParseException() != null) {
                     ok = false;
@@ -1338,8 +1432,12 @@
                         source.getSystemId()), e);
                 ok = false;
             } finally {
-                webDigester.reset();
-                webRuleSet.recycle();
+                digester.reset();
+                if (fragment) {
+                    webFragmentRuleSet.recycle();
+                } else {
+                    webRuleSet.recycle();
+                }
             }
         }
     }
@@ -1354,11 +1452,95 @@
      * 
      * @return A map of JAR name to processed web fragment (if any)
      */
-    protected Map<String,WebXml> processJarsForWebFragments() {
-        // TODO SERVLET3
-        return new HashMap<String,WebXml>();
+    protected Map<URL,WebXml> processJarsForWebFragments() {
+        
+        JarScanner jarScanner = context.getJarScanner();
+        FragmentJarScannerCallback callback = new FragmentJarScannerCallback();
+        
+        jarScanner.scan(context.getServletContext(),
+                context.getLoader().getClassLoader(), callback, noFragmentJars);
+        
+        return callback.getFragments();
     }
 
+    private class FragmentJarScannerCallback implements JarScannerCallback {
+
+        private static final String FRAGMENT_LOCATION =
+            "META-INF/web-fragment.xml";
+        private Map<URL,WebXml> fragments = new HashMap<URL,WebXml>();
+        
+        @Override
+        public void scan(JarURLConnection urlConn) throws IOException {
+            
+            JarFile jarFile = null;
+            InputStream stream = null;
+            WebXml fragment = null;
+
+            try {
+                urlConn.setUseCaches(false);
+                jarFile = urlConn.getJarFile();
+                JarEntry fragmentEntry =
+                    jarFile.getJarEntry(FRAGMENT_LOCATION);
+                if (fragmentEntry != null) {
+                    stream = jarFile.getInputStream(fragmentEntry);
+                    InputSource source = new InputSource(
+                            urlConn.getJarFileURL().toString() +
+                            File.separatorChar + FRAGMENT_LOCATION);
+                    source.setByteStream(stream);
+                    fragment = new WebXml();
+                    parseWebXml(source, fragment, true);
+                }
+            } finally {
+                if (jarFile != null) {
+                    try {
+                        jarFile.close();
+                    } catch (Throwable t) {
+                        // ignore
+                    }
+                }
+                if (stream != null) {
+                    try {
+                        stream.close();
+                    } catch (Throwable t) {
+                        // ignore
+                    }
+                }
+                fragments.put(urlConn.getURL(), fragment);
+            }
+        }
+
+        @Override
+        public void scan(File file) throws IOException {
+
+            InputStream stream = null;
+            WebXml fragment = null;
+            
+            try {
+                File fragmentFile = new File(file, FRAGMENT_LOCATION);
+                if (fragmentFile.isFile()) {
+                    stream = new FileInputStream(fragmentFile);
+                    InputSource source =
+                        new InputSource(fragmentFile.toURI().toURL().toString());
+                    source.setByteStream(stream);
+                    fragment = new WebXml();
+                    parseWebXml(source, fragment, true);
+                }
+            } finally {
+                if (stream != null) {
+                    try {
+                        stream.close();
+                    } catch (Throwable t) {
+                        // ignore
+                    }
+                }
+                fragments.put(file.toURI().toURL(), fragment);
+            }
+        }
+        
+        public Map<URL,WebXml> getFragments() {
+            return fragments;
+        }
+    }
 
     /**
      * Merges the web-fragment.xml and web.xml files as per the rules in the
@@ -1368,7 +1550,7 @@
      * @param fragments     The map of JARs to web fragments
      */
     protected void mergeWebFragments(WebXml application,
-            Map<String,WebXml> fragments) {
+            Map<URL,WebXml> fragments) {
         // TODO SERVLET3
         // Check order
         
@@ -1378,9 +1560,9 @@
     }
 
     
-    protected void processAnnotationsInJars(Map<String,WebXml> fragments) {
-        for(String jar : fragments.keySet()) {
-            WebXml fragment = fragments.get(jar);
+    protected void processAnnotationsInJars(Map<URL,WebXml> fragments) {
+        for(URL url : fragments.keySet()) {
+            WebXml fragment = fragments.get(url);
             if (fragment == null || !fragment.isMetadataComplete()) {
                 // Scan jar for annotations
                 // TODO SERVLET3

Modified: tomcat/trunk/java/org/apache/catalina/startup/WebRuleSet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/WebRuleSet.java?rev=817754&r1=817753&r2=817754&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/WebRuleSet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/WebRuleSet.java Tue Sep 22 18:35:50 2009
@@ -54,8 +54,13 @@
      * The matching pattern prefix to use for recognizing our elements.
      */
     protected String prefix = null;
-    
-    
+
+    /**
+     * The full pattern matching prefix, including the webapp or web-fragment
+     * component, to use for matching elements
+     */
+    protected String fullPrefix = null;
+
     /**
      * The <code>SetSessionConfig</code> rule used to parse the web.xml
      */
@@ -79,11 +84,22 @@
 
     /**
      * Construct an instance of this <code>RuleSet</code> with the default
-     * matching pattern prefix.
+     * matching pattern prefix and default fargment setting.
      */
     public WebRuleSet() {
 
-        this("");
+        this("", false);
+
+    }
+
+
+    /**
+     * Construct an instance of this <code>RuleSet</code> with the default
+     * matching pattern prefix.
+     */
+    public WebRuleSet(boolean fragment) {
+
+        this("", fragment);
 
     }
 
@@ -95,14 +111,20 @@
      * @param prefix Prefix for matching pattern rules (including the
      *  trailing slash character)
      */
-    public WebRuleSet(String prefix) {
+    public WebRuleSet(String prefix, boolean fragment) {
 
         super();
         this.namespaceURI = null;
         this.prefix = prefix;
 
-    }
+        if(fragment) {
+            fullPrefix = prefix + "web-fragment";
+        } else {
+            fullPrefix = prefix + "web-app";
+        }
+        
 
+    }
 
     // --------------------------------------------------------- Public Methods
 
@@ -121,407 +143,407 @@
         jspConfig = new SetJspConfig();
         loginConfig = new SetLoginConfig();
         
-        digester.addRule(prefix + "web-app",
+        digester.addRule(fullPrefix,
                          new SetPublicIdRule("setPublicId"));
-        digester.addRule(prefix + "web-app",
+        digester.addRule(fullPrefix,
                          new IgnoreAnnotationsRule());
 
-        digester.addCallMethod(prefix + "web-app/context-param",
+        digester.addCallMethod(fullPrefix + "/context-param",
                                "addContextParam", 2);
-        digester.addCallParam(prefix + "web-app/context-param/param-name", 0);
-        digester.addCallParam(prefix + "web-app/context-param/param-value", 1);
+        digester.addCallParam(fullPrefix + "/context-param/param-name", 0);
+        digester.addCallParam(fullPrefix + "/context-param/param-value", 1);
 
-        digester.addCallMethod(prefix + "web-app/display-name",
+        digester.addCallMethod(fullPrefix + "/display-name",
                                "setDisplayName", 0);
 
-        digester.addRule(prefix + "web-app/distributable",
+        digester.addRule(fullPrefix + "/distributable",
                          new SetDistributableRule());
 
         configureNamingRules(digester);
 
-        digester.addObjectCreate(prefix + "web-app/error-page",
+        digester.addObjectCreate(fullPrefix + "/error-page",
                                  "org.apache.catalina.deploy.ErrorPage");
-        digester.addSetNext(prefix + "web-app/error-page",
+        digester.addSetNext(fullPrefix + "/error-page",
                             "addErrorPage",
                             "org.apache.catalina.deploy.ErrorPage");
 
-        digester.addCallMethod(prefix + "web-app/error-page/error-code",
+        digester.addCallMethod(fullPrefix + "/error-page/error-code",
                                "setErrorCode", 0);
-        digester.addCallMethod(prefix + "web-app/error-page/exception-type",
+        digester.addCallMethod(fullPrefix + "/error-page/exception-type",
                                "setExceptionType", 0);
-        digester.addCallMethod(prefix + "web-app/error-page/location",
+        digester.addCallMethod(fullPrefix + "/error-page/location",
                                "setLocation", 0);
 
-        digester.addObjectCreate(prefix + "web-app/filter",
+        digester.addObjectCreate(fullPrefix + "/filter",
                                  "org.apache.catalina.deploy.FilterDef");
-        digester.addSetNext(prefix + "web-app/filter",
+        digester.addSetNext(fullPrefix + "/filter",
                             "addFilter",
                             "org.apache.catalina.deploy.FilterDef");
 
-        digester.addCallMethod(prefix + "web-app/filter/description",
+        digester.addCallMethod(fullPrefix + "/filter/description",
                                "setDescription", 0);
-        digester.addCallMethod(prefix + "web-app/filter/display-name",
+        digester.addCallMethod(fullPrefix + "/filter/display-name",
                                "setDisplayName", 0);
-        digester.addCallMethod(prefix + "web-app/filter/filter-class",
+        digester.addCallMethod(fullPrefix + "/filter/filter-class",
                                "setFilterClass", 0);
-        digester.addCallMethod(prefix + "web-app/filter/filter-name",
+        digester.addCallMethod(fullPrefix + "/filter/filter-name",
                                "setFilterName", 0);
-        digester.addCallMethod(prefix + "web-app/filter/icon/large-icon",
+        digester.addCallMethod(fullPrefix + "/filter/icon/large-icon",
                                "setLargeIcon", 0);
-        digester.addCallMethod(prefix + "web-app/filter/icon/small-icon",
+        digester.addCallMethod(fullPrefix + "/filter/icon/small-icon",
                                "setSmallIcon", 0);
-        digester.addCallMethod(prefix + "web-app/filter/asyncSupported",
+        digester.addCallMethod(fullPrefix + "/filter/asyncSupported",
                 "setAsyncSupported", 0);
 
-        digester.addCallMethod(prefix + "web-app/filter/init-param",
+        digester.addCallMethod(fullPrefix + "/filter/init-param",
                                "addInitParameter", 2);
-        digester.addCallParam(prefix + "web-app/filter/init-param/param-name",
+        digester.addCallParam(fullPrefix + "/filter/init-param/param-name",
                               0);
-        digester.addCallParam(prefix + "web-app/filter/init-param/param-value",
+        digester.addCallParam(fullPrefix + "/filter/init-param/param-value",
                               1);
 
-        digester.addObjectCreate(prefix + "web-app/filter-mapping",
+        digester.addObjectCreate(fullPrefix + "/filter-mapping",
                                  "org.apache.catalina.deploy.FilterMap");
-        digester.addSetNext(prefix + "web-app/filter-mapping",
+        digester.addSetNext(fullPrefix + "/filter-mapping",
                                  "addFilterMapping",
                                  "org.apache.catalina.deploy.FilterMap");
 
-        digester.addCallMethod(prefix + "web-app/filter-mapping/filter-name",
+        digester.addCallMethod(fullPrefix + "/filter-mapping/filter-name",
                                "setFilterName", 0);
-        digester.addCallMethod(prefix + "web-app/filter-mapping/servlet-name",
+        digester.addCallMethod(fullPrefix + "/filter-mapping/servlet-name",
                                "addServletName", 0);
-        digester.addCallMethod(prefix + "web-app/filter-mapping/url-pattern",
+        digester.addCallMethod(fullPrefix + "/filter-mapping/url-pattern",
                                "addURLPattern", 0);
 
-        digester.addCallMethod(prefix + "web-app/filter-mapping/dispatcher",
+        digester.addCallMethod(fullPrefix + "/filter-mapping/dispatcher",
                                "setDispatcher", 0);
 
-         digester.addCallMethod(prefix + "web-app/listener/listener-class",
+         digester.addCallMethod(fullPrefix + "/listener/listener-class",
                                 "addListener", 0);
          
-        digester.addRule(prefix + "web-app/jsp-config",
+        digester.addRule(fullPrefix + "/jsp-config",
                          jspConfig);
 
-        digester.addObjectCreate(prefix + "web-app/jsp-config/jsp-property-group",
+        digester.addObjectCreate(fullPrefix + "/jsp-config/jsp-property-group",
                                  "org.apache.catalina.deploy.JspPropertyGroup");
-        digester.addSetNext(prefix + "web-app/jsp-config/jsp-property-group",
+        digester.addSetNext(fullPrefix + "/jsp-config/jsp-property-group",
                             "addJspPropertyGroup",
                             "org.apache.catalina.deploy.JspPropertyGroup");
-        digester.addCallMethod(prefix + "web-app/jsp-config/jsp-property-group/deferred-syntax-allowed-as-literal",
+        digester.addCallMethod(fullPrefix + "/jsp-config/jsp-property-group/deferred-syntax-allowed-as-literal",
                                "setDeferredSyntax", 0);
-        digester.addCallMethod(prefix + "web-app/jsp-config/jsp-property-group/el-ignored",
+        digester.addCallMethod(fullPrefix + "/jsp-config/jsp-property-group/el-ignored",
                                "setElIgnored", 0);
-        digester.addCallMethod(prefix + "web-app/jsp-config/jsp-property-group/include-coda",
+        digester.addCallMethod(fullPrefix + "/jsp-config/jsp-property-group/include-coda",
                                "addIncludeCoda", 0);
-        digester.addCallMethod(prefix + "web-app/jsp-config/jsp-property-group/include-prelude",
+        digester.addCallMethod(fullPrefix + "/jsp-config/jsp-property-group/include-prelude",
                                "addIncludePrelude", 0);
-        digester.addCallMethod(prefix + "web-app/jsp-config/jsp-property-group/is-xml",
+        digester.addCallMethod(fullPrefix + "/jsp-config/jsp-property-group/is-xml",
                                "setIsXml", 0);
-        digester.addCallMethod(prefix + "web-app/jsp-config/jsp-property-group/page-encoding",
+        digester.addCallMethod(fullPrefix + "/jsp-config/jsp-property-group/page-encoding",
                                "setPageEncoding", 0);
-        digester.addCallMethod(prefix + "web-app/jsp-config/jsp-property-group/scripting-invalid",
+        digester.addCallMethod(fullPrefix + "/jsp-config/jsp-property-group/scripting-invalid",
                                "setScriptingInvalid", 0);
-        digester.addCallMethod(prefix + "web-app/jsp-config/jsp-property-group/trim-directive-whitespaces",
+        digester.addCallMethod(fullPrefix + "/jsp-config/jsp-property-group/trim-directive-whitespaces",
                                "setTrimWhitespace", 0);
-        digester.addCallMethod(prefix + "web-app/jsp-config/jsp-property-group/url-pattern",
+        digester.addCallMethod(fullPrefix + "/jsp-config/jsp-property-group/url-pattern",
                                "setUrlPattern", 0);
 
-        digester.addRule(prefix + "web-app/login-config",
+        digester.addRule(fullPrefix + "/login-config",
                          loginConfig);
 
-        digester.addObjectCreate(prefix + "web-app/login-config",
+        digester.addObjectCreate(fullPrefix + "/login-config",
                                  "org.apache.catalina.deploy.LoginConfig");
-        digester.addSetNext(prefix + "web-app/login-config",
+        digester.addSetNext(fullPrefix + "/login-config",
                             "setLoginConfig",
                             "org.apache.catalina.deploy.LoginConfig");
 
-        digester.addCallMethod(prefix + "web-app/login-config/auth-method",
+        digester.addCallMethod(fullPrefix + "/login-config/auth-method",
                                "setAuthMethod", 0);
-        digester.addCallMethod(prefix + "web-app/login-config/realm-name",
+        digester.addCallMethod(fullPrefix + "/login-config/realm-name",
                                "setRealmName", 0);
-        digester.addCallMethod(prefix + "web-app/login-config/form-login-config/form-error-page",
+        digester.addCallMethod(fullPrefix + "/login-config/form-login-config/form-error-page",
                                "setErrorPage", 0);
-        digester.addCallMethod(prefix + "web-app/login-config/form-login-config/form-login-page",
+        digester.addCallMethod(fullPrefix + "/login-config/form-login-config/form-login-page",
                                "setLoginPage", 0);
 
-        digester.addCallMethod(prefix + "web-app/mime-mapping",
+        digester.addCallMethod(fullPrefix + "/mime-mapping",
                                "addMimeMapping", 2);
-        digester.addCallParam(prefix + "web-app/mime-mapping/extension", 0);
-        digester.addCallParam(prefix + "web-app/mime-mapping/mime-type", 1);
+        digester.addCallParam(fullPrefix + "/mime-mapping/extension", 0);
+        digester.addCallParam(fullPrefix + "/mime-mapping/mime-type", 1);
 
 
-        digester.addObjectCreate(prefix + "web-app/security-constraint",
+        digester.addObjectCreate(fullPrefix + "/security-constraint",
                                  "org.apache.catalina.deploy.SecurityConstraint");
-        digester.addSetNext(prefix + "web-app/security-constraint",
+        digester.addSetNext(fullPrefix + "/security-constraint",
                             "addSecurityConstraint",
                             "org.apache.catalina.deploy.SecurityConstraint");
 
-        digester.addRule(prefix + "web-app/security-constraint/auth-constraint",
+        digester.addRule(fullPrefix + "/security-constraint/auth-constraint",
                          new SetAuthConstraintRule());
-        digester.addCallMethod(prefix + "web-app/security-constraint/auth-constraint/role-name",
+        digester.addCallMethod(fullPrefix + "/security-constraint/auth-constraint/role-name",
                                "addAuthRole", 0);
-        digester.addCallMethod(prefix + "web-app/security-constraint/display-name",
+        digester.addCallMethod(fullPrefix + "/security-constraint/display-name",
                                "setDisplayName", 0);
-        digester.addCallMethod(prefix + "web-app/security-constraint/user-data-constraint/transport-guarantee",
+        digester.addCallMethod(fullPrefix + "/security-constraint/user-data-constraint/transport-guarantee",
                                "setUserConstraint", 0);
 
-        digester.addObjectCreate(prefix + "web-app/security-constraint/web-resource-collection",
+        digester.addObjectCreate(fullPrefix + "/security-constraint/web-resource-collection",
                                  "org.apache.catalina.deploy.SecurityCollection");
-        digester.addSetNext(prefix + "web-app/security-constraint/web-resource-collection",
+        digester.addSetNext(fullPrefix + "/security-constraint/web-resource-collection",
                             "addCollection",
                             "org.apache.catalina.deploy.SecurityCollection");
-        digester.addCallMethod(prefix + "web-app/security-constraint/web-resource-collection/http-method",
+        digester.addCallMethod(fullPrefix + "/security-constraint/web-resource-collection/http-method",
                                "addMethod", 0);
-        digester.addCallMethod(prefix + "web-app/security-constraint/web-resource-collection/url-pattern",
+        digester.addCallMethod(fullPrefix + "/security-constraint/web-resource-collection/url-pattern",
                                "addPattern", 0);
-        digester.addCallMethod(prefix + "web-app/security-constraint/web-resource-collection/web-resource-name",
+        digester.addCallMethod(fullPrefix + "/security-constraint/web-resource-collection/web-resource-name",
                                "setName", 0);
 
-        digester.addCallMethod(prefix + "web-app/security-role/role-name",
+        digester.addCallMethod(fullPrefix + "/security-role/role-name",
                                "addSecurityRole", 0);
 
-        digester.addRule(prefix + "web-app/servlet",
+        digester.addRule(fullPrefix + "/servlet",
                          new ServletDefCreateRule());
-        digester.addSetNext(prefix + "web-app/servlet",
+        digester.addSetNext(fullPrefix + "/servlet",
                             "addServlet",
                             "org.apache.catalina.deploy.ServletDef");
 
-        digester.addCallMethod(prefix + "web-app/servlet/init-param",
+        digester.addCallMethod(fullPrefix + "/servlet/init-param",
                                "addInitParameter", 2);
-        digester.addCallParam(prefix + "web-app/servlet/init-param/param-name",
+        digester.addCallParam(fullPrefix + "/servlet/init-param/param-name",
                               0);
-        digester.addCallParam(prefix + "web-app/servlet/init-param/param-value",
+        digester.addCallParam(fullPrefix + "/servlet/init-param/param-value",
                               1);
 
-        digester.addCallMethod(prefix + "web-app/servlet/jsp-file",
+        digester.addCallMethod(fullPrefix + "/servlet/jsp-file",
                                "setJspFile", 0);
-        digester.addCallMethod(prefix + "web-app/servlet/load-on-startup",
+        digester.addCallMethod(fullPrefix + "/servlet/load-on-startup",
                                "setLoadOnStartup", 0);
-        digester.addCallMethod(prefix + "web-app/servlet/run-as/role-name",
+        digester.addCallMethod(fullPrefix + "/servlet/run-as/role-name",
                                "setRunAs", 0);
 
-        digester.addCallMethod(prefix + "web-app/servlet/security-role-ref",
+        digester.addCallMethod(fullPrefix + "/servlet/security-role-ref",
                                "addSecurityRoleRef", 2);
-        digester.addCallParam(prefix + "web-app/servlet/security-role-ref/role-link", 1);
-        digester.addCallParam(prefix + "web-app/servlet/security-role-ref/role-name", 0);
+        digester.addCallParam(fullPrefix + "/servlet/security-role-ref/role-link", 1);
+        digester.addCallParam(fullPrefix + "/servlet/security-role-ref/role-name", 0);
 
-        digester.addCallMethod(prefix + "web-app/servlet/servlet-class",
+        digester.addCallMethod(fullPrefix + "/servlet/servlet-class",
                               "setServletClass", 0);
-        digester.addCallMethod(prefix + "web-app/servlet/servlet-name",
+        digester.addCallMethod(fullPrefix + "/servlet/servlet-name",
                               "setServletName", 0);
 
-        digester.addRule(prefix + "web-app/servlet-mapping",
+        digester.addRule(fullPrefix + "/servlet-mapping",
                                new CallMethodMultiRule("addServletMapping", 2, 0));
-        digester.addCallParam(prefix + "web-app/servlet-mapping/servlet-name", 1);
-        digester.addRule(prefix + "web-app/servlet-mapping/url-pattern", new CallParamMultiRule(0));
+        digester.addCallParam(fullPrefix + "/servlet-mapping/servlet-name", 1);
+        digester.addRule(fullPrefix + "/servlet-mapping/url-pattern", new CallParamMultiRule(0));
 
-        digester.addRule(prefix + "web-app/session-config",
+        digester.addRule(fullPrefix + "/session-config",
                          sessionConfig);
         
-        digester.addCallMethod(prefix + "web-app/session-config/session-timeout",
+        digester.addCallMethod(fullPrefix + "/session-config/session-timeout",
                                "setSessionTimeout", 1,
                                new Class[] { Integer.TYPE });
-        digester.addCallParam(prefix + "web-app/session-config/session-timeout", 0);
+        digester.addCallParam(fullPrefix + "/session-config/session-timeout", 0);
 
         // Taglibs pre Servlet 2.4
-        digester.addRule(prefix + "web-app/taglib", new TaglibLocationRule(false));
-        digester.addCallMethod(prefix + "web-app/taglib",
+        digester.addRule(fullPrefix + "/taglib", new TaglibLocationRule(false));
+        digester.addCallMethod(fullPrefix + "/taglib",
                                "addTaglib", 2);
-        digester.addCallParam(prefix + "web-app/taglib/taglib-location", 1);
-        digester.addCallParam(prefix + "web-app/taglib/taglib-uri", 0);
+        digester.addCallParam(fullPrefix + "/taglib/taglib-location", 1);
+        digester.addCallParam(fullPrefix + "/taglib/taglib-uri", 0);
 
         // Taglibs Servlet 2.4 onwards
-        digester.addRule(prefix + "web-app/jsp-config/taglib", new TaglibLocationRule(true));
-        digester.addCallMethod(prefix + "web-app/jsp-config/taglib",
+        digester.addRule(fullPrefix + "/jsp-config/taglib", new TaglibLocationRule(true));
+        digester.addCallMethod(fullPrefix + "/jsp-config/taglib",
                 "addTaglib", 2);
-        digester.addCallParam(prefix + "web-app/jsp-config/taglib/taglib-location", 1);
-        digester.addCallParam(prefix + "web-app/jsp-config/taglib/taglib-uri", 0);
+        digester.addCallParam(fullPrefix + "/jsp-config/taglib/taglib-location", 1);
+        digester.addCallParam(fullPrefix + "/jsp-config/taglib/taglib-uri", 0);
 
-        digester.addCallMethod(prefix + "web-app/welcome-file-list/welcome-file",
+        digester.addCallMethod(fullPrefix + "/welcome-file-list/welcome-file",
                                "addWelcomeFile", 0);
 
-        digester.addCallMethod(prefix + "web-app/locale-encoding-mapping-list/locale-encoding-mapping",
+        digester.addCallMethod(fullPrefix + "/locale-encoding-mapping-list/locale-encoding-mapping",
                               "addLocaleEncodingMapping", 2);
-        digester.addCallParam(prefix + "web-app/locale-encoding-mapping-list/locale-encoding-mapping/locale", 0);
-        digester.addCallParam(prefix + "web-app/locale-encoding-mapping-list/locale-encoding-mapping/encoding", 1);
+        digester.addCallParam(fullPrefix + "/locale-encoding-mapping-list/locale-encoding-mapping/locale", 0);
+        digester.addCallParam(fullPrefix + "/locale-encoding-mapping-list/locale-encoding-mapping/encoding", 1);
 
     }
 
     protected void configureNamingRules(Digester digester) {
         //ejb-local-ref
-        digester.addObjectCreate(prefix + "web-app/ejb-local-ref",
+        digester.addObjectCreate(fullPrefix + "/ejb-local-ref",
                                  "org.apache.catalina.deploy.ContextLocalEjb");
-        digester.addSetNext(prefix + "web-app/ejb-local-ref",
+        digester.addSetNext(fullPrefix + "/ejb-local-ref",
                             "addEjbLocalRef",
                             "org.apache.catalina.deploy.ContextLocalEjb");
-        digester.addCallMethod(prefix + "web-app/ejb-local-ref/description",
+        digester.addCallMethod(fullPrefix + "/ejb-local-ref/description",
                                "setDescription", 0);
-        digester.addCallMethod(prefix + "web-app/ejb-local-ref/ejb-link",
+        digester.addCallMethod(fullPrefix + "/ejb-local-ref/ejb-link",
                                "setLink", 0);
-        digester.addCallMethod(prefix + "web-app/ejb-local-ref/ejb-ref-name",
+        digester.addCallMethod(fullPrefix + "/ejb-local-ref/ejb-ref-name",
                                "setName", 0);
-        digester.addCallMethod(prefix + "web-app/ejb-local-ref/ejb-ref-type",
+        digester.addCallMethod(fullPrefix + "/ejb-local-ref/ejb-ref-type",
                                "setType", 0);
-        digester.addCallMethod(prefix + "web-app/ejb-local-ref/local",
+        digester.addCallMethod(fullPrefix + "/ejb-local-ref/local",
                                "setLocal", 0);
-        digester.addCallMethod(prefix + "web-app/ejb-local-ref/local-home",
+        digester.addCallMethod(fullPrefix + "/ejb-local-ref/local-home",
                                "setHome", 0);
         configureInjectionRules(digester, "web-app/ejb-local-ref/");
 
         //ejb-ref
-        digester.addObjectCreate(prefix + "web-app/ejb-ref",
+        digester.addObjectCreate(fullPrefix + "/ejb-ref",
                                  "org.apache.catalina.deploy.ContextEjb");
-        digester.addSetNext(prefix + "web-app/ejb-ref", 
+        digester.addSetNext(fullPrefix + "/ejb-ref", 
                             "addEjbRef",
                             "org.apache.catalina.deploy.ContextEjb");
-        digester.addCallMethod(prefix + "web-app/ejb-ref/description",
+        digester.addCallMethod(fullPrefix + "/ejb-ref/description",
                                "setDescription", 0);
-        digester.addCallMethod(prefix + "web-app/ejb-ref/ejb-link",
+        digester.addCallMethod(fullPrefix + "/ejb-ref/ejb-link",
                                "setLink", 0);
-        digester.addCallMethod(prefix + "web-app/ejb-ref/ejb-ref-name",
+        digester.addCallMethod(fullPrefix + "/ejb-ref/ejb-ref-name",
                                "setName", 0);
-        digester.addCallMethod(prefix + "web-app/ejb-ref/ejb-ref-type",
+        digester.addCallMethod(fullPrefix + "/ejb-ref/ejb-ref-type",
                                "setType", 0);
-        digester.addCallMethod(prefix + "web-app/ejb-ref/home",
+        digester.addCallMethod(fullPrefix + "/ejb-ref/home",
                                "setHome", 0);
-        digester.addCallMethod(prefix + "web-app/ejb-ref/remote",
+        digester.addCallMethod(fullPrefix + "/ejb-ref/remote",
                                "setRemote", 0);
         configureInjectionRules(digester, "web-app/ejb-ref/");
 
         //env-entry
-        digester.addObjectCreate(prefix + "web-app/env-entry",
+        digester.addObjectCreate(fullPrefix + "/env-entry",
                                  "org.apache.catalina.deploy.ContextEnvironment");
-        digester.addSetNext(prefix + "web-app/env-entry",
+        digester.addSetNext(fullPrefix + "/env-entry",
                             "addEnvEntry",
                             "org.apache.catalina.deploy.ContextEnvironment");
-        digester.addCallMethod(prefix + "web-app/env-entry/description",
+        digester.addCallMethod(fullPrefix + "/env-entry/description",
                                "setDescription", 0);
-        digester.addCallMethod(prefix + "web-app/env-entry/env-entry-name",
+        digester.addCallMethod(fullPrefix + "/env-entry/env-entry-name",
                                "setName", 0);
-        digester.addCallMethod(prefix + "web-app/env-entry/env-entry-type",
+        digester.addCallMethod(fullPrefix + "/env-entry/env-entry-type",
                                "setType", 0);
-        digester.addCallMethod(prefix + "web-app/env-entry/env-entry-value",
+        digester.addCallMethod(fullPrefix + "/env-entry/env-entry-value",
                                "setValue", 0);
         configureInjectionRules(digester, "web-app/env-entry/");
 
         //resource-env-ref
-        digester.addObjectCreate(prefix + "web-app/resource-env-ref",
+        digester.addObjectCreate(fullPrefix + "/resource-env-ref",
             "org.apache.catalina.deploy.ContextResourceEnvRef");
-        digester.addSetNext(prefix + "web-app/resource-env-ref",
+        digester.addSetNext(fullPrefix + "/resource-env-ref",
                             "addResourceEnvRef",
                             "org.apache.catalina.deploy.ContextResourceEnvRef");
-        digester.addCallMethod(prefix + "web-app/resource-env-ref/resource-env-ref-name",
+        digester.addCallMethod(fullPrefix + "/resource-env-ref/resource-env-ref-name",
                 "setName", 0);
-        digester.addCallMethod(prefix + "web-app/resource-env-ref/resource-env-ref-type",
+        digester.addCallMethod(fullPrefix + "/resource-env-ref/resource-env-ref-type",
                 "setType", 0);
         configureInjectionRules(digester, "web-app/ejb-local-ref/");
 
         //message-destination
-        digester.addObjectCreate(prefix + "web-app/message-destination",
+        digester.addObjectCreate(fullPrefix + "/message-destination",
                                  "org.apache.catalina.deploy.MessageDestination");
-        digester.addSetNext(prefix + "web-app/message-destination",
+        digester.addSetNext(fullPrefix + "/message-destination",
                             "addMessageDestination",
                             "org.apache.catalina.deploy.MessageDestination");
-        digester.addCallMethod(prefix + "web-app/message-destination/description",
+        digester.addCallMethod(fullPrefix + "/message-destination/description",
                                "setDescription", 0);
-        digester.addCallMethod(prefix + "web-app/message-destination/display-name",
+        digester.addCallMethod(fullPrefix + "/message-destination/display-name",
                                "setDisplayName", 0);
-        digester.addCallMethod(prefix + "web-app/message-destination/icon/large-icon",
+        digester.addCallMethod(fullPrefix + "/message-destination/icon/large-icon",
                                "setLargeIcon", 0);
-        digester.addCallMethod(prefix + "web-app/message-destination/icon/small-icon",
+        digester.addCallMethod(fullPrefix + "/message-destination/icon/small-icon",
                                "setSmallIcon", 0);
-        digester.addCallMethod(prefix + "web-app/message-destination/message-destination-name",
+        digester.addCallMethod(fullPrefix + "/message-destination/message-destination-name",
                                "setName", 0);
 
         //message-destination-ref
-        digester.addObjectCreate(prefix + "web-app/message-destination-ref",
+        digester.addObjectCreate(fullPrefix + "/message-destination-ref",
                                  "org.apache.catalina.deploy.MessageDestinationRef");
-        digester.addSetNext(prefix + "web-app/message-destination-ref",
+        digester.addSetNext(fullPrefix + "/message-destination-ref",
                             "addMessageDestinationRef",
                             "org.apache.catalina.deploy.MessageDestinationRef");
-        digester.addCallMethod(prefix + "web-app/message-destination-ref/description",
+        digester.addCallMethod(fullPrefix + "/message-destination-ref/description",
                                "setDescription", 0);
-        digester.addCallMethod(prefix + "web-app/message-destination-ref/message-destination-link",
+        digester.addCallMethod(fullPrefix + "/message-destination-ref/message-destination-link",
                                "setLink", 0);
-        digester.addCallMethod(prefix + "web-app/message-destination-ref/message-destination-ref-name",
+        digester.addCallMethod(fullPrefix + "/message-destination-ref/message-destination-ref-name",
                                "setName", 0);
-        digester.addCallMethod(prefix + "web-app/message-destination-ref/message-destination-type",
+        digester.addCallMethod(fullPrefix + "/message-destination-ref/message-destination-type",
                                "setType", 0);
-        digester.addCallMethod(prefix + "web-app/message-destination-ref/message-destination-usage",
+        digester.addCallMethod(fullPrefix + "/message-destination-ref/message-destination-usage",
                                "setUsage", 0);
 
         configureInjectionRules(digester, "web-app/message-destination-ref/");
 
         //resource-ref
-        digester.addObjectCreate(prefix + "web-app/resource-ref",
+        digester.addObjectCreate(fullPrefix + "/resource-ref",
                                  "org.apache.catalina.deploy.ContextResource");
-        digester.addSetNext(prefix + "web-app/resource-ref",
+        digester.addSetNext(fullPrefix + "/resource-ref",
                             "addResourceRef",
                             "org.apache.catalina.deploy.ContextResource");
-        digester.addCallMethod(prefix + "web-app/resource-ref/description",
+        digester.addCallMethod(fullPrefix + "/resource-ref/description",
                                "setDescription", 0);
-        digester.addCallMethod(prefix + "web-app/resource-ref/res-auth",
+        digester.addCallMethod(fullPrefix + "/resource-ref/res-auth",
                                "setAuth", 0);
-        digester.addCallMethod(prefix + "web-app/resource-ref/res-ref-name",
+        digester.addCallMethod(fullPrefix + "/resource-ref/res-ref-name",
                                "setName", 0);
-        digester.addCallMethod(prefix + "web-app/resource-ref/res-sharing-scope",
+        digester.addCallMethod(fullPrefix + "/resource-ref/res-sharing-scope",
                                "setScope", 0);
-        digester.addCallMethod(prefix + "web-app/resource-ref/res-type",
+        digester.addCallMethod(fullPrefix + "/resource-ref/res-type",
                                "setType", 0);
         configureInjectionRules(digester, "web-app/resource-ref/");
 
         //service-ref
-        digester.addObjectCreate(prefix + "web-app/service-ref",
+        digester.addObjectCreate(fullPrefix + "/service-ref",
                                  "org.apache.catalina.deploy.ContextService");
-        digester.addSetNext(prefix + "web-app/service-ref",
+        digester.addSetNext(fullPrefix + "/service-ref",
                             "addServiceRef",
                             "org.apache.catalina.deploy.ContextService");
-        digester.addCallMethod(prefix + "web-app/service-ref/description",
+        digester.addCallMethod(fullPrefix + "/service-ref/description",
                                "setDescription", 0);
-        digester.addCallMethod(prefix + "web-app/service-ref/display-name",
+        digester.addCallMethod(fullPrefix + "/service-ref/display-name",
                                "setDisplayname", 0);
-        digester.addCallMethod(prefix + "web-app/service-ref/icon/large-icon",
+        digester.addCallMethod(fullPrefix + "/service-ref/icon/large-icon",
                                "setLargeIcon", 0);
-        digester.addCallMethod(prefix + "web-app/service-ref/icon/small-icon",
+        digester.addCallMethod(fullPrefix + "/service-ref/icon/small-icon",
                                "setSmallIcon", 0);
-        digester.addCallMethod(prefix + "web-app/service-ref/service-ref-name",
+        digester.addCallMethod(fullPrefix + "/service-ref/service-ref-name",
                                "setName", 0);
-        digester.addCallMethod(prefix + "web-app/service-ref/service-interface",
+        digester.addCallMethod(fullPrefix + "/service-ref/service-interface",
                                "setType", 0);
-        digester.addCallMethod(prefix + "web-app/service-ref/wsdl-file",
+        digester.addCallMethod(fullPrefix + "/service-ref/wsdl-file",
                                "setWsdlfile", 0);
-        digester.addCallMethod(prefix + "web-app/service-ref/jaxrpc-mapping-file",
+        digester.addCallMethod(fullPrefix + "/service-ref/jaxrpc-mapping-file",
                                "setJaxrpcmappingfile", 0);
-        digester.addRule(prefix + "web-app/service-ref/service-qname", new ServiceQnameRule());
+        digester.addRule(fullPrefix + "/service-ref/service-qname", new ServiceQnameRule());
 
-        digester.addRule(prefix + "web-app/service-ref/port-component-ref",
+        digester.addRule(fullPrefix + "/service-ref/port-component-ref",
                                new CallMethodMultiRule("addPortcomponent", 2, 1));
-        digester.addCallParam(prefix + "web-app/service-ref/port-component-ref/service-endpoint-interface", 0);
-        digester.addRule(prefix + "web-app/service-ref/port-component-ref/port-component-link", new CallParamMultiRule(1));
+        digester.addCallParam(fullPrefix + "/service-ref/port-component-ref/service-endpoint-interface", 0);
+        digester.addRule(fullPrefix + "/service-ref/port-component-ref/port-component-link", new CallParamMultiRule(1));
 
-        digester.addObjectCreate(prefix + "web-app/service-ref/handler",
+        digester.addObjectCreate(fullPrefix + "/service-ref/handler",
                                  "org.apache.catalina.deploy.ContextHandler");
-        digester.addRule(prefix + "web-app/service-ref/handler",
+        digester.addRule(fullPrefix + "/service-ref/handler",
                          new SetNextRule("addHandler",
                          "org.apache.catalina.deploy.ContextHandler"));
 
-        digester.addCallMethod(prefix + "web-app/service-ref/handler/handler-name",
+        digester.addCallMethod(fullPrefix + "/service-ref/handler/handler-name",
                                "setName", 0);
-        digester.addCallMethod(prefix + "web-app/service-ref/handler/handler-class",
+        digester.addCallMethod(fullPrefix + "/service-ref/handler/handler-class",
                                "setHandlerclass", 0);
 
-        digester.addCallMethod(prefix + "web-app/service-ref/handler/init-param",
+        digester.addCallMethod(fullPrefix + "/service-ref/handler/init-param",
                                "setProperty", 2);
-        digester.addCallParam(prefix + "web-app/service-ref/handler/init-param/param-name",
+        digester.addCallParam(fullPrefix + "/service-ref/handler/init-param/param-name",
                               0);
-        digester.addCallParam(prefix + "web-app/service-ref/handler/init-param/param-value",
+        digester.addCallParam(fullPrefix + "/service-ref/handler/init-param/param-value",
                               1);
 
-        digester.addRule(prefix + "web-app/service-ref/handler/soap-header", new SoapHeaderRule());
+        digester.addRule(fullPrefix + "/service-ref/handler/soap-header", new SoapHeaderRule());
 
-        digester.addCallMethod(prefix + "web-app/service-ref/handler/soap-role",
+        digester.addCallMethod(fullPrefix + "/service-ref/handler/soap-role",
                                "addSoapRole", 0);
-        digester.addCallMethod(prefix + "web-app/service-ref/handler/port-name",
+        digester.addCallMethod(fullPrefix + "/service-ref/handler/port-name",
                                "addPortName", 0);
         configureInjectionRules(digester, "web-app/service-ref/");
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org