diff options
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.java | 141 |
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 () |