Apache Shale Test Framework
Copyright 2004-2007 The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

This product contains code written by David Geary and Cay Horstmann
for the first edition of Core JavaServer Faces. 

