geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Jencks <david_jen...@yahoo.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 07:44:50 GMT
Hi Ivan,

I'm pretty sure we used to have a version of this code that used xmlbeans.  If we had long term plans to keep using xmlbeans using it here would be fine with me.  However most xml related code we need is much much simpler with jaxb and I would prefer to include only one library rather than both.  So I would prefer to move code from xmlbeans to jaxb whenever possible and avoid moving the other way.

thanks
david jencks

On Dec 8, 2010, at 9:28 PM, Ivan wrote:

> 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