Apache Geronimo
Copyright 2003-2010 The Apache Software Foundation

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

Apache Geronimo elects to include the following files in this distribution
under the CDDL license:

===========================
  application_6.xsd
  application-client_6.xsd
  connector_1_6.xsd
  ejb-jar_3_1.xsd
  javaee_6.xsd
  javaee_web_services_1_3.xsd
  javaee_web_services_client_1_3.xsd
  jsp_2_2.xsd
  persistence_2_0.xsd
  web-app_3_0.xsd
  web-common_3_0.xsd
  web-fragment_3_0.xsd
===========================
