Issue Details (XML | Word | Printable)

Key: PLUTO-219
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Elliot Metsger
Reporter: Elliot Metsger
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Pluto

<distributable> element in web.xml files produced by the descriptor/depolyer sub-projects is not valid with respect to the Servlet 2.4 xsd

Created: 01/Mar/06 06:47 AM   Updated: 22/Feb/07 04:58 AM
Return to search
Component/s: None
Affects Version/s: 1.0.1
Fix Version/s: unspecified

Time Tracking:
Not Specified

File Attachments:
  Size
Text File Licensed for inclusion in ASF works PLUTO-219-01.patch 2006-03-01 10:54 AM Elliot Metsger 11 kB
Environment:
Apache Tomcat 5.5.15
Servlet 2.4 webapp

Resolution Date: 22/Jul/06 05:39 PM


 Description  « Hide
Perhaps against best practices I have a portlet that puts objects into session attributes that don't implement Serializable. Normally I prevent warnings from Tomcat by configuring a session manager (a <Manager> element inside a <Context> container) with an empty path name. See http://tomcat.apache.org/tomcat-5.5-doc/config/manager.html#Standard%20Implementation (look for the pathname attribute).

However Tomcat (at least v 5.5.15 does) seems to ignore my <Manager pathname=""/> directive when the portlet's web.xml has a "<distributable>" element present. Tomcat then fires off errors about placing non-serializable objects in the portlet session.

I think the Pluto descriptors/deployer needs to put the <distributable> element into a web.xml only when its required.



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Elliot Metsger added a comment - 01/Mar/06 10:54 AM
Again more for keeping progress to date. The patch applies cleanly against 1.0.1-release and works as well. I'd like to put in a couple more tests.

This patch adds:

descriptors/src/java/org/apache/pluto/descriptors/servlet/DistributableDD.java
  A class for modeling the <distributable> element of the web.xml

descriptors/src/java/org/apache/pluto/descriptors/servlet/DistributableDDCastorFieldHandler.java
  A custom Castor field handler which intercepts the getValue() call to the "Distributable" field.
  It returns null if the underlying DistributableDD field is set to false so that the <distributable>
  element won't be printed out when it isn't supposed to be.

descriptors/src/java/org/apache/pluto/descriptors/servlet/DistributableCastorFieldHandler.java
  A custom Castor field handler which intercepts the getValue() call to the DistributableDD field.
  It always returns null because the <distributable> element cannot carry content.

This patch modifies:

descriptors/src/test/org/apache/pluto/descriptors/servlet/WebAppDDTest.java
  Added a test for the the WebAppDD getDistributable() method

descriptors/src/java/org/apache/pluto/descriptors/servlet/WebAppDD.java
  Changes the type of the distributable field from boolean to DistributableDD and updates accessors appropriately.

descriptors/src/conf/org/apache/pluto/descriptors/servlet/castor-web-xml-mapping.xml
  Updates the Distributeable <field>'s type, and adds a custom handler for the field.
  Adds a <class> mapping for the DistributableDD type which also includes a custom handler.

Elliot Metsger added a comment - 29/Apr/06 04:51 AM
A non-empty <distributable> element is also invalid wrt servlet spec 2.3 (http://java.sun.com/dtd/web-app_2_3.dtd):

<!--
The distributable element, by its presence in a web application
deployment descriptor, indicates that this web application is
programmed appropriately to be deployed into a distributed servlet
container

Used in: web-app
-->
<!ELEMENT distributable EMPTY>

Elliot Metsger added a comment - 22/Jul/06 05:39 PM
Improved the handling of the <distributable/> element by Castor and the Admin portlet. The patch attached to this issue was the basis for the fix, but was modified before it was committed.

Here's a summary of the changes:
Added descriptors/src/java/org/apache/pluto/descriptors/servlet/DistributableDD.java
+ Models the <distributable/> web-app element

Modified descriptors/src/test/org/apache/pluto/descriptors/servlet/WebAppDDTest.java
+ Added test for the Distributable object

Modified descriptors/src/java/org/apache/pluto/descriptors/servlet/WebAppDD.java
+ Changed distributable field type from boolean to DistributableDD
+ Updated accessors

Modified descriptors/src/conf/org/apache/pluto/descriptors/servlet/castor-web-xml-mapping.xml
+ Changed the Distributable field to be a DistributableDD object
+ Added a the DistributableDDCastorFieldHandler to the Distributable field
+ Added the Distributable class, with its field handler DistributableCastorFieldHandler

Added descriptors/src/java/org/apache/pluto/descriptors/servlet/DistributableCastorFieldHandler.java
+ Intercepts Castor access to the distributable field.
+ Places an empty <distributable/> element in web.xml if a web-app is marked distributable

Added descriptors/src/java/org/apache/pluto/descriptors/servlet/DistributableDDCastorFieldHandler.java
+ Intercepts Castor access to the DistributableDD field

Modified portal/src/java/org/apache/pluto/portlet/admin/services/DeployWarService.java
+ Updated the error message thrown when extractFile(String,String) obtains a null InputStream
+ Updated addRecordsToWebXml method - it now checks for elements with no bodies. E.g. a "<distributable/>" element

Elliot Metsger added a comment - 22/Jul/06 05:52 PM
Committed r424609.