JSTL 1.1 EL (Expression Language) won't work by default with the Pluto
Deployer/Descriptors sub-project
-------------------------------------------------------------------------------------------------------
Key: PLUTO-216
URL: http://issues.apache.org/jira/browse/PLUTO-216
Project: Pluto
Type: Improvement
Components: deployer
Versions: 1.0.1
Environment: Pluto 1.0.1 final, Tomcat 5.5, Java 1.5, JSTL 1.1
Reporter: Elliot Metsger
Note: this issue affects the Descriptors sub-project but I didn't see a
Component labeled "Descriptors".
Another Note: Everything in here is MHO! I'm new to this stuff.
In order to use JSTL 1.1 in a portlet view, one must use a servlet container
that supports Servlet Specification version 2.4 and JSP 2.0. Tomcat 5.5 (which
supports servlet spec 2.4/JSP 2.0) won't "activate" the JSTL 1.1 expression
language unless the attribute "version" with a value of "2.4" is present in the
<web-app> element of the web.xml deployment descriptor. I presume this is for
backwards compatability with JSTL 1.0 (see appendix A.1 of JSTL 1.1 spec).
This is an issue for portlet authors that use JSTL 1.1 EL who deploy with or
run in the pluto container, because the Pluto descriptors and portal
sub-projects don't preserve the "version" attribute on the <web-app> element if
it is placed there by the portlet author.
This potentially involves a number of changes affecting the Descriptors
sub-project (There may be classes in the Portal sub-project to be dealt with as
well, when the deployment descriptor is unmarshaled):
1. The models for Servlet 2.4 descriptors are different from Servlet 2.3
descriptors. This could lead to supporting multiple castor mapping files
instead of a singular mapping file. Currently the existing mapping file won't
marshal a valid Servlet 2.4 web.xml. This is fixed by implementing two custom
castor field handlers (to handle the pesky <distributable/> element), and
re-ordering some of the elements in the mapping file (and adding a "version"
field w/ accessors in the WebAppDD class).
2. The existing web.xml file shipped with 1.0.1 final that is used by the test
cases claims to be a Servlet 2.4 descriptor but it doesn't validate against the
2.4 XSD. This is fixed by signifigantly re-factoring the document. Additional
elements (such as <jsp-config>) are introduced into the web.xml file that don't
have corresponding Java objects - the corresponding Java objects need to be
created and the castor mapping updated in order for the unit tests to pass
(e.g. there is a problem with unmarshaling a 2.4 descriptor).
3. Minor modifications were made to AbstractCastorDescriptorService in order to
allow implementations to suppy their own org.apache.xml.serializer.OutputFormat
(since Servlet 2.3 descriptors should have a Doctype and Servlet 2.4
descriptors don't).
These are just three issues that I've found so far. I started out by trying to
do the simplest thing possible: just have the Descriptors sub-project preserve
a version attribute if it is present. It has kind of snowballed from there as
I dug into the code.
Probably the Descriptors project doesn't need to know everything about the
descriptor. If castor runs across elements during marshaling that aren't
defined in the mapping file, it can be ignorant of the elements (as long as
they aren't required for Pluto's purposes!); when it comes time to unmarshal
the descriptor it can just spit the unknown elements back out into the web.xml
in document order. So the solution may be simpler than I've outlined above.
I'm going to go back and try to do the simplest thing and I'll put a patch on
this issue and see what people think.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira