Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jetty-webapp/src/main/java/org/eclipse/jetty/webapp/Descriptor.java')
-rw-r--r--jetty-webapp/src/main/java/org/eclipse/jetty/webapp/Descriptor.java141
1 files changed, 101 insertions, 40 deletions
diff --git a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/Descriptor.java b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/Descriptor.java
index 8e3458589a..e6aca3c819 100644
--- a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/Descriptor.java
+++ b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/Descriptor.java
@@ -23,8 +23,6 @@ import javax.servlet.Servlet;
import org.eclipse.jetty.util.Loader;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.resource.Resource;
-import org.eclipse.jetty.webapp.WebXmlProcessor.AbsoluteOrdering;
-import org.eclipse.jetty.webapp.WebXmlProcessor.Ordering;
import org.eclipse.jetty.xml.XmlParser;
@@ -35,37 +33,121 @@ import org.eclipse.jetty.xml.XmlParser;
* A web descriptor (web.xml/web-defaults.xml/web-overrides.xml).
*/
public class Descriptor
-{
+{
+ protected static XmlParser _parser;
public enum MetaDataComplete {NotSet, True, False};
protected Resource _xml;
protected XmlParser.Node _root;
protected MetaDataComplete _metaDataComplete;
protected int _majorVersion = 3; //default to container version
protected int _minorVersion = 0;
- protected ArrayList<String> _classNames;
+ protected ArrayList<String> _classNames = new ArrayList<String>();
protected boolean _distributable;
protected boolean _validating;
- protected WebXmlProcessor _processor;
+ protected MetaData _metaData;
protected boolean _isOrdered = false;
protected List<String> _ordering = new ArrayList<String>();
+
+ public static XmlParser newParser()
+ throws ClassNotFoundException
+ {
+ XmlParser xmlParser=new XmlParser();
+ //set up cache of DTDs and schemas locally
+ URL dtd22=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_2_2.dtd",true);
+ URL dtd23=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_2_3.dtd",true);
+ URL j2ee14xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/j2ee_1_4.xsd",true);
+ URL webapp24xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_2_4.xsd",true);
+ URL webapp25xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_2_5.xsd",true);
+ URL webapp30xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_3_0.xsd",true);
+ URL webcommon30xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-common_3_0.xsd",true);
+ URL webfragment30xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-fragment_3_0.xsd",true);
+ URL schemadtd=Loader.getResource(Servlet.class,"javax/servlet/resources/XMLSchema.dtd",true);
+ URL xmlxsd=Loader.getResource(Servlet.class,"javax/servlet/resources/xml.xsd",true);
+ URL webservice11xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/j2ee_web_services_client_1_1.xsd",true);
+ URL webservice12xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/javaee_web_services_client_1_2.xsd",true);
+ URL datatypesdtd=Loader.getResource(Servlet.class,"javax/servlet/resources/datatypes.dtd",true);
+
+ URL jsp20xsd = null;
+ URL jsp21xsd = null;
+
+ try
+ {
+ Class jsp_page = Loader.loadClass(WebXmlConfiguration.class, "javax.servlet.jsp.JspPage");
+ jsp20xsd = jsp_page.getResource("/javax/servlet/resources/jsp_2_0.xsd");
+ jsp21xsd = jsp_page.getResource("/javax/servlet/resources/jsp_2_1.xsd");
+ }
+ catch (Exception e)
+ {
+ Log.ignore(e);
+ }
+ finally
+ {
+ if (jsp20xsd == null) jsp20xsd = Loader.getResource(Servlet.class, "javax/servlet/resources/jsp_2_0.xsd", true);
+ if (jsp21xsd == null) jsp21xsd = Loader.getResource(Servlet.class, "javax/servlet/resources/jsp_2_1.xsd", true);
+ }
+
+ redirect(xmlParser,"web-app_2_2.dtd",dtd22);
+ redirect(xmlParser,"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN",dtd22);
+ redirect(xmlParser,"web.dtd",dtd23);
+ redirect(xmlParser,"web-app_2_3.dtd",dtd23);
+ redirect(xmlParser,"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN",dtd23);
+ redirect(xmlParser,"XMLSchema.dtd",schemadtd);
+ redirect(xmlParser,"http://www.w3.org/2001/XMLSchema.dtd",schemadtd);
+ redirect(xmlParser,"-//W3C//DTD XMLSCHEMA 200102//EN",schemadtd);
+ redirect(xmlParser,"jsp_2_0.xsd",jsp20xsd);
+ redirect(xmlParser,"http://java.sun.com/xml/ns/j2ee/jsp_2_0.xsd",jsp20xsd);
+ redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/jsp_2_1.xsd",jsp21xsd);
+ redirect(xmlParser,"j2ee_1_4.xsd",j2ee14xsd);
+ redirect(xmlParser,"http://java.sun.com/xml/ns/j2ee/j2ee_1_4.xsd",j2ee14xsd);
+ redirect(xmlParser,"web-app_2_4.xsd",webapp24xsd);
+ redirect(xmlParser,"http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd",webapp24xsd);
+ redirect(xmlParser,"web-app_2_5.xsd",webapp25xsd);
+ redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd",webapp25xsd);
+ redirect(xmlParser,"web-app_3_0.xsd",webapp30xsd);
+ redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd",webapp30xsd);
+ redirect(xmlParser,"web-common_3_0.xsd",webcommon30xsd);
+ redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/web-common_3_0.xsd",webcommon30xsd);
+ redirect(xmlParser,"web-fragment_3_0.xsd",webfragment30xsd);
+ redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd",webfragment30xsd);
+ redirect(xmlParser,"xml.xsd",xmlxsd);
+ redirect(xmlParser,"http://www.w3.org/2001/xml.xsd",xmlxsd);
+ redirect(xmlParser,"datatypes.dtd",datatypesdtd);
+ redirect(xmlParser,"http://www.w3.org/2001/datatypes.dtd",datatypesdtd);
+ redirect(xmlParser,"j2ee_web_services_client_1_1.xsd",webservice11xsd);
+ redirect(xmlParser,"http://www.ibm.com/webservices/xsd/j2ee_web_services_client_1_1.xsd",webservice11xsd);
+ redirect(xmlParser,"javaee_web_services_client_1_2.xsd",webservice12xsd);
+ redirect(xmlParser,"http://www.ibm.com/webservices/xsd/javaee_web_services_client_1_2.xsd",webservice12xsd);
+ return xmlParser;
+ }
+
- public Descriptor (Resource xml, WebXmlProcessor processor)
+ protected static void redirect(XmlParser parser, String resource, URL source)
+ {
+ if (source != null) parser.redirectEntity(resource, source);
+ }
+
+
+
+ public Descriptor (Resource xml, MetaData md)
{
_xml = xml;
- _processor = processor;
+ _metaData = md;
}
public void parse ()
throws Exception
{
+ if (_parser == null)
+ _parser = newParser();
+
if (_root == null)
{
//boolean oldValidating = _processor.getParser().getValidating();
//_processor.getParser().setValidating(_validating);
- _root = _processor.getParser().parse(_xml.getURL().toString());
+ _root = _parser.parse(_xml.getURL().toString());
processVersion();
processOrdering();
//_processor.getParser().setValidating(oldValidating);
@@ -98,6 +180,11 @@ public class Descriptor
return _xml;
}
+ public MetaData getMetaData()
+ {
+ return _metaData;
+ }
+
public void processVersion ()
{
String version = _root.getAttribute("version", "DTD");
@@ -105,7 +192,7 @@ public class Descriptor
{
_majorVersion = 2;
_minorVersion = 3;
- String dtd = _processor.getParser().getDTD();
+ String dtd = _parser.getDTD();
if (dtd != null && dtd.indexOf("web-app_2_2") >= 0)
{
_majorVersion = 2;
@@ -141,7 +228,7 @@ public class Descriptor
//Process the web.xml's optional <absolute-ordering> element
XmlParser.Node ordering = _root.get("absolute-ordering");
if (ordering == null)
- return; // could be a RelativeOrdering if we find any <ordering> clauses in web-fragments
+ return;
_isOrdered = true;
//If an absolute-ordering was already set, then ignore it in favour of this new one
@@ -163,37 +250,11 @@ public class Descriptor
_ordering.add(node.toString(false,true));
}
}
-
- public void processClassNames ()
+
+ public void addClassName (String className)
{
- _classNames = new ArrayList<String>();
- Iterator iter = _root.iterator();
-
- while (iter.hasNext())
- {
- Object o = iter.next();
- if (!(o instanceof XmlParser.Node)) continue;
- XmlParser.Node node = (XmlParser.Node) o;
- String name = node.getTag();
- if ("servlet".equals(name))
- {
- String className = node.getString("servlet-class", false, true);
- if (className != null)
- _classNames.add(className);
- }
- else if ("filter".equals(name))
- {
- String className = node.getString("filter-class", false, true);
- if (className != null)
- _classNames.add(className);
- }
- else if ("listener".equals(name))
- {
- String className = node.getString("listener-class", false, true);
- if (className != null)
- _classNames.add(className);
- }
- }
+ if (!_classNames.contains(className))
+ _classNames.add(className);
}
public ArrayList<String> getClassNames ()

Back to the top