This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit b5492012c982de454cd10a2f45b5b18fdee448d1 Author: Mark Thomas <ma...@apache.org> AuthorDate: Wed Jun 17 17:26:28 2020 +0100 Add TLD schema for Jakarta EE 9 Signed-off-by: Mark Thomas <ma...@apache.org> --- LICENSE | 1 + .../servlet/resources/web-jsptaglibrary_3_0.xsd | 1109 ++++++++++++++++++++ .../tomcat/util/descriptor/DigesterFactory.java | 1 + .../tomcat/util/descriptor/XmlIdentifiers.java | 1 + res/INSTALLLICENSE | 1 + res/META-INF/servlet-api.jar.license | 1 + res/maven/tomcat-servlet-api.pom | 1 + res/rat/rat-excludes.txt | 3 + test/org/apache/jasper/compiler/TestValidator.java | 1 + test/webapp-5.0/WEB-INF/tags30.tld | 37 + test/webapp-5.0/tld-versions.jsp | 2 + 11 files changed, 1158 insertions(+) diff --git a/LICENSE b/LICENSE index 4950641..a3cd18e 100644 --- a/LICENSE +++ b/LICENSE @@ -219,6 +219,7 @@ following Jakarta EE Schemas: - web-app_5_0.xsd - web-commonn_5_0.xsd - web-fragment_5_0.xsd +- web-jsptaglibrary_3_0.xsd Eclipse Public License - v 2.0 diff --git a/java/jakarta/servlet/resources/web-jsptaglibrary_3_0.xsd b/java/jakarta/servlet/resources/web-jsptaglibrary_3_0.xsd new file mode 100644 index 0000000..30c3444 --- /dev/null +++ b/java/jakarta/servlet/resources/web-jsptaglibrary_3_0.xsd @@ -0,0 +1,1109 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema targetNamespace="https://jakarta.ee/xml/ns/jakartaee" + xmlns:jakartaee="https://jakarta.ee/xml/ns/jakartaee" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + elementFormDefault="qualified" + attributeFormDefault="unqualified" + version="3.0"> + <xsd:annotation> + <xsd:documentation> + + Copyright (c) 2009, 2020 Oracle and/or its affiliates. All rights reserved. + + This program and the accompanying materials are made available under the + terms of the Eclipse Public License v. 2.0, which is available at + http://www.eclipse.org/legal/epl-2.0. + + This Source Code may also be made available under the following Secondary + Licenses when the conditions for such availability set forth in the + Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + version 2 with the GNU Classpath Exception, which is available at + https://www.gnu.org/software/classpath/license.html. + + SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + + </xsd:documentation> + </xsd:annotation> + + <xsd:annotation> + <xsd:documentation> + <![CDATA[ + This is the XML Schema for the JSP Taglibrary + descriptor. All Taglibrary descriptors must + indicate the tag library schema by using the Taglibrary + namespace: + + https://jakarta.ee/xml/ns/jakartaee + + and by indicating the version of the schema by + using the version element as shown below: + + <taglib xmlns="https://jakarta.ee/xml/ns/jakartaee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="..." + version="3.0"> + ... + </taglib> + + The instance documents may indicate the published + version of the schema using xsi:schemaLocation attribute + for Jakarta EE namespace with the following location: + + https://jakarta.ee/xml/ns/jakartaee/web-jsptaglibrary_3_0.xsd + + ]]> + </xsd:documentation> + </xsd:annotation> + + <xsd:include schemaLocation="jakartaee_9.xsd"/> + + +<!-- **************************************************** --> + + <xsd:element name="taglib" + type="jakartaee:tldTaglibType"> + <xsd:annotation> + <xsd:documentation> + + The taglib tag is the document root. + The definition of taglib is provided + by the tldTaglibType. + + </xsd:documentation> + </xsd:annotation> + <xsd:unique name="tag-name-uniqueness"> + <xsd:annotation> + <xsd:documentation> + + The taglib element contains, among other things, tag and + tag-file elements. + The name subelements of these elements must each be unique. + + </xsd:documentation> + </xsd:annotation> + <xsd:selector xpath="jakartaee:tag|jakartaee:tag-file"/> + <xsd:field xpath="jakartaee:name"/> + </xsd:unique> + <xsd:unique name="function-name-uniqueness"> + <xsd:annotation> + <xsd:documentation> + + The taglib element contains function elements. + The name subelements of these elements must each be unique. + + </xsd:documentation> + </xsd:annotation> + <xsd:selector xpath="jakartaee:function"/> + <xsd:field xpath="jakartaee:name"/> + </xsd:unique> + </xsd:element> + + +<!-- **************************************************** --> + + <xsd:complexType name="body-contentType"> + <xsd:annotation> + <xsd:documentation> + + Specifies the type of body that is valid for a tag. + This value is used by the JSP container to validate + that a tag invocation has the correct body syntax and + by page composition tools to assist the page author + in providing a valid tag body. + + There are currently four values specified: + + tagdependent The body of the tag is interpreted by the tag + implementation itself, and is most likely + in a different "language", e.g embedded SQL + statements. + + JSP The body of the tag contains nested JSP + syntax. + + empty The body must be empty + + scriptless The body accepts only template text, EL + Expressions, and JSP action elements. No + scripting elements are allowed. + + </xsd:documentation> + </xsd:annotation> + <xsd:simpleContent> + <xsd:restriction base="jakartaee:string"> + <xsd:enumeration value="tagdependent"/> + <xsd:enumeration value="JSP"/> + <xsd:enumeration value="empty"/> + <xsd:enumeration value="scriptless"/> + </xsd:restriction> + </xsd:simpleContent> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="tld-canonical-nameType"> + <xsd:annotation> + <xsd:documentation> + + Defines the canonical name of a tag or attribute being + defined. + + The name must conform to the lexical rules for an NMTOKEN. + + </xsd:documentation> + </xsd:annotation> + <xsd:simpleContent> + <xsd:restriction base="jakartaee:xsdNMTOKENType"/> + </xsd:simpleContent> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="validatorType"> + <xsd:annotation> + <xsd:documentation> + + A validator that can be used to validate + the conformance of a JSP page to using this tag library is + defined by a validatorType. + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" + type="jakartaee:descriptionType" + minOccurs="0" + maxOccurs="unbounded"/> + <xsd:element name="validator-class" + type="jakartaee:fully-qualified-classType"> + <xsd:annotation> + <xsd:documentation> + + Defines the TagLibraryValidator class that can be used + to validate the conformance of a JSP page to using this + tag library. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="init-param" + type="jakartaee:param-valueType" + minOccurs="0" + maxOccurs="unbounded"> + <xsd:annotation> + <xsd:documentation> + + The init-param element contains a name/value pair as an + initialization param. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + </xsd:sequence> + <xsd:attribute name="id" + type="xsd:ID"/> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="tagType"> + <xsd:annotation> + <xsd:documentation> + + The tag defines a unique tag in this tag library. It has one + attribute, id. + + The tag element may have several subelements defining: + + description Optional tag-specific information + + display-name A short name that is intended to be + displayed by tools + + icon Optional icon element that can be used + by tools + + name The unique action name + + tag-class The tag handler class implementing + jakarta.servlet.jsp.tagext.JspTag + + tei-class An optional subclass of + jakarta.servlet.jsp.tagext.TagExtraInfo + + body-content The body content type + + variable Optional scripting variable information + + attribute All attributes of this action that are + evaluated prior to invocation. + + dynamic-attributes Whether this tag supports additional + attributes with dynamic names. If + true, the tag-class must implement the + jakarta.servlet.jsp.tagext.DynamicAttributes + interface. Defaults to false. + + example Optional informal description of an + example of a use of this tag + + tag-extension Zero or more extensions that provide extra + information about this tag, for tool + consumption + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:group ref="jakartaee:descriptionGroup"/> + <xsd:element name="name" + type="jakartaee:tld-canonical-nameType"/> + <xsd:element name="tag-class" + type="jakartaee:fully-qualified-classType"> + <xsd:annotation> + <xsd:documentation> + + Defines the subclass of jakarta.serlvet.jsp.tagext.JspTag + that implements the request time semantics for + this tag. (required) + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="tei-class" + type="jakartaee:fully-qualified-classType" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + Defines the subclass of jakarta.servlet.jsp.tagext.TagExtraInfo + for this tag. (optional) + + If this is not given, the class is not consulted at + translation time. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="body-content" + type="jakartaee:body-contentType"> + <xsd:annotation> + <xsd:documentation> + + Specifies the format for the body of this tag. + The default in JSP 1.2 was "JSP" but because this + is an invalid setting for simple tag handlers, there + is no longer a default in JSP 2.0. A reasonable + default for simple tag handlers is "scriptless" if + the tag can have a body. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="variable" + type="jakartaee:variableType" + minOccurs="0" + maxOccurs="unbounded"/> + <xsd:element name="attribute" + type="jakartaee:tld-attributeType" + minOccurs="0" + maxOccurs="unbounded"/> + <xsd:element name="dynamic-attributes" + type="jakartaee:generic-booleanType" + minOccurs="0"/> + <xsd:element name="example" + type="jakartaee:xsdStringType" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + The example element contains an informal description + of an example of the use of a tag. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="tag-extension" + type="jakartaee:tld-extensionType" + minOccurs="0" + maxOccurs="unbounded"> + <xsd:annotation> + <xsd:documentation> + + Tag extensions are for tool use only and must not affect + the behavior of a container. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + </xsd:sequence> + <xsd:attribute name="id" + type="xsd:ID"/> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="tagFileType"> + <xsd:annotation> + <xsd:documentation> + + Defines an action in this tag library that is implemented + as a .tag file. + + The tag-file element has two required subelements: + + description Optional tag-specific information + + display-name A short name that is intended to be + displayed by tools + + icon Optional icon element that can be used + by tools + + name The unique action name + + path Where to find the .tag file implementing this + action, relative to the root of the web + application or the root of the JAR file for a + tag library packaged in a JAR. This must + begin with /WEB-INF/tags if the .tag file + resides in the WAR, or /META-INF/tags if the + .tag file resides in a JAR. + + example Optional informal description of an + example of a use of this tag + + tag-extension Zero or more extensions that provide extra + information about this tag, for tool + consumption + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:group ref="jakartaee:descriptionGroup"/> + <xsd:element name="name" + type="jakartaee:tld-canonical-nameType"/> + <xsd:element name="path" + type="jakartaee:pathType"/> + <xsd:element name="example" + type="jakartaee:xsdStringType" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + The example element contains an informal description + of an example of the use of a tag. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="tag-extension" + type="jakartaee:tld-extensionType" + minOccurs="0" + maxOccurs="unbounded"> + <xsd:annotation> + <xsd:documentation> + + Tag extensions are for tool use only and must not affect + the behavior of a container. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + </xsd:sequence> + <xsd:attribute name="id" + type="xsd:ID"/> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="functionType"> + <xsd:annotation> + <xsd:documentation> + + The function element is used to provide information on each + function in the tag library that is to be exposed to the EL. + + The function element may have several subelements defining: + + description Optional tag-specific information + + display-name A short name that is intended to be + displayed by tools + + icon Optional icon element that can be used + by tools + + name A unique name for this function + + function-class Provides the name of the Java class that + implements the function + + function-signature Provides the signature, as in the Java + Language Specification, of the Java + method that is to be used to implement + the function. + + example Optional informal description of an + example of a use of this function + + function-extension Zero or more extensions that provide extra + information about this function, for tool + consumption + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:group ref="jakartaee:descriptionGroup"/> + <xsd:element name="name" + type="jakartaee:tld-canonical-nameType"> + <xsd:annotation> + <xsd:documentation> + + A unique name for this function. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="function-class" + type="jakartaee:fully-qualified-classType"> + <xsd:annotation> + <xsd:documentation> + + Provides the fully-qualified class name of the Java + class containing the static method that implements + the function. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="function-signature" + type="jakartaee:string"> + <xsd:annotation> + <xsd:documentation> + + Provides the signature, of the static Java method that is + to be used to implement the function. The syntax of the + function-signature element is as follows: + + FunctionSignature ::= ReturnType S MethodName S? + '(' S? Parameters? S? ')' + + ReturnType ::= Type + + MethodName ::= Identifier + + Parameters ::= Parameter + | ( Parameter S? ',' S? Parameters ) + + Parameter ::= Type + + Where: + + * Type is a basic type or a fully qualified + Java class name (including package name), + as per the 'Type' production in the Java + Language Specification, Second Edition, + Chapter 18. + + * Identifier is a Java identifier, as per + the 'Identifier' production in the Java + Language Specification, Second + Edition, Chapter 18. + + Example: + + java.lang.String nickName( java.lang.String, int ) + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="example" + type="jakartaee:xsdStringType" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + The example element contains an informal description + of an example of the use of this function. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="function-extension" + type="jakartaee:tld-extensionType" + minOccurs="0" + maxOccurs="unbounded"> + <xsd:annotation> + <xsd:documentation> + + Function extensions are for tool use only and must not + affect the behavior of a container. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + </xsd:sequence> + <xsd:attribute name="id" + type="xsd:ID"/> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="tldTaglibType"> + <xsd:annotation> + <xsd:documentation> + + The taglib tag is the document root, it defines: + + description a simple string describing the "use" of this + taglib, should be user discernable + + display-name the display-name element contains a + short name that is intended to be displayed + by tools + + icon optional icon that can be used by tools + + tlib-version the version of the tag library implementation + + short-name a simple default short name that could be + used by a JSP authoring tool to create + names with a mnemonic value; for example, + the it may be used as the prefered prefix + value in taglib directives + + uri a uri uniquely identifying this taglib + + validator optional TagLibraryValidator information + + listener optional event listener specification + + tag tags in this tag library + + tag-file tag files in this tag library + + function zero or more EL functions defined in this + tag library + + taglib-extension zero or more extensions that provide extra + information about this taglib, for tool + consumption + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:group ref="jakartaee:descriptionGroup"/> + <xsd:element name="tlib-version" + type="jakartaee:dewey-versionType"> + <xsd:annotation> + <xsd:documentation> + + Describes this version (number) of the taglibrary. + It is described as a dewey decimal. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="short-name" + type="jakartaee:tld-canonical-nameType"> + <xsd:annotation> + <xsd:documentation> + + Defines a simple default name that could be used by + a JSP authoring tool to create names with a + mnemonicvalue; for example, it may be used as the + preferred prefix value in taglib directives. Do + not use white space, and do not start with digits + or underscore. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="uri" + type="jakartaee:xsdAnyURIType" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + Defines a public URI that uniquely identifies this + version of the taglibrary. Leave it empty if it + does not apply. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="validator" + type="jakartaee:validatorType" + minOccurs="0"> + </xsd:element> + <xsd:element name="listener" + type="jakartaee:listenerType" + minOccurs="0" + maxOccurs="unbounded"> + </xsd:element> + <xsd:element name="tag" + type="jakartaee:tagType" + minOccurs="0" + maxOccurs="unbounded"/> + <xsd:element name="tag-file" + type="jakartaee:tagFileType" + minOccurs="0" + maxOccurs="unbounded"/> + <xsd:element name="function" + type="jakartaee:functionType" + minOccurs="0" + maxOccurs="unbounded"/> + <xsd:element name="taglib-extension" + type="jakartaee:tld-extensionType" + minOccurs="0" + maxOccurs="unbounded"> + <xsd:annotation> + <xsd:documentation> + + Taglib extensions are for tool use only and must not + affect the behavior of a container. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + </xsd:sequence> + <xsd:attribute name="version" + type="jakartaee:dewey-versionType" + fixed="3.0" + use="required"> + <xsd:annotation> + <xsd:documentation> + + Describes the JSP version (number) this taglibrary + requires in order to function (dewey decimal) + + </xsd:documentation> + </xsd:annotation> + </xsd:attribute> + <xsd:attribute name="id" + type="xsd:ID"/> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="variableType"> + <xsd:annotation> + <xsd:documentation> + + The variableType provides information on the scripting + variables defined by using this tag. It is a (translation + time) error for a tag that has one or more variable + subelements to have a TagExtraInfo class that returns a + non-null value from a call to getVariableInfo(). + + The subelements of variableType are of the form: + + description Optional description of this + variable + + name-given The variable name as a constant + + name-from-attribute The name of an attribute whose + (translation time) value will + give the name of the + variable. One of name-given or + name-from-attribute is required. + + variable-class Name of the class of the variable. + java.lang.String is default. + + declare Whether the variable is declared + or not. True is the default. + + scope The scope of the scripting varaible + defined. NESTED is default. + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" + type="jakartaee:descriptionType" + minOccurs="0" + maxOccurs="unbounded"/> + <xsd:choice> + <xsd:element name="name-given" + type="jakartaee:java-identifierType"> + <xsd:annotation> + <xsd:documentation> + + The name for the scripting variable. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="name-from-attribute" + type="jakartaee:java-identifierType"> + <xsd:annotation> + <xsd:documentation> + + The name of an attribute whose + (translation-time) value will give the name of + the variable. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + </xsd:choice> + <xsd:element name="variable-class" + type="jakartaee:fully-qualified-classType" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + The optional name of the class for the scripting + variable. The default is java.lang.String. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="declare" + type="jakartaee:generic-booleanType" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + Whether the scripting variable is to be defined + or not. See TagExtraInfo for details. This + element is optional and "true" is the default. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="scope" + type="jakartaee:variable-scopeType" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + The element is optional and "NESTED" is the default. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + </xsd:sequence> + <xsd:attribute name="id" + type="xsd:ID"/> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="variable-scopeType"> + <xsd:annotation> + <xsd:documentation> + + This type defines scope of the scripting variable. See + TagExtraInfo for details. The allowed values are, + "NESTED", "AT_BEGIN" and "AT_END". + + </xsd:documentation> + </xsd:annotation> + <xsd:simpleContent> + <xsd:restriction base="jakartaee:string"> + <xsd:enumeration value="NESTED"/> + <xsd:enumeration value="AT_BEGIN"/> + <xsd:enumeration value="AT_END"/> + </xsd:restriction> + </xsd:simpleContent> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="tld-attributeType"> + <xsd:annotation> + <xsd:documentation> + + The attribute element defines an attribute for the nesting + tag. The attribute element may have several subelements + defining: + + description a description of the attribute + + name the name of the attribute + + required whether the attribute is required or + optional + + rtexprvalue whether the attribute is a runtime attribute + + type the type of the attributes + + fragment whether this attribute is a fragment + + deferred-value present if this attribute is to be parsed as a + jakarta.el.ValueExpression + + deferred-method present if this attribute is to be parsed as a + jakarta.el.MethodExpression + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" + type="jakartaee:descriptionType" + minOccurs="0" + maxOccurs="unbounded"/> + <xsd:element name="name" + type="jakartaee:java-identifierType"/> + <xsd:element name="required" + type="jakartaee:generic-booleanType" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + Defines if the nesting attribute is required or + optional. + + If not present then the default is "false", i.e + the attribute is optional. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:choice> + <xsd:sequence> + <xsd:sequence minOccurs="0"> + <xsd:element name="rtexprvalue" + type="jakartaee:generic-booleanType"> + <xsd:annotation> + <xsd:documentation> + + Defines if the nesting attribute can have scriptlet + expressions as a value, i.e the value of the + attribute may be dynamically calculated at request + time, as opposed to a static value determined at + translation time. + If not present then the default is "false", i.e the + attribute has a static value + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="type" + type="jakartaee:fully-qualified-classType" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + Defines the Java type of the attributes value. + If this element is omitted, the expected type is + assumed to be "java.lang.Object". + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + </xsd:sequence> + <xsd:choice> + <xsd:element name="deferred-value" + type="jakartaee:tld-deferred-valueType" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + Present if the value for this attribute is to be + passed to the tag handler as a + jakarta.el.ValueExpression. This allows for deferred + evaluation of EL expressions. An optional subelement + will contain the expected type that the value will + be coerced to after evaluation of the expression. + The type defaults to Object if one is not provided. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="deferred-method" + type="jakartaee:tld-deferred-methodType" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + Present if the value for this attribute is to be + passed to the tag handler as a + jakarta.el.MethodExpression. This allows for deferred + evaluation of an EL expression that identifies a + method to be invoked on an Object. An optional + subelement will contain the expected method + signature. The signature defaults to "void method()" + if one is not provided. + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + </xsd:choice> + </xsd:sequence> + <xsd:element name="fragment" + type="jakartaee:generic-booleanType" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + "true" if this attribute is of type + jakarta.servlet.jsp.tagext.JspFragment, representing dynamic + content that can be re-evaluated as many times + as needed by the tag handler. If omitted or "false", + the default is still type="java.lang.String" + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + </xsd:choice> + </xsd:sequence> + <xsd:attribute name="id" + type="xsd:ID"/> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="tld-deferred-valueType"> + <xsd:annotation> + <xsd:documentation> + + Defines information about how to provide the value for a + tag handler attribute that accepts a jakarta.el.ValueExpression. + + The deferred-value element has one optional subelement: + + type the expected type of the attribute + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="type" + type="jakartaee:fully-qualified-classType" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + The fully-qualified name of the Java type that is the + expected type for this deferred expression. If this + element is omitted, the expected type is assumed to be + "java.lang.Object". + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + </xsd:sequence> + <xsd:attribute name="id" + type="xsd:ID"/> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="tld-deferred-methodType"> + <xsd:annotation> + <xsd:documentation> + + Defines information about how to provide the value for a + tag handler attribute that accepts a jakarta.el.MethodExpression. + + The deferred-method element has one optional subelement: + + method-signature Provides the signature, as in the Java + Language Specifies, that is expected for + the method being identified by the + expression. + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="method-signature" + type="jakartaee:string" + minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + + Provides the expected signature of the method identified + by the jakarta.el.MethodExpression. + + This disambiguates overloaded methods and ensures that + the return value is of the expected type. + + The syntax of the method-signature element is identical + to that of the function-signature element. See the + documentation for function-signature for more details. + + The name of the method is for documentation purposes only + and is ignored by the JSP container. + + Example: + + boolean validate(java.lang.String) + + </xsd:documentation> + </xsd:annotation> + </xsd:element> + </xsd:sequence> + <xsd:attribute name="id" + type="xsd:ID"/> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="tld-extensionType"> + <xsd:annotation> + <xsd:documentation> + + The tld-extensionType is used to indicate + extensions to a specific TLD element. + + It is used by elements to designate an extension block + that is targeted to a specific extension designated by + a set of extension elements that are declared by a + namespace. The namespace identifies the extension to + the tool that processes the extension. + + The type of the extension-element is abstract. Therefore, + a concrete type must be specified by the TLD using + xsi:type attribute for each extension-element. + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="extension-element" + type="jakartaee:extensibleType" + maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="namespace" + use="required" + type="xsd:anyURI"/> + <xsd:attribute name="id" + type="xsd:ID"/> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="extensibleType" + abstract="true"> + <xsd:annotation> + <xsd:documentation> + + The extensibleType is an abstract base type that is used to + define the type of extension-elements. Instance documents + must substitute a known type to define the extension by + using xsi:type attribute to define the actual type of + extension-elements. + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="id" + type="xsd:ID"/> + </xsd:complexType> + +</xsd:schema> diff --git a/java/org/apache/tomcat/util/descriptor/DigesterFactory.java b/java/org/apache/tomcat/util/descriptor/DigesterFactory.java index 9413de5..046e768 100644 --- a/java/org/apache/tomcat/util/descriptor/DigesterFactory.java +++ b/java/org/apache/tomcat/util/descriptor/DigesterFactory.java @@ -128,6 +128,7 @@ public class DigesterFactory { // from JakartaEE 9 add(systemIds, XmlIdentifiers.WEB_50_XSD, locationFor("web-app_5_0.xsd")); add(systemIds, XmlIdentifiers.WEB_FRAGMENT_50_XSD, locationFor("web-fragment_5_0.xsd")); + add(systemIds, XmlIdentifiers.TLD_30_XSD, locationFor("web-jsptaglibrary_3_0.xsd")); addSelf(systemIds, "web-common_5_0.xsd"); addSelf(systemIds, "jakartaee_9.xsd"); addSelf(systemIds, "jsp_3_0.xsd"); diff --git a/java/org/apache/tomcat/util/descriptor/XmlIdentifiers.java b/java/org/apache/tomcat/util/descriptor/XmlIdentifiers.java index 703a391..60327c9 100644 --- a/java/org/apache/tomcat/util/descriptor/XmlIdentifiers.java +++ b/java/org/apache/tomcat/util/descriptor/XmlIdentifiers.java @@ -82,6 +82,7 @@ public final class XmlIdentifiers { public static final String JAKARTAEE_9_NS = "https://jakarta.ee/xml/ns/jakartaee"; public static final String WEB_50_XSD = JAKARTAEE_9_NS + "/web-app_5_0.xsd"; public static final String WEB_FRAGMENT_50_XSD = JAKARTAEE_9_NS + "/web-fragment_5_0.xsd"; + public static final String TLD_30_XSD = JAKARTAEE_9_NS + "/web-jsptaglibrary_3_0.xsd"; public static final String WEBSERVICES_20_XSD = JAKARTAEE_9_NS + "/jakartaee_web_services_2_0.xsd"; private XmlIdentifiers() { diff --git a/res/INSTALLLICENSE b/res/INSTALLLICENSE index 4950641..a3cd18e 100644 --- a/res/INSTALLLICENSE +++ b/res/INSTALLLICENSE @@ -219,6 +219,7 @@ following Jakarta EE Schemas: - web-app_5_0.xsd - web-commonn_5_0.xsd - web-fragment_5_0.xsd +- web-jsptaglibrary_3_0.xsd Eclipse Public License - v 2.0 diff --git a/res/META-INF/servlet-api.jar.license b/res/META-INF/servlet-api.jar.license index c17f80b..66f8ecb 100644 --- a/res/META-INF/servlet-api.jar.license +++ b/res/META-INF/servlet-api.jar.license @@ -571,6 +571,7 @@ For the following Jakarta EE Schemas: - web-app_5_0.xsd - web-commonn_5_0.xsd - web-fragment_5_0.xsd +- web-jsptaglibrary_3_0.xsd Eclipse Public License - v 2.0 diff --git a/res/maven/tomcat-servlet-api.pom b/res/maven/tomcat-servlet-api.pom index 36edb14..6ec093c 100644 --- a/res/maven/tomcat-servlet-api.pom +++ b/res/maven/tomcat-servlet-api.pom @@ -69,6 +69,7 @@ web-app_5_0.xsd web-commonn_5_0.xsd web-fragment_5_0.xsd + web-jsptaglibrary_3_0.xsd to which the EPLv2 applies. </comments> </license> diff --git a/res/rat/rat-excludes.txt b/res/rat/rat-excludes.txt index ba3eaca..65aceea 100644 --- a/res/rat/rat-excludes.txt +++ b/res/rat/rat-excludes.txt @@ -138,6 +138,7 @@ java/jakarta/servlet/resources/web-fragment_3_0.xsd java/jakarta/servlet/resources/web-fragment_3_1.xsd java/jakarta/servlet/resources/web-fragment_4_0.xsd java/jakarta/servlet/resources/web-fragment_5_0.xsd +java/jakarta/servlet/resources/web-jsptaglibrary_3_0.xsd output/classes/jakarta/servlet/resources/javaee_5.xsd output/classes/jakarta/servlet/resources/javaee_6.xsd output/classes/jakarta/servlet/resources/javaee_7.xsd @@ -165,6 +166,7 @@ output/classes/jakarta/servlet/resources/web-fragment_3_0.xsd output/classes/jakarta/servlet/resources/web-fragment_3_1.xsd output/classes/jakarta/servlet/resources/web-fragment_4_0.xsd output/classes/jakarta/servlet/resources/web-fragment_5_0.xsd +output/classes/jakarta/servlet/resources/web-jsptaglibrary_3_0.xsd output/dist/src/java/jakarta/servlet/resources/javaee_5.xsd output/dist/src/java/jakarta/servlet/resources/javaee_6.xsd output/dist/src/java/jakarta/servlet/resources/javaee_7.xsd @@ -193,6 +195,7 @@ output/dist/src/java/jakarta/servlet/resources/web-fragment_3_0.xsd output/dist/src/java/jakarta/servlet/resources/web-fragment_3_1.xsd output/dist/src/java/jakarta/servlet/resources/web-fragment_4_0.xsd output/dist/src/java/jakarta/servlet/resources/web-fragment_5_0.xsd +output/dist/src/java/jakarta/servlet/resources/web-jsptaglibrary_3_0.xsd output/dist/src/res/checkstyle/header-al2.txt res/checkstyle/header-al2.txt diff --git a/test/org/apache/jasper/compiler/TestValidator.java b/test/org/apache/jasper/compiler/TestValidator.java index 1cef422..fcb83ee 100644 --- a/test/org/apache/jasper/compiler/TestValidator.java +++ b/test/org/apache/jasper/compiler/TestValidator.java @@ -241,6 +241,7 @@ public class TestValidator extends TomcatBaseTest { Assert.assertTrue(result.indexOf("<p>04-hello world</p>") > 0); Assert.assertTrue(result.indexOf("<p>#{'05-hello world'}</p>") > 0); Assert.assertTrue(result.indexOf("<p>06-hello world</p>") > 0); + Assert.assertTrue(result.indexOf("<p>07-hello world</p>") > 0); } public static class Echo extends TagSupport { diff --git a/test/webapp-5.0/WEB-INF/tags30.tld b/test/webapp-5.0/WEB-INF/tags30.tld new file mode 100644 index 0000000..76443f5 --- /dev/null +++ b/test/webapp-5.0/WEB-INF/tags30.tld @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> +<!-- + 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/javaee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee + http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_3_0.xsd" + version="3.0"> + <tlib-version>1.0</tlib-version> + <short-name>Tags30</short-name> + <uri>http://tomcat.apache.org/tags30</uri> + + <tag> + <name>Echo</name> + <tag-class>org.apache.jasper.compiler.TestValidator$Echo</tag-class> + <body-content>empty</body-content> + <attribute> + <name>echo</name> + <required>yes</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + +</taglib> \ No newline at end of file diff --git a/test/webapp-5.0/tld-versions.jsp b/test/webapp-5.0/tld-versions.jsp index debf250..1d87b0b 100644 --- a/test/webapp-5.0/tld-versions.jsp +++ b/test/webapp-5.0/tld-versions.jsp @@ -19,6 +19,7 @@ <%@ taglib prefix="tags12" uri="http://tomcat.apache.org/tags12" %> <%@ taglib prefix="tags20" uri="http://tomcat.apache.org/tags20" %> <%@ taglib prefix="tags21" uri="http://tomcat.apache.org/tags21" %> +<%@ taglib prefix="tags30" uri="http://tomcat.apache.org/tags30" %> <tags11:Echo echo="${'00-hello world'}"/> <tags11:Echo echo="#{'01-hello world'}"/> <tags12:Echo echo="${'02-hello world'}"/> @@ -26,4 +27,5 @@ <tags20:Echo echo="${'04-hello world'}"/> <tags20:Echo echo="#{'05-hello world'}"/> <tags21:Echo echo="${'06-hello world'}"/> +<tags30:Echo echo="${'07-hello world'}"/> </body></html> \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org