geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ivan <xhh...@gmail.com>
Subject Re: svn commit: r1043341 - in /geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src: main/java/org/apache/geronimo/jasper/deployment/ test/java/org/apache/geronimo/jasper/deployment/ test/resources/1_1_dtd/ test/resources/1_2_dtd/ test/re
Date Thu, 09 Dec 2010 05:28:47 GMT
By the way, could you please show me the disadvantages of using xmlbeans
here ? I am thinking that it should be a right place. We could only get the
interested elements, while in web, we need to check all the infos in the
web.xml.
thanks.

2010/12/9 Ivan <xhhsld@gmail.com>

> Hmm, just find that an extra unmarshalTaglib method in the JaxbJavaee
> clsas, will try it later.
>
> 2010/12/9 David Jencks <david_jencks@yahoo.com>
>
>> I think we can use an xml filter for this stuff.... I'll take a look.  Is
>> your set of test tlds pretty complete?
>>
>> thanks
>> david jencks
>>
>> On Dec 8, 2010, at 5:11 PM, Ivan wrote:
>>
>> I did not see a way from openejb side, the tld schema is not compatible
>> between the dtd and xsd, some element names are changed, e.g. tag-class vs
>> tagclass.
>>
>> 2010/12/9 David Jencks <david_jencks@yahoo.com>
>>
>>> I'm ___extremely___ reluctant to bring back any use of xmlbeans if there
>>> is any alternative.  Can't we fix up openejb tld processing to work?
>>>
>>> thanks
>>> david jencks
>>>
>>> On Dec 8, 2010, at 1:40 AM, xuhaihong@apache.org wrote:
>>>
>>> > Author: xuhaihong
>>> > Date: Wed Dec  8 09:40:24 2010
>>> > New Revision: 1043341
>>> >
>>> > URL: http://svn.apache.org/viewvc?rev=1043341&view=rev
>>> > Log:
>>> > GERONIMO-5726 There is no need for jasper builder to parse the whole
>>> tld files, it only needs the tag classes and listener classes for naming
>>> builder. Turn to use xmlbeans to find the interested elements. But
>>> currently, we have no way to do the tld validation.
>>> >
>>> > Added:
>>> >
>>>  geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/java/org/apache/geronimo/jasper/deployment/SchemaParseTest.java
>>>   (with props)
>>> >
>>>  geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/1_1_dtd/taglib-tag-listener.tld
>>> >
>>>  geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/1_2_dtd/taglib-tag-listener.tld
>>> >
>>>  geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/2_0_xsd/taglib-tag-listener.tld
>>> >
>>>  geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/2_1_xsd/taglib-tag-listener.tld
>>> > Modified:
>>> >
>>>  geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/main/java/org/apache/geronimo/jasper/deployment/JspModuleBuilderExtension.java
>>> >
>>> > Modified:
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/main/java/org/apache/geronimo/jasper/deployment/JspModuleBuilderExtension.java
>>> > URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/main/java/org/apache/geronimo/jasper/deployment/JspModuleBuilderExtension.java?rev=1043341&r1=1043340&r2=1043341&view=diff
>>> >
>>> ==============================================================================
>>> > ---
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/main/java/org/apache/geronimo/jasper/deployment/JspModuleBuilderExtension.java
>>> (original)
>>> > +++
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/main/java/org/apache/geronimo/jasper/deployment/JspModuleBuilderExtension.java
>>> Wed Dec  8 09:40:24 2010
>>> > @@ -17,6 +17,7 @@
>>> >
>>> > package org.apache.geronimo.jasper.deployment;
>>> >
>>> > +import java.io.IOException;
>>> > import java.io.InputStream;
>>> > import java.net.URI;
>>> > import java.net.URISyntaxException;
>>> > @@ -38,6 +39,7 @@ import org.apache.geronimo.deployment.De
>>> > import org.apache.geronimo.deployment.DeployableJarFile;
>>> > import org.apache.geronimo.deployment.ModuleIDBuilder;
>>> > import org.apache.geronimo.deployment.service.EnvironmentBuilder;
>>> > +import org.apache.geronimo.deployment.xmlbeans.XmlBeansUtil;
>>> > import org.apache.geronimo.gbean.AbstractName;
>>> > import org.apache.geronimo.gbean.GBeanData;
>>> > import org.apache.geronimo.gbean.GBeanInfo;
>>> > @@ -58,19 +60,18 @@ import org.apache.geronimo.kernel.GBeanA
>>> > import org.apache.geronimo.kernel.Naming;
>>> > import org.apache.geronimo.kernel.config.ConfigurationStore;
>>> > import org.apache.geronimo.kernel.repository.Environment;
>>> > +import org.apache.geronimo.kernel.util.IOUtils;
>>> > import org.apache.geronimo.web.info.ServletInfo;
>>> > import org.apache.geronimo.web.info.WebAppInfo;
>>> > import org.apache.geronimo.web25.deployment.AbstractWebModuleBuilder;
>>> > import org.apache.geronimo.web25.deployment.WebAppInfoBuilder;
>>> > -import org.apache.openejb.jee.JaxbJavaee;
>>> > import org.apache.openejb.jee.JspConfig;
>>> > import org.apache.openejb.jee.JspPropertyGroup;
>>> > -import org.apache.openejb.jee.Listener;
>>> > -import org.apache.openejb.jee.Tag;
>>> > import org.apache.openejb.jee.Taglib;
>>> > -import org.apache.openejb.jee.TldTaglib;
>>> > import org.apache.openejb.jee.WebApp;
>>> > import org.apache.xbean.finder.ClassFinder;
>>> > +import org.apache.xmlbeans.XmlCursor;
>>> > +import org.apache.xmlbeans.XmlException;
>>> > import org.apache.xmlbeans.XmlObject;
>>> > import org.osgi.framework.Bundle;
>>> > import org.osgi.framework.BundleContext;
>>> > @@ -154,7 +155,7 @@ public class JspModuleBuilderExtension i
>>> >         Set<String> listenerNames = new HashSet<String>();
>>> >
>>> >         Collection<URL> urls = getTldFiles(webApp, webModule);
>>> > -        LinkedHashSet<Class> classes = getListenerClasses(webApp,
>>> webModule, urls, listenerNames);
>>> > +        LinkedHashSet<Class<?>> classes = getListenerClasses(webApp,
>>> webModule, urls, listenerNames);
>>> >         ClassFinder classFinder = new ClassFinder(new
>>> ArrayList<Class>(classes));
>>> >         webModule.setClassFinder(classFinder);
>>> >
>>> > @@ -269,7 +270,9 @@ public class JspModuleBuilderExtension i
>>> >
>>> >         // 4. All TLD files in all META-INF(s)
>>> >
>>> tldURLs.addAll(scanGlobalTlds(webModule.getEarContext().getDeploymentBundle()));
>>> > -        log.debug("getTldFiles() Exit: URL[" + tldURLs.size() + "]: "
>>> + tldURLs.toString());
>>> > +        if (log.isDebugEnabled()) {
>>> > +            log.debug("getTldFiles() Exit: URL[" + tldURLs.size() +
>>> "]: " + tldURLs.toString());
>>> > +        }
>>> >         return tldURLs;
>>> >     }
>>> >
>>> > @@ -299,7 +302,7 @@ public class JspModuleBuilderExtension i
>>> >         try {
>>> >             references =
>>> bundleContext.getServiceReferences(TldProvider.class.getName(), null);
>>> >         } catch (InvalidSyntaxException e) {
>>> > -            // this should not happen
>>> > +            // this should not happen
>>> >             throw new DeploymentException("Invalid filter expression",
>>> e);
>>> >         }
>>> >         List<URL> tldURLs = new ArrayList<URL>();
>>> > @@ -312,11 +315,11 @@ public class JspModuleBuilderExtension i
>>> >                 }
>>> >                 bundleContext.ungetService(reference);
>>> >             }
>>> > -        }
>>> > +        }
>>> >         return tldURLs;
>>> >     }
>>> > -
>>> > -    private LinkedHashSet<Class> getListenerClasses(WebApp webApp,
>>> WebModule webModule, Collection<URL> urls, Set<String> listenerNames) throws
>>> DeploymentException {
>>> > +
>>> > +    private LinkedHashSet<Class<?>> getListenerClasses(WebApp webApp,
>>> WebModule webModule, Collection<URL> urls, Set<String> listenerNames) throws
>>> DeploymentException {
>>> >         if (log.isDebugEnabled()) {
>>> >             log.debug("getListenerClasses( " + webApp.toString() + ","
>>> + '\n' +
>>> >                     webModule.getName() + " ): Entry");
>>> > @@ -324,7 +327,7 @@ public class JspModuleBuilderExtension i
>>> >
>>> >         // Get the classloader from the module's EARContext
>>> >         Bundle bundle =
>>> webModule.getEarContext().getDeploymentBundle();
>>> > -        LinkedHashSet<Class> classes = new LinkedHashSet<Class>();
>>> > +        LinkedHashSet<Class<?>> classes = new
>>> LinkedHashSet<Class<?>>();
>>> >
>>> >         for (URL url : urls) {
>>> >             parseTldFile(url, bundle, classes, listenerNames);
>>> > @@ -336,62 +339,91 @@ public class JspModuleBuilderExtension i
>>> >         return classes;
>>> >     }
>>> >
>>> > -    private void parseTldFile(URL url, Bundle bundle,
>>> LinkedHashSet<Class> classes, Set<String> listenerNames) throws
>>> DeploymentException {
>>> > -        log.debug("parseTLDFile( " + url.toString() + " ): Entry");
>>> > -
>>> > -        try {
>>> > -            InputStream in = url.openStream();
>>> > -            TldTaglib tl;
>>> > -            try {
>>> > -                tl = (TldTaglib)
>>> JaxbJavaee.unmarshalTaglib(TldTaglib.class, in);
>>> > -            } finally {
>>> > -                in.close();
>>> > -            }
>>> > -
>>> > -            // Get all the listeners from the TLD file
>>> > -            List<Listener> listeners = tl.getListener();
>>> > -            for (Listener listener : listeners) {
>>> > -                String className = listener.getListenerClass();
>>> > -                if (!excludedListenerNames.contains(className)) {
>>> > -                    try {
>>> > -                        Class clas = bundle.loadClass(className);
>>> > -                        while (clas != null) {
>>> > -                            classes.add(clas);
>>> > -                            clas = clas.getSuperclass();
>>> > -                        }
>>> > -                        listenerNames.add(className);
>>> > -                    }
>>> > -                    catch (ClassNotFoundException e) {
>>> > -                        log.warn("JspModuleBuilderExtension: Could not
>>> load listener class: " + className + " mentioned in TLD file at " +
>>> url.toString());
>>> > -                    }
>>> > -                }
>>> > -            }
>>> > -
>>> > -            // Get all the tags from the TLD file
>>> > -            List<Tag> tags = tl.getTag();
>>> > -            for (Tag tag : tags) {
>>> > -                String className = tag.getTagClass();
>>> > +    protected void parseTldFile(URL url, Bundle bundle,
>>> LinkedHashSet<Class<?>> classes, Set<String> listenerNames) throws
>>> DeploymentException {
>>> > +        if (log.isDebugEnabled()) {
>>> > +            log.debug("parseTLDFile( " + url.toString() + " ):
>>> Entry");
>>> > +        }
>>> > +        System.out.println("Test--------------------------" + url);
>>> > +        List<String> listenerClassNames = new ArrayList<String>();
>>> > +        List<String> tagClassNames = new ArrayList<String>();
>>> > +        parseTldFile(url, listenerClassNames, tagClassNames);
>>> > +
>>> > +        // Get all the listeners from the TLD file
>>> > +        for (String className : listenerClassNames) {
>>> > +            if (!excludedListenerNames.contains(className)) {
>>> >                 try {
>>> > -                    Class clas = bundle.loadClass(className);
>>> > +                    Class<?> clas = bundle.loadClass(className);
>>> >                     while (clas != null) {
>>> >                         classes.add(clas);
>>> >                         clas = clas.getSuperclass();
>>> >                     }
>>> > +                    listenerNames.add(className);
>>> > +                } catch (ClassNotFoundException e) {
>>> > +                    log.warn("JspModuleBuilderExtension: Could not
>>> load listener class: " + className + " mentioned in TLD file at " +
>>> url.toString());
>>> >                 }
>>> > -                catch (ClassNotFoundException e) {
>>> > -                    log.warn("JspModuleBuilderExtension: Could not
>>> load tag class: " + className + " mentioned in TLD file at " +
>>> url.toString());
>>> > +            }
>>> > +        }
>>> > +
>>> > +        // Get all the tags from the TLD file
>>> > +        for (String className : tagClassNames) {
>>> > +            try {
>>> > +                Class<?> clas = bundle.loadClass(className);
>>> > +                while (clas != null) {
>>> > +                    classes.add(clas);
>>> > +                    clas = clas.getSuperclass();
>>> >                 }
>>> > +            } catch (ClassNotFoundException e) {
>>> > +                log.warn("JspModuleBuilderExtension: Could not load
>>> tag class: " + className + " mentioned in TLD file at " + url.toString());
>>> >             }
>>> > -        } catch (Exception ioe) {
>>> > -            throw new DeploymentException("Could not find TLD file at
>>> " + url.toString(), ioe);
>>> >         }
>>> > +        if (log.isDebugEnabled()) {
>>> > +            log.debug("parseTLDFile(): Exit");
>>> > +        }
>>> > +    }
>>> >
>>> > -        log.debug("parseTLDFile(): Exit");
>>> > +    protected void parseTldFile(URL url, List<String>
>>> listenerClassNames, List<String> tagClassNames)
>>> > +            throws DeploymentException {
>>> > +        InputStream in = null;
>>> > +        XmlCursor cursor = null;
>>> > +        try {
>>> > +            in = url.openStream();
>>> > +            XmlObject xmlObject = XmlBeansUtil.parse(in);
>>> > +            cursor = xmlObject.newCursor();
>>> > +            cursor.toStartDoc();
>>> > +            cursor.toFirstChild();
>>> > +            String namespaceURI = cursor.getName().getNamespaceURI();
>>> > +            cursor.toStartDoc();
>>> > +            cursor.toChild(namespaceURI, "taglib");
>>> > +            if (!cursor.toFirstChild()) {
>>> > +                return;
>>> > +            }
>>> > +            do {
>>> > +                String name = cursor.getName().getLocalPart();
>>> > +                if ("tag".equals(name)) {
>>> > +                    cursor.push();
>>> > +                    if (cursor.toChild(namespaceURI, "tag-class") ||
>>> cursor.toChild(namespaceURI, "tagclass")) {
>>> > +                        tagClassNames.add(cursor.getTextValue());
>>> > +                    }
>>> > +                    cursor.pop();
>>> > +                } else if ("listener".equals(name)) {
>>> > +                    cursor.push();
>>> > +                    if (cursor.toChild(namespaceURI,
>>> "listener-class")) {
>>> > +                        listenerClassNames.add(cursor.getTextValue());
>>> > +                    }
>>> > +                    cursor.pop();
>>> > +                }
>>> > +            } while (cursor.toNextSibling());
>>> > +        } catch (IOException e) {
>>> > +            throw new DeploymentException("JspModuleBuilderExtension:
>>> Could not parse tld file " + url, e);
>>> > +        } catch (XmlException e) {
>>> > +            throw new DeploymentException("JspModuleBuilderExtension:
>>> Could not parse tld file " + url, e);
>>> > +        } finally {
>>> > +            IOUtils.close(in);
>>> > +        }
>>> >     }
>>> >
>>> >     private URI createURI(String path) throws URISyntaxException {
>>> >         path = path.replaceAll(" ", "%20");
>>> >         return new URI(path);
>>> >     }
>>> > -
>>> > }
>>> >
>>> > Added:
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/java/org/apache/geronimo/jasper/deployment/SchemaParseTest.java
>>> > URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/java/org/apache/geronimo/jasper/deployment/SchemaParseTest.java?rev=1043341&view=auto
>>> >
>>> ==============================================================================
>>> > ---
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/java/org/apache/geronimo/jasper/deployment/SchemaParseTest.java
>>> (added)
>>> > +++
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/java/org/apache/geronimo/jasper/deployment/SchemaParseTest.java
>>> Wed Dec  8 09:40:24 2010
>>> > @@ -0,0 +1,134 @@
>>> > +/**
>>> > + *  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.geronimo.jasper.deployment;
>>> > +
>>> > +import java.net.URL;
>>> > +import java.util.ArrayList;
>>> > +import java.util.Arrays;
>>> > +import java.util.Collection;
>>> > +import java.util.Collections;
>>> > +import java.util.List;
>>> > +
>>> > +import junit.framework.TestCase;
>>> > +
>>> > +import org.apache.geronimo.common.DeploymentException;
>>> > +import org.apache.geronimo.j2ee.deployment.NamingBuilder;
>>> > +import org.apache.geronimo.kernel.repository.Environment;
>>> > +import org.apache.geronimo.web.info.ServletInfo;
>>> > +import org.apache.geronimo.web.info.WebAppInfo;
>>> > +import org.junit.Assert;
>>> > +
>>> > +/**
>>> > + * @version $Rev$ $Date$
>>> > + */
>>> > +public class SchemaParseTest extends TestCase {
>>> > +
>>> > +    private TestJspModuleBuilderExtension jspModuleBuilderExtension;
>>> > +
>>> > +    private ClassLoader classLoader =
>>> SchemaParseTest.class.getClassLoader();
>>> > +
>>> > +    @Override
>>> > +    public void setUp() {
>>> > +        //webAppInfo is used to prevent the NPE in
>>> JspModuleBuilderExtension constructor
>>> > +        WebAppInfo webAppInfo = new WebAppInfo();
>>> > +        webAppInfo.servlets.add(new ServletInfo());
>>> > +        jspModuleBuilderExtension = new
>>> TestJspModuleBuilderExtension(null, null, webAppInfo, null);
>>> > +    }
>>> > +
>>> > +    public void testParse11DTD() throws Exception {
>>> > +        URL url =
>>> classLoader.getResource("1_1_dtd/taglib-tag-listener.tld");
>>> > +        List<String> expectedTagClassNames =
>>> Arrays.asList("org.apache.struts.taglib.nested.NestedPropertyTag",
>>> > +
>>>  "org.apache.struts.taglib.nested.NestedWriteNestingTag",
>>> > +                "org.apache.struts.taglib.nested.NestedRootTag",
>>> > +
>>>  "org.apache.struts.taglib.nested.bean.NestedDefineTag",
>>> > +
>>>  "org.apache.struts.taglib.nested.bean.NestedMessageTag",
>>> > +                "org.apache.struts.taglib.nested.bean.NestedSizeTag",
>>> > +                "org.apache.struts.taglib.nested.bean.NestedWriteTag",
>>> > +
>>>  "org.apache.struts.taglib.nested.html.NestedCheckboxTag",
>>> > +
>>>  "org.apache.struts.taglib.nested.html.NestedErrorsTag",
>>> > +                "org.apache.struts.taglib.nested.html.NestedFileTag");
>>> > +        List<String> expectedListenerClassNames = Collections.<String>
>>> emptyList();
>>> > +        jspModuleBuilderExtension.testParse(url,
>>> expectedListenerClassNames, expectedTagClassNames);
>>> > +    }
>>> > +
>>> > +    public void testParse12DTD() throws Exception {
>>> > +        URL url =
>>> classLoader.getResource("1_2_dtd/taglib-tag-listener.tld");
>>> > +        List<String> expectedTagClassNames =
>>> Arrays.asList("examples.LogTag");
>>> > +        List<String> expectedListenerClassNames =
>>> Arrays.asList("TestListenerClassName");
>>> > +        jspModuleBuilderExtension.testParse(url,
>>> expectedListenerClassNames, expectedTagClassNames);
>>> > +    }
>>> > +
>>> > +    public void testParse20XSD() throws Exception {
>>> > +        URL url =
>>> classLoader.getResource("2_0_xsd/taglib-tag-listener.tld");
>>> > +        List<String> expectedTagClassNames =
>>> Arrays.asList("org.apache.taglibs.standard.tag.rt.fmt.RequestEncodingTag",
>>> > +                "org.apache.taglibs.standard.tag.rt.fmt.SetLocaleTag",
>>> > +                "org.apache.taglibs.standard.tag.rt.fmt.TimeZoneTag",
>>> > +
>>>  "org.apache.taglibs.standard.tag.rt.fmt.SetTimeZoneTag",
>>> > +                "org.apache.taglibs.standard.tag.rt.fmt.BundleTag",
>>> > +                "org.apache.taglibs.standard.tag.rt.fmt.SetBundleTag",
>>> > +                "org.apache.taglibs.standard.tag.rt.fmt.MessageTag",
>>> "org.apache.taglibs.standard.tag.rt.fmt.ParamTag",
>>> > +
>>>  "org.apache.taglibs.standard.tag.rt.fmt.FormatNumberTag",
>>> > +
>>>  "org.apache.taglibs.standard.tag.rt.fmt.ParseNumberTag",
>>> > +
>>>  "org.apache.taglibs.standard.tag.rt.fmt.FormatDateTag",
>>> > +
>>>  "org.apache.taglibs.standard.tag.rt.fmt.ParseDateTag");
>>> > +        List<String> expectedListenerClassNames =
>>> Arrays.asList("TestListenerA", "TestListenerB");
>>> > +        jspModuleBuilderExtension.testParse(url,
>>> expectedListenerClassNames, expectedTagClassNames);
>>> > +    }
>>> > +
>>> > +    public void testParse21XSD() throws Exception {
>>> > +        URL url =
>>> classLoader.getResource("2_1_xsd/taglib-tag-listener.tld");
>>> > +        List<String> expectedTagClassNames =
>>> Arrays.asList("org.apache.taglibs.standard.tag.rt.fmt.RequestEncodingTag",
>>> > +                "org.apache.taglibs.standard.tag.rt.fmt.SetLocaleTag",
>>> > +                "org.apache.taglibs.standard.tag.rt.fmt.TimeZoneTag",
>>> > +
>>>  "org.apache.taglibs.standard.tag.rt.fmt.SetTimeZoneTag",
>>> > +                "org.apache.taglibs.standard.tag.rt.fmt.BundleTag",
>>> > +                "org.apache.taglibs.standard.tag.rt.fmt.SetBundleTag",
>>> > +                "org.apache.taglibs.standard.tag.rt.fmt.MessageTag",
>>> "org.apache.taglibs.standard.tag.rt.fmt.ParamTag",
>>> > +
>>>  "org.apache.taglibs.standard.tag.rt.fmt.FormatNumberTag",
>>> > +
>>>  "org.apache.taglibs.standard.tag.rt.fmt.ParseNumberTag",
>>> > +
>>>  "org.apache.taglibs.standard.tag.rt.fmt.FormatDateTag",
>>> > +
>>>  "org.apache.taglibs.standard.tag.rt.fmt.ParseDateTag");
>>> > +        List<String> expectedListenerClassNames =
>>> Arrays.asList("TestListenerA", "TestListenerB");
>>> > +        jspModuleBuilderExtension.testParse(url,
>>> expectedListenerClassNames, expectedTagClassNames);
>>> > +    }
>>> > +
>>> > +    static class TestJspModuleBuilderExtension extends
>>> JspModuleBuilderExtension {
>>> > +
>>> > +        public TestJspModuleBuilderExtension(Environment
>>> defaultEnvironment, Collection<String> excludedListenerNames,
>>> > +                WebAppInfo defaultJspServlet, NamingBuilder
>>> namingBuilders) {
>>> > +            super(defaultEnvironment, excludedListenerNames,
>>> defaultJspServlet, namingBuilders);
>>> > +        }
>>> > +
>>> > +        public void testParse(URL url, List<String>
>>> expectedListenerClassNames, List<String> expectedTagClassNames)
>>> > +                throws DeploymentException {
>>> > +            List<String> listenerClassNames = new ArrayList<String>();
>>> > +            List<String> tagClassNames = new ArrayList<String>();
>>> > +            parseTldFile(url, listenerClassNames, tagClassNames);
>>> > +            Assert.assertEquals(expectedListenerClassNames.size(),
>>> listenerClassNames.size());
>>> > +            for (String expectedListenerClassName :
>>> expectedListenerClassNames) {
>>> > +                Assert.assertTrue("expected class name " +
>>> expectedListenerClassName + "is not found in the result"
>>> > +                        + listenerClassNames,
>>> listenerClassNames.contains(expectedListenerClassName));
>>> > +            }
>>> > +            Assert.assertEquals(expectedTagClassNames.size(),
>>> tagClassNames.size());
>>> > +            for (String expectedTagClassName : expectedTagClassNames)
>>> {
>>> > +                Assert.assertTrue("expected class name " +
>>> expectedTagClassName + "is not found in the result"
>>> > +                        + listenerClassNames,
>>> tagClassNames.contains(expectedTagClassName));
>>> > +            }
>>> > +        }
>>> > +    }
>>> > +}
>>> >
>>> > Propchange:
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/java/org/apache/geronimo/jasper/deployment/SchemaParseTest.java
>>> >
>>> ------------------------------------------------------------------------------
>>> >    svn:eol-style = native
>>> >
>>> > Propchange:
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/java/org/apache/geronimo/jasper/deployment/SchemaParseTest.java
>>> >
>>> ------------------------------------------------------------------------------
>>> >    svn:keywords = Date Revision
>>> >
>>> > Propchange:
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/java/org/apache/geronimo/jasper/deployment/SchemaParseTest.java
>>> >
>>> ------------------------------------------------------------------------------
>>> >    svn:mime-type = text/plain
>>> >
>>> > Added:
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/1_1_dtd/taglib-tag-listener.tld
>>> > URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/1_1_dtd/taglib-tag-listener.tld?rev=1043341&view=auto
>>> >
>>> ==============================================================================
>>> > ---
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/1_1_dtd/taglib-tag-listener.tld
>>> (added)
>>> > +++
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/1_1_dtd/taglib-tag-listener.tld
>>> Wed Dec  8 09:40:24 2010
>>> > @@ -0,0 +1,565 @@
>>> > +<?xml version="1.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.
>>> > +-->
>>> > +<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag
>>> Library 1.1//EN" "
>>> http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
>>> > +<taglib>
>>> > +    <tlibversion>1.2</tlibversion>
>>> > +    <jspversion>1.1</jspversion>
>>> > +    <shortname>nested</shortname>
>>> > +    <uri>http://struts.apache.org/tags-nested</uri>
>>> > +    <tag>
>>> > +        <name>nest</name>
>>> > +
>>>  <tagclass>org.apache.struts.taglib.nested.NestedPropertyTag</tagclass>
>>> > +        <bodycontent>JSP</bodycontent>
>>> > +        <attribute>
>>> > +            <name>property</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +    </tag>
>>> > +    <tag>
>>> > +        <name>writeNesting</name>
>>> > +
>>>  <tagclass>org.apache.struts.taglib.nested.NestedWriteNestingTag</tagclass>
>>> > +
>>>  <teiclass>org.apache.struts.taglib.nested.NestedWriteNestingTei</teiclass>
>>> > +        <bodycontent>JSP</bodycontent>
>>> > +        <attribute>
>>> > +            <name>property</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>id</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>filter</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +    </tag>
>>> > +    <tag>
>>> > +        <name>root</name>
>>> > +
>>>  <tagclass>org.apache.struts.taglib.nested.NestedRootTag</tagclass>
>>> > +        <bodycontent>JSP</bodycontent>
>>> > +        <attribute>
>>> > +            <name>name</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +    </tag>
>>> > +    <tag>
>>> > +        <name>define</name>
>>> > +
>>>  <tagclass>org.apache.struts.taglib.nested.bean.NestedDefineTag</tagclass>
>>> > +
>>>  <teiclass>org.apache.struts.taglib.nested.bean.NestedDefineTei</teiclass>
>>> > +        <bodycontent>empty</bodycontent>
>>> > +        <attribute>
>>> > +            <name>id</name>
>>> > +            <required>true</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>name</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>property</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>scope</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>toScope</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>type</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>value</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +    </tag>
>>> > +    <tag>
>>> > +        <name>message</name>
>>> > +
>>>  <tagclass>org.apache.struts.taglib.nested.bean.NestedMessageTag</tagclass>
>>> > +        <bodycontent>empty</bodycontent>
>>> > +        <attribute>
>>> > +            <name>arg0</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>arg1</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>arg2</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>arg3</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>arg4</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>bundle</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>key</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>locale</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>name</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>property</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>scope</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +    </tag>
>>> > +    <tag>
>>> > +        <name>size</name>
>>> > +
>>>  <tagclass>org.apache.struts.taglib.nested.bean.NestedSizeTag</tagclass>
>>> > +        <teiclass>org.apache.struts.taglib.bean.SizeTei</teiclass>
>>> > +        <bodycontent>empty</bodycontent>
>>> > +        <attribute>
>>> > +            <name>collection</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>id</name>
>>> > +            <required>true</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>name</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>property</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>scope</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +    </tag>
>>> > +    <tag>
>>> > +        <name>write</name>
>>> > +
>>>  <tagclass>org.apache.struts.taglib.nested.bean.NestedWriteTag</tagclass>
>>> > +        <bodycontent>empty</bodycontent>
>>> > +        <attribute>
>>> > +            <name>bundle</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>filter</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>format</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>formatKey</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>ignore</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>locale</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>name</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>property</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>scope</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +    </tag>
>>> > +    <tag>
>>> > +        <name>checkbox</name>
>>> > +
>>>  <tagclass>org.apache.struts.taglib.nested.html.NestedCheckboxTag</tagclass>
>>> > +        <attribute>
>>> > +            <name>accesskey</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>alt</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>altKey</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>disabled</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>indexed</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>name</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onblur</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onchange</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onclick</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>ondblclick</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onfocus</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onkeydown</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onkeypress</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onkeyup</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onmousedown</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onmousemove</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onmouseout</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onmouseover</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onmouseup</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>property</name>
>>> > +            <required>true</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>style</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>styleClass</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>styleId</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>tabindex</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>title</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>titleKey</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>value</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +    </tag>
>>> > +    <tag>
>>> > +        <name>errors</name>
>>> > +
>>>  <tagclass>org.apache.struts.taglib.nested.html.NestedErrorsTag</tagclass>
>>> > +        <bodycontent>empty</bodycontent>
>>> > +        <attribute>
>>> > +            <name>bundle</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>locale</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>name</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>property</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +    </tag>
>>> > +    <tag>
>>> > +        <name>file</name>
>>> > +
>>>  <tagclass>org.apache.struts.taglib.nested.html.NestedFileTag</tagclass>
>>> > +        <attribute>
>>> > +            <name>accesskey</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>accept</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>alt</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>altKey</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>disabled</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>indexed</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>maxlength</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>name</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onblur</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onchange</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onclick</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>ondblclick</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onfocus</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onkeydown</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onkeypress</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onkeyup</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onmousedown</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onmousemove</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onmouseout</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onmouseover</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>onmouseup</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>property</name>
>>> > +            <required>true</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>size</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>style</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>styleClass</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>styleId</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>tabindex</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>title</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>titleKey</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +        <attribute>
>>> > +            <name>value</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +    </tag>
>>> > +</taglib>
>>> >
>>> > Added:
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/1_2_dtd/taglib-tag-listener.tld
>>> > URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/1_2_dtd/taglib-tag-listener.tld?rev=1043341&view=auto
>>> >
>>> ==============================================================================
>>> > ---
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/1_2_dtd/taglib-tag-listener.tld
>>> (added)
>>> > +++
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/1_2_dtd/taglib-tag-listener.tld
>>> Wed Dec  8 09:40:24 2010
>>> > @@ -0,0 +1,53 @@
>>> > +<?xml version="1.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.
>>> > +-->
>>> > +<!DOCTYPE taglib
>>> > +        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library
>>> 1.2//EN"
>>> > +    "http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">
>>> > +<taglib>
>>> > +    <tlib-version>1.0</tlib-version>
>>> > +    <jsp-version>1.2</jsp-version>
>>> > +    <short-name>debug</short-name>
>>> > +    <uri>http://jakarta.apache.org/tomcat/debug-taglib</uri>
>>> > +    <description>
>>> > +    This tag library defines no tags.  Instead, its purpose is
>>> encapsulated
>>> > +    in the TagLibraryValidator implementation that simply outputs the
>>> XML
>>> > +    version of a JSP page to standard output, whenever this tag
>>> library is
>>> > +    referenced in a "taglib" directive in a JSP page.
>>> > +    </description>
>>> > +    <validator>
>>> > +        <validator-class>validators.DebugValidator</validator-class>
>>> > +    </validator>
>>> > +    <info>info</info>
>>> > +    <tag>
>>> > +        <name>log</name>
>>> > +        <tag-class>examples.LogTag</tag-class>
>>> > +        <tei-class>examples.LogTei</tei-class>
>>> > +        <body-content>tagdependent</body-content>
>>> > +        <description>
>>> > +    Perform a server side action; Log the message.
>>> > +        </description>
>>> > +        <attribute>
>>> > +            <name>toBrowser</name>
>>> > +            <required>false</required>
>>> > +            <rtexprvalue>true</rtexprvalue>
>>> > +        </attribute>
>>> > +    </tag>
>>> > +    <listener>
>>> > +        <listener-class>TestListenerClassName</listener-class>
>>> > +    </listener>
>>> > +</taglib>
>>> >
>>> > Added:
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/2_0_xsd/taglib-tag-listener.tld
>>> > URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/2_0_xsd/taglib-tag-listener.tld?rev=1043341&view=auto
>>> >
>>> ==============================================================================
>>> > ---
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/2_0_xsd/taglib-tag-listener.tld
>>> (added)
>>> > +++
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/2_0_xsd/taglib-tag-listener.tld
>>> Wed Dec  8 09:40:24 2010
>>> > @@ -0,0 +1,688 @@
>>> > +<?xml version="1.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.
>>> > +-->
>>> > +<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
>>> > +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> > +    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
>>> http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
>>> > +    version="2.0">
>>> > +  <description>JSTL 1.1 i18n-capable formatting library</description>
>>> > +  <display-name>JSTL fmt</display-name>
>>> > +  <tlib-version>1.1</tlib-version>
>>> > +  <short-name>fmt</short-name>
>>> > +  <uri>http://java.sun.com/jsp/jstl/fmt</uri>
>>> > +  <validator>
>>> > +    <description>
>>> > +        Provides core validation features for JSTL tags.
>>> > +    </description>
>>> > +    <validator-class>
>>> > +        org.apache.taglibs.standard.tlv.JstlFmtTLV
>>> > +    </validator-class>
>>> > +  </validator>
>>> > +  <listener>
>>> > +    <listener-class>TestListenerA</listener-class>
>>> > +  </listener>
>>> > +  <listener>
>>> > +    <listener-class>TestListenerB</listener-class>
>>> > +  </listener>
>>> > +  <tag>
>>> > +    <description>
>>> > +        Sets the request character encoding
>>> > +    </description>
>>> > +    <name>requestEncoding</name>
>>> > +
>>>  <tag-class>org.apache.taglibs.standard.tag.rt.fmt.RequestEncodingTag</tag-class>
>>> > +    <body-content>empty</body-content>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Name of character encoding to be applied when
>>> > +decoding request parameters.
>>> > +        </description>
>>> > +        <name>value</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +  </tag>
>>> > +
>>> > +  <tag>
>>> > +    <description>
>>> > +        Stores the given locale in the locale configuration variable
>>> > +    </description>
>>> > +    <name>setLocale</name>
>>> > +
>>>  <tag-class>org.apache.taglibs.standard.tag.rt.fmt.SetLocaleTag</tag-class>
>>> > +    <body-content>empty</body-content>
>>> > +    <attribute>
>>> > +        <description>
>>> > +A String value is interpreted as the
>>> > +printable representation of a locale, which
>>> > +must contain a two-letter (lower-case)
>>> > +language code (as defined by ISO-639),
>>> > +and may contain a two-letter (upper-case)
>>> > +country code (as defined by ISO-3166).
>>> > +Language and country codes must be
>>> > +separated by hyphen (-) or underscore
>>> > +(_).
>>> > +    </description>
>>> > +        <name>value</name>
>>> > +        <required>true</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Vendor- or browser-specific variant.
>>> > +See the java.util.Locale javadocs for
>>> > +more information on variants.
>>> > +        </description>
>>> > +        <name>variant</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Scope of the locale configuration variable.
>>> > +        </description>
>>> > +        <name>scope</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +  </tag>
>>> > +
>>> > +  <tag>
>>> > +    <description>
>>> > +        Specifies the time zone for any time formatting or parsing
>>> actions
>>> > +        nested in its body
>>> > +    </description>
>>> > +    <name>timeZone</name>
>>> > +
>>>  <tag-class>org.apache.taglibs.standard.tag.rt.fmt.TimeZoneTag</tag-class>
>>> > +    <body-content>JSP</body-content>
>>> > +    <attribute>
>>> > +        <description>
>>> > +The time zone. A String value is interpreted as
>>> > +a time zone ID. This may be one of the time zone
>>> > +IDs supported by the Java platform (such as
>>> > +"America/Los_Angeles") or a custom time zone
>>> > +ID (such as "GMT-8"). See
>>> > +java.util.TimeZone for more information on
>>> > +supported time zone formats.
>>> > +        </description>
>>> > +        <name>value</name>
>>> > +        <required>true</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +  </tag>
>>> > +
>>> > +  <tag>
>>> > +    <description>
>>> > +        Stores the given time zone in the time zone configuration
>>> variable
>>> > +    </description>
>>> > +    <name>setTimeZone</name>
>>> > +
>>>  <tag-class>org.apache.taglibs.standard.tag.rt.fmt.SetTimeZoneTag</tag-class>
>>> > +    <body-content>empty</body-content>
>>> > +    <attribute>
>>> > +        <description>
>>> > +The time zone. A String value is interpreted as
>>> > +a time zone ID. This may be one of the time zone
>>> > +IDs supported by the Java platform (such as
>>> > +"America/Los_Angeles") or a custom time zone
>>> > +ID (such as "GMT-8"). See java.util.TimeZone for
>>> > +more information on supported time zone
>>> > +formats.
>>> > +        </description>
>>> > +        <name>value</name>
>>> > +        <required>true</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Name of the exported scoped variable which
>>> > +stores the time zone of type
>>> > +java.util.TimeZone.
>>> > +        </description>
>>> > +        <name>var</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Scope of var or the time zone configuration
>>> > +variable.
>>> > +        </description>
>>> > +        <name>scope</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +  </tag>
>>> > +
>>> > +  <tag>
>>> > +    <description>
>>> > +        Loads a resource bundle to be used by its tag body
>>> > +    </description>
>>> > +    <name>bundle</name>
>>> > +
>>>  <tag-class>org.apache.taglibs.standard.tag.rt.fmt.BundleTag</tag-class>
>>> > +    <body-content>JSP</body-content>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Resource bundle base name. This is the bundle's
>>> > +fully-qualified resource name, which has the same
>>> > +form as a fully-qualified class name, that is, it uses
>>> > +"." as the package component separator and does not
>>> > +have any file type (such as ".class" or ".properties")
>>> > +suffix.
>>> > +        </description>
>>> > +        <name>basename</name>
>>> > +        <required>true</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Prefix to be prepended to the value of the message
>>> > +key of any nested <fmt:message> action.
>>> > +        </description>
>>> > +        <name>prefix</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +  </tag>
>>> > +
>>> > +  <tag>
>>> > +    <description>
>>> > +        Loads a resource bundle and stores it in the named scoped
>>> variable or
>>> > +        the bundle configuration variable
>>> > +    </description>
>>> > +    <name>setBundle</name>
>>> > +
>>>  <tag-class>org.apache.taglibs.standard.tag.rt.fmt.SetBundleTag</tag-class>
>>> > +    <body-content>empty</body-content>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Resource bundle base name. This is the bundle's
>>> > +fully-qualified resource name, which has the same
>>> > +form as a fully-qualified class name, that is, it uses
>>> > +"." as the package component separator and does not
>>> > +have any file type (such as ".class" or ".properties")
>>> > +suffix.
>>> > +        </description>
>>> > +        <name>basename</name>
>>> > +        <required>true</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Name of the exported scoped variable which stores
>>> > +the i18n localization context of type
>>> > +javax.servlet.jsp.jstl.fmt.LocalizationC
>>> > +ontext.
>>> > +        </description>
>>> > +        <name>var</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Scope of var or the localization context
>>> > +configuration variable.
>>> > +        </description>
>>> > +        <name>scope</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +  </tag>
>>> > +
>>> > +  <tag>
>>> > +    <description>
>>> > +        Maps key to localized message and performs parametric
>>> replacement
>>> > +    </description>
>>> > +    <name>message</name>
>>> > +
>>>  <tag-class>org.apache.taglibs.standard.tag.rt.fmt.MessageTag</tag-class>
>>> > +    <body-content>JSP</body-content>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Message key to be looked up.
>>> > +        </description>
>>> > +        <name>key</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Localization context in whose resource
>>> > +bundle the message key is looked up.
>>> > +        </description>
>>> > +        <name>bundle</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Name of the exported scoped variable
>>> > +which stores the localized message.
>>> > +        </description>
>>> > +        <name>var</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Scope of var.
>>> > +        </description>
>>> > +        <name>scope</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +  </tag>
>>> > +
>>> > +  <tag>
>>> > +    <description>
>>> > +        Supplies an argument for parametric replacement to a
>>> containing
>>> > +        <message> tag
>>> > +    </description>
>>> > +    <name>param</name>
>>> > +
>>>  <tag-class>org.apache.taglibs.standard.tag.rt.fmt.ParamTag</tag-class>
>>> > +    <body-content>JSP</body-content>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Argument used for parametric replacement.
>>> > +        </description>
>>> > +        <name>value</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +  </tag>
>>> > +
>>> > +  <tag>
>>> > +    <description>
>>> > +        Formats a numeric value as a number, currency, or percentage
>>> > +    </description>
>>> > +    <name>formatNumber</name>
>>> > +
>>>  <tag-class>org.apache.taglibs.standard.tag.rt.fmt.FormatNumberTag</tag-class>
>>>
>>> > +    <body-content>JSP</body-content>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Numeric value to be formatted.
>>> > +        </description>
>>> > +        <name>value</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Specifies whether the value is to be
>>> > +formatted as number, currency, or
>>> > +percentage.
>>> > +        </description>
>>>
>>> > +        <name>type</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Custom formatting pattern.
>>> > +        </description>
>>> > +        <name>pattern</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +ISO 4217 currency code. Applied only
>>> > +when formatting currencies (i.e. if type is
>>> > +equal to "currency"); ignored otherwise.
>>> > +        </description>
>>> > +        <name>currencyCode</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Currency symbol. Applied only when
>>> > +formatting currencies (i.e. if type is equal
>>> > +to "currency"); ignored otherwise.
>>> > +        </description>
>>> > +        <name>currencySymbol</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Specifies whether the formatted output
>>> > +will contain any grouping separators.
>>> > +        </description>
>>> > +        <name>groupingUsed</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Maximum number of digits in the integer
>>> > +portion of the formatted output.
>>> > +        </description>
>>> > +        <name>maxIntegerDigits</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Minimum number of digits in the integer
>>> > +portion of the formatted output.
>>> > +        </description>
>>> > +        <name>minIntegerDigits</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Maximum number of digits in the
>>> > +fractional portion of the formatted output.
>>> > +        </description>
>>> > +        <name>maxFractionDigits</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Minimum number of digits in the
>>> > +fractional portion of the formatted output.
>>> > +        </description>
>>> > +        <name>minFractionDigits</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Name of the exported scoped variable
>>> > +which stores the formatted result as a
>>> > +String.
>>> > +        </description>
>>> > +        <name>var</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Scope of var.
>>> > +        </description>
>>> > +        <name>scope</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +  </tag>
>>> > +
>>> > +  <tag>
>>> > +    <description>
>>> > +        Parses the string representation of a number, currency, or
>>> percentage
>>> > +    </description>
>>> > +    <name>parseNumber</name>
>>> > +
>>>  <tag-class>org.apache.taglibs.standard.tag.rt.fmt.ParseNumberTag</tag-class>
>>>
>>> > +    <body-content>JSP</body-content>
>>> > +    <attribute>
>>> > +        <description>
>>> > +String to be parsed.
>>>
>>> > +        </description>
>>> > +        <name>value</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Specifies whether the string in the value
>>> > +attribute should be parsed as a number,
>>> > +currency, or percentage.
>>> > +        </description>
>>>
>>> > +        <name>type</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Custom formatting pattern that determines
>>> > +how the string in the value attribute is to be
>>> > +parsed.
>>> > +        </description>
>>> > +        <name>pattern</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Locale whose default formatting pattern (for
>>> > +numbers, currencies, or percentages,
>>> > +respectively) is to be used during the parse
>>> > +operation, or to which the pattern specified
>>> > +via the pattern attribute (if present) is
>>> > +applied.
>>> > +        </description>
>>> > +        <name>parseLocale</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Specifies whether just the integer portion of
>>> > +the given value should be parsed.
>>> > +        </description>
>>> > +        <name>integerOnly</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Name of the exported scoped variable which
>>> > +stores the parsed result (of type
>>> > +java.lang.Number).
>>> > +        </description>
>>> > +        <name>var</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Scope of var.
>>> > +        </description>
>>> > +        <name>scope</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +  </tag>
>>> > +
>>> > +  <tag>
>>> > +    <description>
>>> > +        Formats a date and/or time using the supplied styles and
>>> pattern
>>> > +    </description>
>>> > +    <name>formatDate</name>
>>> > +
>>>  <tag-class>org.apache.taglibs.standard.tag.rt.fmt.FormatDateTag</tag-class>
>>>
>>> > +    <body-content>empty</body-content>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Date and/or time to be formatted.
>>> > +        </description>
>>> > +        <name>value</name>
>>> > +        <required>true</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Specifies whether the time, the date, or both
>>> > +the time and date components of the given
>>> > +date are to be formatted.
>>> > +        </description>
>>> > +        <name>type</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Predefined formatting style for dates. Follows
>>> > +the semantics defined in class
>>> > +java.text.DateFormat. Applied only
>>> > +when formatting a date or both a date and
>>> > +time (i.e. if type is missing or is equal to
>>> > +"date" or "both"); ignored otherwise.
>>> > +        </description>
>>> > +        <name>dateStyle</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Predefined formatting style for times. Follows
>>> > +the semantics defined in class
>>> > +java.text.DateFormat. Applied only
>>> > +when formatting a time or both a date and
>>> > +time (i.e. if type is equal to "time" or "both");
>>> > +ignored otherwise.
>>> > +        </description>
>>> > +        <name>timeStyle</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Custom formatting style for dates and times.
>>> > +        </description>
>>> > +        <name>pattern</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Time zone in which to represent the formatted
>>> > +time.
>>> > +        </description>
>>> > +        <name>timeZone</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Name of the exported scoped variable which
>>> > +stores the formatted result as a String.
>>>
>>> > +        </description>
>>> > +        <name>var</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Scope of var.
>>> > +        </description>
>>> > +        <name>scope</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +  </tag>
>>> > +
>>> > +  <tag>
>>> > +    <description>
>>> > +        Parses the string representation of a date and/or time
>>> > +    </description>
>>> > +    <name>parseDate</name>
>>> > +
>>>  <tag-class>org.apache.taglibs.standard.tag.rt.fmt.ParseDateTag</tag-class>
>>>
>>> > +    <body-content>JSP</body-content>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Date string to be parsed.
>>> > +        </description>
>>> > +        <name>value</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Specifies whether the date string in the
>>> > +value attribute is supposed to contain a
>>> > +time, a date, or both.
>>> > +        </description>
>>> > +        <name>type</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Predefined formatting style for days
>>> > +which determines how the date
>>> > +component of the date string is to be
>>> > +parsed. Applied only when formatting a
>>> > +date or both a date and time (i.e. if type
>>> > +is missing or is equal to "date" or "both");
>>> > +ignored otherwise.
>>> > +        </description>
>>> > +        <name>dateStyle</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Predefined formatting styles for times
>>> > +which determines how the time
>>> > +component in the date string is to be
>>> > +parsed. Applied only when formatting a
>>> > +time or both a date and time (i.e. if type
>>> > +is equal to "time" or "both"); ignored
>>> > +otherwise.
>>> > +        </description>
>>> > +        <name>timeStyle</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Custom formatting pattern which
>>> > +determines how the date string is to be
>>> > +parsed.
>>> > +        </description>
>>> > +        <name>pattern</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Time zone in which to interpret any time
>>> > +information in the date string.
>>> > +        </description>
>>> > +        <name>timeZone</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Locale whose predefined formatting styles
>>> > +for dates and times are to be used during
>>> > +the parse operation, or to which the
>>> > +pattern specified via the pattern
>>> > +attribute (if present) is applied.
>>> > +        </description>
>>> > +        <name>parseLocale</name>
>>>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>true</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Name of the exported scoped variable in
>>> > +which the parsing result (of type
>>> > +java.util.Date) is stored.
>>> > +        </description>
>>> > +        <name>var</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +    <attribute>
>>> > +        <description>
>>> > +Scope of var.
>>> > +        </description>
>>> > +        <name>scope</name>
>>> > +        <required>false</required>
>>> > +        <rtexprvalue>false</rtexprvalue>
>>> > +    </attribute>
>>> > +  </tag>
>>> > +</taglib>
>>> >
>>> > Added:
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/2_1_xsd/taglib-tag-listener.tld
>>> > URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/2_1_xsd/taglib-tag-listener.tld?rev=1043341&view=auto
>>> >
>>> ==============================================================================
>>> > ---
>>> geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/test/resources/2_1_xsd/taglib-tag-listener.tld
>>> (added)
>>>
>>> > +++ geronimo/server/trunk/plugins/jas
>>>
>>


-- 
Ivan

Mime
View raw message