`struts-config_1_1.dtd`: Elements - Entities - Source | Intro - Index
FRAMES / NO FRAMES

    <!--
        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.
    -->

    <!--
         DTD for the Struts Application Configuration File, Version 1.1

         To support validation of your configuration file, include the following
         DOCTYPE element at the beginning (after the "xml" declaration):

         <!DOCTYPE struts-config PUBLIC
           "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
           "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

         $Id: struts-config_1_1.dtd 481833 2006-12-03 17:32:52Z niallp $
    -->

    <!-- ========== Defined Types ============================================= -->

    <!-- An "AttributeName" is the identifier of a page, request, session, or
         application scope attribute.
    -->
    <!ENTITY % AttributeName "CDATA">

    <!-- A "BeanName" is the identifier of a JavaBean, such as a form bean,
         and also serves as the name of the corresponding scripting variable
         and the name of the JSP attribute under which the bean is accessed.
         Therefore, it must conform to the rules for a Java identifier.
    -->
    <!ENTITY % BeanName "CDATA">

    <!-- A "Boolean" is the string representation of a boolean (true or false)
         variable.
    -->
    <!ENTITY % Boolean "(true|false|yes|no)">

    <!-- A "ClassName" is the fully qualified name of a Java class that is
         instantiated to provide the functionality of the enclosing element.
    -->
    <!ENTITY % ClassName "CDATA">

    <!-- An "Integer" is a character string consisting solely of numeric digits,
         optionally preceeded by a minus sign, that can be converted to a
         32-bit integer.
    -->
    <!ENTITY % Integer "CDATA">

    <!-- A "Location" is a relative path, delimited by "/" characters, that
         defines the location of a resource relative to the location of the
         Struts configuration file itself.
    -->
    <!ENTITY % Location "#PCDATA">

    <!-- A "PropName" is the name of a JavaBeans property, and must begin with
         a lower case letter and contain only characters that are legal in a
         Java identifier.
    -->
    <!ENTITY % PropName "CDATA">

    <!-- A "RequestPath" is an module-relative URI path, beginning with a
         slash, that identifies a mapped resource (such as a JSP page or a servlet)
         within this web application.
    -->
    <!ENTITY % RequestPath "CDATA">

    <!-- The name of a JSP bean scope within which such a form bean may be
         accessed.
    -->
    <!ENTITY % RequestScope "(request|session)">

    <!-- ========== Top Level Elements ======================================== -->

    <!-- The "struts-config" element is the root of the configuration file
         hierarchy, and contains nested elements for all of the other
         configuration settings.
    -->
    <!ELEMENT struts-config (data-sources?, form-beans?, global-exceptions?, global-forwards?, action-mappings?, controller?, message-resources*, plug-in*)>
    <!ATTLIST struts-config  id             ID              #IMPLIED>

    <!-- The "data-sources" element describes a set of DataSource objects [JDBC 2.0
         Standard Extension]. The individual DataSource objects are configured through
         nested <data-source> elements.
    -->
    <!ELEMENT data-sources (data-source*)>
    <!ATTLIST data-sources   id             ID              #IMPLIED>

    <!-- The "data-source" element describes a DataSource object [JDBC 2.0 Standard
         Extension] that will be instantiated, configured, and made available as a
         servlet context attribute (or "application-scope bean"). Any object can be
         specified so long as it implements [javax.sql.DataSource] and can be
         configured entirely from JavaBean properties. The following attributes
         are required:

         className       The configuration bean for this DataSource object. If
                         specified, the object must be a subclass of the default
                         configuration bean.
                         ["org.apache.struts.config.DataSourceConfig"]

         key             Servlet context attribute key under which this data source
                         will be stored.  Default is the value specified by string
                         constant defined by Globals.DATA_SOURCE_KEY. The application
                         module prefix (if any) is appended to the key
                         (${key}$prefix}).
                         [org.apache.struts.Globals.DATA_SOURCE_KEY]

                         NOTE: The application module prefix includes the leading
                         slash, so the default datasource for a module named "foo" is
                         stored under "org.apache.struts.action.DATA_SOURCE/foo".

         type            Fully qualified Java class name for this data source object.
                         The class must implement DataSource [javax.sql.DataSource],
                         and the object must be configurable entirely from JavaBean
                         properties.
    -->
    <!ELEMENT data-source (set-property*)>
    <!ATTLIST data-source    id             ID              #IMPLIED>
    <!ATTLIST data-source    className      %ClassName;     #IMPLIED>
    <!ATTLIST data-source    key            %AttributeName; #IMPLIED>
    <!ATTLIST data-source    type           %ClassName;     #IMPLIED>

    <!-- The "form-beans" element describes the set of form bean descriptors for this
         module. The following attributes are defined:

         type            Fully qualified Java class to use when instantiating
                         ActionFormBean objects. If specified, the object must be a
                         subclass of the default class type.

                         WARNING:  For Struts 1.0, this value is ignored.  You
                         can set the default implementation class name with the
                         "formBean" initialization parameter to the Struts
                         controller servlet.
    -->
    <!ELEMENT form-beans (form-bean*)>
    <!ATTLIST form-beans     id             ID              #IMPLIED>
    <!ATTLIST form-beans     type           %ClassName;     #IMPLIED>

    <!-- The "form-bean" element describes an ActionForm subclass
         [org.apache.struts.action.ActionForm] that can be referenced by an "action"
         element.

    The "form-bean" element describes a particular form bean, which is a
         JavaBean that implements the org.apache.struts.action.ActionForm
         class.  The following attributes are defined:

         className       The configuration bean for this form bean object. If
                         specified, the object must be a subclass of the default
                         configuration bean.
                         ["org.apache.struts.config.FormBeanConfig"]

         dynamic         If the form bean type is a  DynaActionForm subclass (that you
                         created), then (and only then) set this attribute to "true".
                         If the type is set to the default DynaActionForm or any
                         conventional ActionForm subclass, then this attribute can be
                         omitted.
                         [true] if type is "org.apache.struts.action.DynaActionForm"
                         [false] otherwise  DEPRECATED - THIS IS NOW DETERMINED
                         DYNAMICALLY BASED ON THE SPECIFIED IMPLEMENTATION CLASS.

         name            The unique identifier for this form bean. Referenced by the
                         <action> element to specify which form bean to use with its
                         request.

         type            Fully qualified Java class name of the ActionForm subclass
                         to use with this form bean.
    -->
    <!ELEMENT form-bean (icon?, display-name?, description?, set-property*, form-property*)>
    <!ATTLIST form-bean      id             ID              #IMPLIED>
    <!ATTLIST form-bean      className      %ClassName;     #IMPLIED>
    <!ATTLIST form-bean      dynamic        %Boolean;       #IMPLIED>
    <!ATTLIST form-bean      name           %BeanName;      #REQUIRED>
    <!ATTLIST form-bean      type           %ClassName;     #REQUIRED>

    <!-- The "form-property" element describes a JavaBean property that can be used to
         configure an instance of a DynaActionForm or a subclass thereof. This element
         is only utilized when the "type" attribute of the enclosing "form-bean" element
         is [org.apache.struts.action.DynaActionForm] or a subclass of DynaActionForm. If
         a custom DynaActionForm subclass is used, then the "dynamic" attribute of the
         enclosing <form-bean> element must be set to "true". Since Struts 1.1.

         className       The configuration bean for this form property object. If
                         specified, the object must be a subclass of the default
                         configuration bean.
                         ["org.apache.struts.config.FormPropertyConfig"]

         initial         String representation of the initial value for this property.
                         If not specified, primitives will be initialized to zero and
                         objects initialized to the zero-argument instantiation of that
                         object class.  For example, Strings will be initialized to ""

         name            The name of the JavaBean property described by this element.

         size            The number of array elements to create if the value of the
                         "type" attribute specifies an array, but there is no value
                         specified for the "initial" attribute.

         type            Fully qualified Java class name of the field underlying this
                         property, optionally followed by "[]" to indicate that the
                         field is indexed.
    -->
    <!ELEMENT form-property  (set-property*)>
    <!ATTLIST form-property  className      %ClassName;     #IMPLIED>
    <!ATTLIST form-property  initial        CDATA           #IMPLIED>
    <!ATTLIST form-property  name           %PropName;      #REQUIRED>
    <!ATTLIST form-property  size           %Integer;       #IMPLIED>
    <!ATTLIST form-property  type           %ClassName;     #REQUIRED>

    <!-- The "global-exceptions" element describes a set of exceptions that might be
         thrown by an Action object. The handling of individual exception types is
         configured through nested exception elements. An <action> element may
         override a global exception handler by registering a local exception handler
         for the same exception type. Since Struts 1.1.
    -->
    <!ELEMENT global-exceptions (exception*)>
    <!ATTLIST global-exceptions id          ID              #IMPLIED>

    <!-- The "exception" element registers an ExceptionHandler for an exception type.
         The following attributes are defined:

        bundle           Servlet context attribute for the message resources bundle
                         associated with this handler. The default attribute is the
                         value specified by the string constant declared at
                         Globals.MESSAGES_KEY.
                         [org.apache.struts.Globals.MESSAGES_KEY]

        className        The configuration bean for this ExceptionHandler object.
                         If specified, className must be a subclass of the default
                         configuration bean
                         ["org.apache.struts.config.ExceptionConfig"]

        handler          Fully qualified Java class name for this exception handler.
                         ["org.apache.struts.action.ExceptionHandler"]

        key              The key to use with this handler's message resource bundle
                         that will retrieve the error message template for this
                         exception.

        path             The module-relative URI to the resource that will complete
                         the request/response if this exception occurs.

        scope            The context ("request" or "session") that is used to access
                         the ActionError object [org.apache.struts.action.ActionError]
                         for this exception.

        type             Fully qualified Java class name of the exception type to
                         register with this handler.
    -->
    <!ELEMENT exception (icon?, display-name?, description?, set-property*)>
    <!ATTLIST exception      id             ID              #IMPLIED>
    <!ATTLIST exception      bundle         %AttributeName; #IMPLIED>
    <!ATTLIST exception      className      %ClassName;     #IMPLIED>
    <!ATTLIST exception      handler        %ClassName;     #IMPLIED>
    <!ATTLIST exception      key            CDATA           #REQUIRED>
    <!ATTLIST exception      path           %RequestPath;   #IMPLIED>
    <!ATTLIST exception      scope          CDATA           #IMPLIED>
    <!ATTLIST exception      type           %ClassName;     #REQUIRED>

    <!-- The "global-forwards" element describes a set of ActionForward objects
         [org.apache.struts.action.ActionForward] that are available to all Action
         objects as a return value. The individual ActionForwards are configured
         through nested <forward> elements. An <action> element may override a global
         forward by defining a local <forward> of the same name.

         type            Fully qualified Java class to use when instantiating
                         ActionForward objects.  If specified, the object must be a
                         subclass of the default class type.

                         WARNING:  For Struts 1.0, this value is ignored.  You
                         can set the default implementation class name with the
                         "forward" initialization parameter to the Struts
                         controller servlet.
    -->
    <!ELEMENT global-forwards (forward*)>
    <!ATTLIST global-forwards id            ID              #IMPLIED>
    <!ATTLIST global-forwards type          %ClassName;     #IMPLIED>

    <!-- The "forward" element describes an ActionForward that is to be made
         available to an Action as a return value. An ActionForward is referenced by
         a logical name and encapsulates a URI. A "forward" element may be used to
         describe both global and local ActionForwards. Global forwards are available
         to all the Action objects in the module. Local forwards can be
         nested within an <action> element and only available to an Action object
         when it is invoked through that ActionMapping.

         className       Fully qualified Java class name of ActionForward
                         subclass to use for this object.
                         ["org.apache.struts.action.ActionForward"]

        contextRelative  Set this to "true" if, in a modular application, the path
                         attribute starts with a slash "/" and should be considered
                         relative to the entire web application rather than the module.
                         Since Struts 1.1.
                         [false]

         name            The unique identifier for this forward. Referenced by the
                         Action object at runtime to select - by its logical name -
                         the resource that should complete the request/response.

         path            The module-relative or context-relative path to the resources
                         that is encapsulated by the logical name of this ActionForward.
                         If the path is to be considered context-relative when used in
                         a modular application, then the contextRelative attribute
                         should be set to "true". This value should begin with a slash
                         ("/") character.

         redirect        Set to "true" if a redirect instruction should be issued to
                         the user-agent so that a new request is issued for this
                         forward's resource. If true,  RequestDispatcher.Redirect is
                         called. If "false", RequestDispatcher.forward is called instead.
                         [false]
    -->
    <!ELEMENT forward (icon?, display-name?, description?, set-property*)>
    <!ATTLIST forward        id             ID              #IMPLIED>
    <!ATTLIST forward        className      %ClassName;     #IMPLIED>
    <!ATTLIST forward        contextRelative %Boolean;      #IMPLIED>
    <!ATTLIST forward        name           CDATA           #REQUIRED>
    <!ATTLIST forward        path           %RequestPath;   #REQUIRED>
    <!ATTLIST forward        redirect       %Boolean;       #IMPLIED>

    <!-- The "action-mappings" element describes a set of ActionMapping objects
         [org.apache.struts.action.ActionMapping] that are available to process
         requests matching the url-pattern our ActionServlet registered with the
         container. The individual ActionMappings are configured through nested
         <action> elements. The following attributes are defined:

         type           Fully qualified Java class to use when instantiating
                        ActionMapping objects. If specified, the object must be a
                        subclass of the default class type.

                        WARNING:  For Struts 1.0, this value is ignored.  You
                        can set the default implementation class name with the
                        "mapping" initialization parameter to the Struts
                        controller servlet.
    -->
    <!ELEMENT action-mappings (action*)>
    <!ATTLIST action-mappings id             ID              #IMPLIED>
    <!ATTLIST action-mappings type           %ClassName;     #IMPLIED>

    <!-- The "action" element describes an ActionMapping object that is to be used
         to process a request for a specific module-relative URI. The following
         attributes are defined:

         attribute       Name of the request-scope or session-scope attribute that
                         is used to access our ActionForm bean, if it is other than
                         the bean's specified "name". Optional if "name" is specified,
                         else not valid.

         className       The fully qualified Java class name of the ActionMapping
                         subclass to use for this action mapping object. Defaults to
                         the type specified by the enclosing <action-mappings>
                         element or to "org.apache.struts.action.ActionMapping" if
                         not specified.
                         ["org.apache.struts.action.ActionMapping"]

         forward         Module-relative path of the servlet or other resource that
                         will process this request, instead of the Action class
                         specified by "type".  The path WILL NOT be processed
                         through the "forwardPattern" attribute that is configured
                         on the "controller" element for this module.
                         Exactly one of "forward", "include", or "type" must be
                         specified.

         include         Module-relative path of the servlet or other resource that
                         will process this request, instead of the Action class
                         specified by "type".  The path WILL NOT be processed
                         through the "forwardPattern" attribute that is configured
                         on the "controller" element for this module.
                         Exactly one of "forward", "include", or "type" must be
                         specified.

         input           Module-relative path of the action or other resource to
                         which control should be returned if a validation error is
                         encountered. Valid only when "name" is specified. Required
                         if "name" is specified and the input bean returns
                         validation errors. Optional if "name" is specified and the
                         input bean does not return validation errors.

         name            Name of the form bean, if any, that is associated with this
                         action mapping.

         path            The module-relative path of the submitted request, starting
                         with a "/" character, and without the filename extension if
                         extension mapping is used.

                         NOTE:  Do *not* include a period in your path name,
                         because it will look like a filename extension and
                         cause your Action to not be located.

         parameter       General-purpose configuration parameter that can be used to
                         pass extra information to the Action object selected by
                         this action mapping.

         prefix          Prefix used to match request parameter names to ActionForm
                         property names, if any. Optional if "name" is specified,
                         else not allowed.

         roles           Comma-delimited list of security role names that are allowed
                         access to this ActionMapping object. Since Struts 1.1.

         scope           The context ("request" or "session") that is used to
                         access our ActionForm bean, if any.  Optional if "name" is
                         specified, else not valid.

         suffix          Suffix used to match request parameter names to ActionForm
                         bean property names, if any. Optional if "name" is
                         specified, else not valid.

         type            Fully qualified Java class name of the Action subclass
                         [org.apache.struts.action.Action] that will process requests
                         for this action mapping. Not valid if either the "forward"
                         or "include" attribute is specified.  Exactly one of
                         "forward", "include", or "type" must be specified.

         unknown         Set to "true" if this object should be configured as the
                         default action mapping for this module. If a request does not
                         match another object, it will be passed to the ActionMapping
                         object with unknown set to "true". Only one ActionMapping
                         can be marked as "unknown" within a module.
                         [false]

         validate        Set to "true" if the validate method of the ActionForm bean
                         should be called prior to calling the Action object for this
                         action mapping, or set to "false" if you do not want the
                         validate method called.
                         [true]
    -->
    <!ELEMENT action (icon?, display-name?, description?, set-property*, exception*, forward*)>
    <!ATTLIST action         id             ID              #IMPLIED>
    <!ATTLIST action         attribute      %BeanName;      #IMPLIED>
    <!ATTLIST action         className      %ClassName;     #IMPLIED>
    <!ATTLIST action         forward        %RequestPath;   #IMPLIED>
    <!ATTLIST action         include        %RequestPath;   #IMPLIED>
    <!ATTLIST action         input          %RequestPath;   #IMPLIED>
    <!ATTLIST action         name           %BeanName;      #IMPLIED>
    <!ATTLIST action         parameter      CDATA           #IMPLIED>
    <!ATTLIST action         path           %RequestPath;   #REQUIRED>
    <!ATTLIST action         prefix         CDATA           #IMPLIED>
    <!ATTLIST action         roles          CDATA           #IMPLIED>
    <!ATTLIST action         scope          %RequestScope;  #IMPLIED>
    <!ATTLIST action         suffix         CDATA           #IMPLIED>
    <!ATTLIST action         type           %ClassName;     #IMPLIED>
    <!ATTLIST action         unknown        %Boolean;       #IMPLIED>
    <!ATTLIST action         validate       %Boolean;       #IMPLIED>

    <!-- The "controller" element describes the ControllerConfig bean
         [org.apache.struts.config.ControllerConfig] that encapsulates
         a module's runtime configuration. The following
         attributes are defined:

         bufferSize      The size of the input buffer used when processing
                         file uploads.
                         [4096]

         className       Fully qualified Java class name of the
                         ControllerConfig subclass for this controller object.
                         If specified, the object must be a subclass of the
                         default class.
                         ["org.apache.struts.config.ControllerConfig"]

         contentType     Default content type (and optional character encoding) to
                         be set on each response. May be overridden by the Action,
                         JSP, or other resource to which the request is forwarded.
                         ["text/html"]

         debug           Debugging detail level for this module. [0]
                         DEPRECATED - configure the logging detail level
                         in your underlying logging implementation.

         forwardPattern  Replacement pattern defining how the "path" attribute of a
                         <forward> element is mapped to a context-relative URL when
                         it starts with a slash (and when the contextRelative
                         property is false). This value may consist of any
                         combination of the following:
                         - "$M" - Replaced by the module prefix of this module
                         - "$P" - Replaced by the "path" attribute of the  selected
                         "forward" element
                         - "$$" - Causes a literal dollar sign to be rendered
                         - "$x" - (Where "x" is any character not defined above)
                         Silently swallowed, reserved for future use
                         If not specified, the default forwardPattern is "$M$P",
                         which is consistent with the previous behavior of
                         forwards.  Since Struts 1.1.  ["$M$P"]

         inputForward    Set to "true" if you want the "input" attribute of
                         <action> elements to be the name of a local or global
                         ActionForward, which will then be used to calculate the
                         ultimate URL. Set to "false" (the default) to treat the
                         "input" parameter of <action> elements as a
                         module-relative path to the resource
                         to be used as the input form. Since Struts 1.1.
                         [false]

         locale          Set to "true" if you want a Locale object stored in the
                         user's session if not already present.
                         [true]

         maxFileSize     The maximum size (in bytes) of a file to be accepted as a
                         file upload.  Can be expressed as a number followed by a
                         "K", "M", or "G", which are interpreted to mean kilobytes,
                         megabytes, or gigabytes, respectively.
                         ["250M"]

         memFileSize     The maximum size (in bytes) of a file whose contents will
                         be retained in memory after uploading. Files larger than
                         this threshold will be written to some alternative storage
                         medium, typically a hard disk. Can be expressed as a number
                         followed by a "K", "M", or "G", which are interpreted to
                         mean kilobytes, megabytes, or gigabytes, respectively.
                         ["256K"]

         multipartClass  The fully qualified Java class name of the multipart
                         request handler class to be used with this module.
                         ["org.apache.struts.upload.CommonsMultipartRequestHandler"]

         nocache         Set to "true" if you want the controller to add HTTP
                         headers for defeating caching to every response from
                         this module.  [false]

         pagePattern     Replacement pattern defining how the "page" attribute of
                         custom tags using it is mapped to a context-relative URL
                         of the corresponding resource.  This value may consist of
                         any combination of the following:
                         - "$M" - Replaced by the module prefix of this module
                         - "$P" - Replaced by the value of the "page" attribute
                         - "$$" - Causes a literal dollar sign to be rendered
                         - "$x" - (Where "x" is any character not defined above)
                                  Silently swallowed, reserved for future use
                         If not specified, the default forwardPattern is
                         "$M$P", which is consistent with previous hard coded
                         behavior of URL evaluation for "page" attributes.
                         ["$M$P"]

         processorClass  The fully qualified Java class name of the
                         RequestProcessor subclass to be used with this module.
                         ["org.apache.struts.action.RequestProcessor"]

         tempDir         Temporary working directory to use when processing
                         file uploads.
                         [{Directory provided by servlet container}]
    -->
    <!ELEMENT controller     (set-property*)>
    <!ATTLIST controller     id             ID              #IMPLIED>
    <!ATTLIST controller     bufferSize     %Integer;       #IMPLIED>
    <!ATTLIST controller     className      %ClassName;     #IMPLIED>
    <!ATTLIST controller     contentType    CDATA           #IMPLIED>
    <!ATTLIST controller     debug          %Integer;       #IMPLIED>
    <!ATTLIST controller     forwardPattern CDATA           #IMPLIED>
    <!ATTLIST controller     inputForward   %Boolean;       #IMPLIED>
    <!ATTLIST controller     locale         %Boolean;       #IMPLIED>
    <!ATTLIST controller     maxFileSize    CDATA           #IMPLIED>
    <!ATTLIST controller     memFileSize    CDATA           #IMPLIED>
    <!ATTLIST controller     multipartClass %ClassName;     #IMPLIED>
    <!ATTLIST controller     nocache        %Boolean;       #IMPLIED>
    <!ATTLIST controller     pagePattern    CDATA           #IMPLIED>
    <!ATTLIST controller     processorClass %ClassName;     #IMPLIED>
    <!ATTLIST controller     tempDir        CDATA           #IMPLIED>

    <!-- The "message-resources" element describes a MessageResources object with
         message templates for this module. The following attributes are defined:

         className       The configuration bean for this message resources object.
                         If specified, the object must be a subclass of the default
                         configuration bean.
                         ["org.apache.struts.config.MessageResourcesConfig"]

         factory         Fully qualified Java class name of the
                         MessageResourcesFactory subclass to use for this message
                         resources object.
                         ["org.apache.struts.util.PropertyMessageResourcesFactory"]

         key             Servlet context attribute under which this message
                         resources bundle will be stored. The default attribute is
                         the value specified by the string constant at
                         [Globals.MESSAGES_KEY]. The module prefix (if
                         any) is appended to the key (${key}${prefix}).
                         [org.apache.struts.Globals.MESSAGES_KEY]

                         NOTE: The module  prefix includes the leading
                         slash, so the default message resource bundle for a module
                         named "foo" is stored under
                         "org.apache.struts.action.MESSAGE/foo".

         null            Set to "true" if you want our message resources to return a
                         null string for unknown message keys, or "false" to return a
                         message with the bad key value.

         parameter       Configuration parameter to be passed to the createResources
                         method of our factory object.
    -->
    <!ELEMENT message-resources (set-property*)>
    <!ATTLIST message-resources id          ID              #IMPLIED>
    <!ATTLIST message-resources className   %ClassName;     #IMPLIED>
    <!ATTLIST message-resources factory     %ClassName;     #IMPLIED>
    <!ATTLIST message-resources key         %AttributeName; #IMPLIED>
    <!ATTLIST message-resources null        %Boolean;       #IMPLIED>
    <!ATTLIST message-resources parameter   CDATA           #REQUIRED>

    <!-- The "plug-in" element specifies the fully qualified class name of a
         general-purpose application plug-in module that receives notification of
         application startup and shutdown events. An instance of the specified class
         is created for each element, and can be configured with nested <set-property>
         elements. The following attributes are supported:

         className       Fully qualified Java class name of the plug-in class; must
                         implement [org.apache.struts.action.PlugIn].
    -->
    <!ELEMENT plug-in           (set-property*)>
    <!ATTLIST plug-in           id          ID              #IMPLIED>
    <!ATTLIST plug-in           className   %ClassName;     #REQUIRED>

    <!-- ========== Subordinate Elements ====================================== -->

    <!-- The "description" element contains descriptive (paragraph length) text
         about the surrounding element, suitable for use in GUI tools.
    -->
    <!ELEMENT description    (#PCDATA)>
    <!ATTLIST description    id             ID              #IMPLIED>

    <!-- The "display-name" element contains a short (one line) description of
         the surrounding element, suitable for use in GUI tools.
    -->
    <!ELEMENT display-name (#PCDATA)>
    <!ATTLIST display-name   id             ID              #IMPLIED>

    <!-- The "icon" element contains a small-icon and large-icon element which
         specify the location, relative to the Struts configuration file, for small
         and large images used to represent the surrounding element in GUI tools.
    -->
    <!ELEMENT icon           (small-icon?, large-icon?)>
    <!ATTLIST icon           id             ID              #IMPLIED>

    <!-- The "large-icon" element specifies the location, relative to the Struts
         configuration file, of a resource containing a large (32x32 pixel)
         icon image.
    -->
    <!ELEMENT large-icon     (%Location;)>
    <!ATTLIST large-icon     id             ID              #IMPLIED>

    <!-- The "set-property" element specifies the method name and initial value of
         an additional JavaBean configuration property. When the object representing
         the surrounding element is instantiated, the accessor for the indicated
         property is called and passed the indicated value. The "set-property"
         element is especially useful when a custom subclass is used with
         <data-source>, <forward>, <action>, or <plug-in> elements. The subclass
         can be passed whatever other properties may be required to configure the
         object without changing how the struts-config is parsed.

         property        Name of the JavaBeans property whose setter method
                         will be called.

         value           String representation of the value to which this
                         property will be set, after suitable type conversion
    -->
    <!ELEMENT set-property   EMPTY>
    <!ATTLIST set-property   id             ID              #IMPLIED>
    <!ATTLIST set-property   property       %PropName;      #REQUIRED>
    <!ATTLIST set-property   value          CDATA           #REQUIRED>

    <!-- The "small-icon" element specifies the location, relative to the Struts
         configuration file, of a resource containing a small (16x16 pixel)
         icon image.
    -->
    <!ELEMENT small-icon     (%Location;)>
    <!ATTLIST small-icon     id             ID              #IMPLIED>