PageRenderTime 47ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebDescriptor.java

https://github.com/dekellum/jetty
Java | 270 lines | 206 code | 41 blank | 23 comment | 24 complexity | eb678e04597607763e6402a4e76fcb43 MD5 | raw file
  1. // ========================================================================
  2. // Copyright (c) 2006-2010 Mort Bay Consulting Pty. Ltd.
  3. // ------------------------------------------------------------------------
  4. // All rights reserved. This program and the accompanying materials
  5. // are made available under the terms of the Eclipse Public License v1.0
  6. // and Apache License v2.0 which accompanies this distribution.
  7. // The Eclipse Public License is available at
  8. // http://www.eclipse.org/legal/epl-v10.html
  9. // The Apache License v2.0 is available at
  10. // http://www.opensource.org/licenses/apache2.0.php
  11. // You may elect to redistribute this code under either of these licenses.
  12. // ========================================================================
  13. package org.eclipse.jetty.webapp;
  14. import java.net.URL;
  15. import java.util.ArrayList;
  16. import java.util.Iterator;
  17. import java.util.List;
  18. import javax.servlet.Servlet;
  19. import org.eclipse.jetty.util.Loader;
  20. import org.eclipse.jetty.util.log.Log;
  21. import org.eclipse.jetty.util.log.Logger;
  22. import org.eclipse.jetty.util.resource.Resource;
  23. import org.eclipse.jetty.xml.XmlParser;
  24. /**
  25. * Descriptor
  26. *
  27. * A web descriptor (web.xml/web-defaults.xml/web-overrides.xml).
  28. */
  29. public class WebDescriptor extends Descriptor
  30. {
  31. private static final Logger LOG = Log.getLogger(WebDescriptor.class);
  32. protected static XmlParser _parserSingleton;
  33. protected MetaDataComplete _metaDataComplete;
  34. protected int _majorVersion = 3; //default to container version
  35. protected int _minorVersion = 0;
  36. protected ArrayList<String> _classNames = new ArrayList<String>();
  37. protected boolean _distributable;
  38. protected boolean _isOrdered = false;
  39. protected List<String> _ordering = new ArrayList<String>();
  40. @Override
  41. public void ensureParser()
  42. throws ClassNotFoundException
  43. {
  44. if (_parserSingleton == null)
  45. {
  46. _parserSingleton = newParser();
  47. }
  48. _parser = _parserSingleton;
  49. }
  50. public XmlParser newParser()
  51. throws ClassNotFoundException
  52. {
  53. XmlParser xmlParser=new XmlParser();
  54. //set up cache of DTDs and schemas locally
  55. URL dtd22=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_2_2.dtd",true);
  56. URL dtd23=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_2_3.dtd",true);
  57. URL j2ee14xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/j2ee_1_4.xsd",true);
  58. URL webapp24xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_2_4.xsd",true);
  59. URL webapp25xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_2_5.xsd",true);
  60. URL webapp30xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_3_0.xsd",true);
  61. URL webcommon30xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-common_3_0.xsd",true);
  62. URL webfragment30xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-fragment_3_0.xsd",true);
  63. URL schemadtd=Loader.getResource(Servlet.class,"javax/servlet/resources/XMLSchema.dtd",true);
  64. URL xmlxsd=Loader.getResource(Servlet.class,"javax/servlet/resources/xml.xsd",true);
  65. URL webservice11xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/j2ee_web_services_client_1_1.xsd",true);
  66. URL webservice12xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/javaee_web_services_client_1_2.xsd",true);
  67. URL datatypesdtd=Loader.getResource(Servlet.class,"javax/servlet/resources/datatypes.dtd",true);
  68. URL jsp20xsd = null;
  69. URL jsp21xsd = null;
  70. try
  71. {
  72. Class<?> jsp_page = Loader.loadClass(WebXmlConfiguration.class, "javax.servlet.jsp.JspPage");
  73. jsp20xsd = jsp_page.getResource("/javax/servlet/resources/jsp_2_0.xsd");
  74. jsp21xsd = jsp_page.getResource("/javax/servlet/resources/jsp_2_1.xsd");
  75. }
  76. catch (Exception e)
  77. {
  78. LOG.ignore(e);
  79. }
  80. finally
  81. {
  82. if (jsp20xsd == null) jsp20xsd = Loader.getResource(Servlet.class, "javax/servlet/resources/jsp_2_0.xsd", true);
  83. if (jsp21xsd == null) jsp21xsd = Loader.getResource(Servlet.class, "javax/servlet/resources/jsp_2_1.xsd", true);
  84. }
  85. redirect(xmlParser,"web-app_2_2.dtd",dtd22);
  86. redirect(xmlParser,"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN",dtd22);
  87. redirect(xmlParser,"web.dtd",dtd23);
  88. redirect(xmlParser,"web-app_2_3.dtd",dtd23);
  89. redirect(xmlParser,"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN",dtd23);
  90. redirect(xmlParser,"XMLSchema.dtd",schemadtd);
  91. redirect(xmlParser,"http://www.w3.org/2001/XMLSchema.dtd",schemadtd);
  92. redirect(xmlParser,"-//W3C//DTD XMLSCHEMA 200102//EN",schemadtd);
  93. redirect(xmlParser,"jsp_2_0.xsd",jsp20xsd);
  94. redirect(xmlParser,"http://java.sun.com/xml/ns/j2ee/jsp_2_0.xsd",jsp20xsd);
  95. redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/jsp_2_1.xsd",jsp21xsd);
  96. redirect(xmlParser,"j2ee_1_4.xsd",j2ee14xsd);
  97. redirect(xmlParser,"http://java.sun.com/xml/ns/j2ee/j2ee_1_4.xsd",j2ee14xsd);
  98. redirect(xmlParser,"web-app_2_4.xsd",webapp24xsd);
  99. redirect(xmlParser,"http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd",webapp24xsd);
  100. redirect(xmlParser,"web-app_2_5.xsd",webapp25xsd);
  101. redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd",webapp25xsd);
  102. redirect(xmlParser,"web-app_3_0.xsd",webapp30xsd);
  103. redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd",webapp30xsd);
  104. redirect(xmlParser,"web-common_3_0.xsd",webcommon30xsd);
  105. redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/web-common_3_0.xsd",webcommon30xsd);
  106. redirect(xmlParser,"web-fragment_3_0.xsd",webfragment30xsd);
  107. redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd",webfragment30xsd);
  108. redirect(xmlParser,"xml.xsd",xmlxsd);
  109. redirect(xmlParser,"http://www.w3.org/2001/xml.xsd",xmlxsd);
  110. redirect(xmlParser,"datatypes.dtd",datatypesdtd);
  111. redirect(xmlParser,"http://www.w3.org/2001/datatypes.dtd",datatypesdtd);
  112. redirect(xmlParser,"j2ee_web_services_client_1_1.xsd",webservice11xsd);
  113. redirect(xmlParser,"http://www.ibm.com/webservices/xsd/j2ee_web_services_client_1_1.xsd",webservice11xsd);
  114. redirect(xmlParser,"javaee_web_services_client_1_2.xsd",webservice12xsd);
  115. redirect(xmlParser,"http://www.ibm.com/webservices/xsd/javaee_web_services_client_1_2.xsd",webservice12xsd);
  116. return xmlParser;
  117. }
  118. public WebDescriptor (Resource xml)
  119. {
  120. super(xml);
  121. }
  122. public void parse ()
  123. throws Exception
  124. {
  125. super.parse();
  126. processVersion();
  127. processOrdering();
  128. }
  129. public MetaDataComplete getMetaDataComplete()
  130. {
  131. return _metaDataComplete;
  132. }
  133. public int getMajorVersion ()
  134. {
  135. return _majorVersion;
  136. }
  137. public int getMinorVersion()
  138. {
  139. return _minorVersion;
  140. }
  141. public void processVersion ()
  142. {
  143. String version = _root.getAttribute("version", "DTD");
  144. if ("DTD".equals(version))
  145. {
  146. _majorVersion = 2;
  147. _minorVersion = 3;
  148. String dtd = _parser.getDTD();
  149. if (dtd != null && dtd.indexOf("web-app_2_2") >= 0)
  150. {
  151. _majorVersion = 2;
  152. _minorVersion = 2;
  153. }
  154. }
  155. else
  156. {
  157. int dot = version.indexOf(".");
  158. if (dot > 0)
  159. {
  160. _majorVersion = Integer.parseInt(version.substring(0,dot));
  161. _minorVersion = Integer.parseInt(version.substring(dot+1));
  162. }
  163. }
  164. if (_majorVersion < 2 && _minorVersion < 5)
  165. _metaDataComplete = MetaDataComplete.True; // does not apply before 2.5
  166. else
  167. {
  168. String s = (String)_root.getAttribute("metadata-complete");
  169. if (s == null)
  170. _metaDataComplete = MetaDataComplete.NotSet;
  171. else
  172. _metaDataComplete = Boolean.valueOf(s).booleanValue()?MetaDataComplete.True:MetaDataComplete.False;
  173. }
  174. LOG.debug(_xml.toString()+": Calculated metadatacomplete = " + _metaDataComplete + " with version=" + version);
  175. }
  176. public void processOrdering ()
  177. {
  178. //Process the web.xml's optional <absolute-ordering> element
  179. XmlParser.Node ordering = _root.get("absolute-ordering");
  180. if (ordering == null)
  181. return;
  182. _isOrdered = true;
  183. //If an absolute-ordering was already set, then ignore it in favor of this new one
  184. // _processor.setOrdering(new AbsoluteOrdering());
  185. Iterator<Object> iter = ordering.iterator();
  186. XmlParser.Node node = null;
  187. while (iter.hasNext())
  188. {
  189. Object o = iter.next();
  190. if (!(o instanceof XmlParser.Node)) continue;
  191. node = (XmlParser.Node) o;
  192. if (node.getTag().equalsIgnoreCase("others"))
  193. //((AbsoluteOrdering)_processor.getOrdering()).addOthers();
  194. _ordering.add("others");
  195. else if (node.getTag().equalsIgnoreCase("name"))
  196. //((AbsoluteOrdering)_processor.getOrdering()).add(node.toString(false,true));
  197. _ordering.add(node.toString(false,true));
  198. }
  199. }
  200. public void addClassName (String className)
  201. {
  202. if (!_classNames.contains(className))
  203. _classNames.add(className);
  204. }
  205. public ArrayList<String> getClassNames ()
  206. {
  207. return _classNames;
  208. }
  209. public void setDistributable (boolean distributable)
  210. {
  211. _distributable = distributable;
  212. }
  213. public boolean isDistributable()
  214. {
  215. return _distributable;
  216. }
  217. public void setValidating (boolean validating)
  218. {
  219. _validating = validating;
  220. }
  221. public boolean isOrdered()
  222. {
  223. return _isOrdered;
  224. }
  225. public List<String> getOrdering()
  226. {
  227. return _ordering;
  228. }
  229. }