1
2
3
4
5
6
7
8
9
10
11
12
13
14 package org.eclipse.jetty.webapp;
15
16 import java.net.URL;
17 import java.util.ArrayList;
18 import java.util.Iterator;
19 import java.util.List;
20
21 import javax.servlet.Servlet;
22
23 import org.eclipse.jetty.util.Loader;
24 import org.eclipse.jetty.util.log.Log;
25 import org.eclipse.jetty.util.resource.Resource;
26 import org.eclipse.jetty.xml.XmlParser;
27
28
29
30
31
32
33
34
35 public class WebDescriptor extends Descriptor
36 {
37 protected static XmlParser _parserSingleton;
38 protected MetaDataComplete _metaDataComplete;
39 protected int _majorVersion = 3;
40 protected int _minorVersion = 0;
41 protected ArrayList<String> _classNames = new ArrayList<String>();
42 protected boolean _distributable;
43
44 protected boolean _isOrdered = false;
45 protected List<String> _ordering = new ArrayList<String>();
46
47 @Override
48 public void ensureParser()
49 throws ClassNotFoundException
50 {
51 if (_parserSingleton == null)
52 {
53 _parserSingleton = newParser();
54 }
55 _parser = _parserSingleton;
56 }
57
58
59 public XmlParser newParser()
60 throws ClassNotFoundException
61 {
62 XmlParser xmlParser=new XmlParser();
63
64 URL dtd22=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_2_2.dtd",true);
65 URL dtd23=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_2_3.dtd",true);
66 URL j2ee14xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/j2ee_1_4.xsd",true);
67 URL webapp24xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_2_4.xsd",true);
68 URL webapp25xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_2_5.xsd",true);
69 URL webapp30xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-app_3_0.xsd",true);
70 URL webcommon30xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-common_3_0.xsd",true);
71 URL webfragment30xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/web-fragment_3_0.xsd",true);
72 URL schemadtd=Loader.getResource(Servlet.class,"javax/servlet/resources/XMLSchema.dtd",true);
73 URL xmlxsd=Loader.getResource(Servlet.class,"javax/servlet/resources/xml.xsd",true);
74 URL webservice11xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/j2ee_web_services_client_1_1.xsd",true);
75 URL webservice12xsd=Loader.getResource(Servlet.class,"javax/servlet/resources/javaee_web_services_client_1_2.xsd",true);
76 URL datatypesdtd=Loader.getResource(Servlet.class,"javax/servlet/resources/datatypes.dtd",true);
77
78 URL jsp20xsd = null;
79 URL jsp21xsd = null;
80
81 try
82 {
83 Class<?> jsp_page = Loader.loadClass(WebXmlConfiguration.class, "javax.servlet.jsp.JspPage");
84 jsp20xsd = jsp_page.getResource("/javax/servlet/resources/jsp_2_0.xsd");
85 jsp21xsd = jsp_page.getResource("/javax/servlet/resources/jsp_2_1.xsd");
86 }
87 catch (Exception e)
88 {
89 Log.ignore(e);
90 }
91 finally
92 {
93 if (jsp20xsd == null) jsp20xsd = Loader.getResource(Servlet.class, "javax/servlet/resources/jsp_2_0.xsd", true);
94 if (jsp21xsd == null) jsp21xsd = Loader.getResource(Servlet.class, "javax/servlet/resources/jsp_2_1.xsd", true);
95 }
96
97 redirect(xmlParser,"web-app_2_2.dtd",dtd22);
98 redirect(xmlParser,"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN",dtd22);
99 redirect(xmlParser,"web.dtd",dtd23);
100 redirect(xmlParser,"web-app_2_3.dtd",dtd23);
101 redirect(xmlParser,"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN",dtd23);
102 redirect(xmlParser,"XMLSchema.dtd",schemadtd);
103 redirect(xmlParser,"http://www.w3.org/2001/XMLSchema.dtd",schemadtd);
104 redirect(xmlParser,"-//W3C//DTD XMLSCHEMA 200102//EN",schemadtd);
105 redirect(xmlParser,"jsp_2_0.xsd",jsp20xsd);
106 redirect(xmlParser,"http://java.sun.com/xml/ns/j2ee/jsp_2_0.xsd",jsp20xsd);
107 redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/jsp_2_1.xsd",jsp21xsd);
108 redirect(xmlParser,"j2ee_1_4.xsd",j2ee14xsd);
109 redirect(xmlParser,"http://java.sun.com/xml/ns/j2ee/j2ee_1_4.xsd",j2ee14xsd);
110 redirect(xmlParser,"web-app_2_4.xsd",webapp24xsd);
111 redirect(xmlParser,"http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd",webapp24xsd);
112 redirect(xmlParser,"web-app_2_5.xsd",webapp25xsd);
113 redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd",webapp25xsd);
114 redirect(xmlParser,"web-app_3_0.xsd",webapp30xsd);
115 redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd",webapp30xsd);
116 redirect(xmlParser,"web-common_3_0.xsd",webcommon30xsd);
117 redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/web-common_3_0.xsd",webcommon30xsd);
118 redirect(xmlParser,"web-fragment_3_0.xsd",webfragment30xsd);
119 redirect(xmlParser,"http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd",webfragment30xsd);
120 redirect(xmlParser,"xml.xsd",xmlxsd);
121 redirect(xmlParser,"http://www.w3.org/2001/xml.xsd",xmlxsd);
122 redirect(xmlParser,"datatypes.dtd",datatypesdtd);
123 redirect(xmlParser,"http://www.w3.org/2001/datatypes.dtd",datatypesdtd);
124 redirect(xmlParser,"j2ee_web_services_client_1_1.xsd",webservice11xsd);
125 redirect(xmlParser,"http://www.ibm.com/webservices/xsd/j2ee_web_services_client_1_1.xsd",webservice11xsd);
126 redirect(xmlParser,"javaee_web_services_client_1_2.xsd",webservice12xsd);
127 redirect(xmlParser,"http://www.ibm.com/webservices/xsd/javaee_web_services_client_1_2.xsd",webservice12xsd);
128 return xmlParser;
129 }
130
131
132 public WebDescriptor (Resource xml)
133 {
134 super(xml);
135 }
136
137 public void parse ()
138 throws Exception
139 {
140 super.parse();
141 processVersion();
142 processOrdering();
143 }
144
145 public MetaDataComplete getMetaDataComplete()
146 {
147 return _metaDataComplete;
148 }
149
150
151
152 public int getMajorVersion ()
153 {
154 return _majorVersion;
155 }
156
157 public int getMinorVersion()
158 {
159 return _minorVersion;
160 }
161
162
163 public void processVersion ()
164 {
165 String version = _root.getAttribute("version", "DTD");
166 if ("DTD".equals(version))
167 {
168 _majorVersion = 2;
169 _minorVersion = 3;
170 String dtd = _parser.getDTD();
171 if (dtd != null && dtd.indexOf("web-app_2_2") >= 0)
172 {
173 _majorVersion = 2;
174 _minorVersion = 2;
175 }
176 }
177 else
178 {
179 int dot = version.indexOf(".");
180 if (dot > 0)
181 {
182 _majorVersion = Integer.parseInt(version.substring(0,dot));
183 _minorVersion = Integer.parseInt(version.substring(dot+1));
184 }
185 }
186
187 if (_majorVersion < 2 && _minorVersion < 5)
188 _metaDataComplete = MetaDataComplete.True;
189 else
190 {
191 String s = (String)_root.getAttribute("metadata-complete");
192 if (s == null)
193 _metaDataComplete = MetaDataComplete.NotSet;
194 else
195 _metaDataComplete = Boolean.valueOf(s).booleanValue()?MetaDataComplete.True:MetaDataComplete.False;
196 }
197
198 Log.debug(_xml.toString()+": Calculated metadatacomplete = " + _metaDataComplete + " with version=" + version);
199 }
200
201 public void processOrdering ()
202 {
203
204 XmlParser.Node ordering = _root.get("absolute-ordering");
205 if (ordering == null)
206 return;
207
208 _isOrdered = true;
209
210
211
212 Iterator<Object> iter = ordering.iterator();
213 XmlParser.Node node = null;
214 while (iter.hasNext())
215 {
216 Object o = iter.next();
217 if (!(o instanceof XmlParser.Node)) continue;
218 node = (XmlParser.Node) o;
219
220 if (node.getTag().equalsIgnoreCase("others"))
221
222 _ordering.add("others");
223 else if (node.getTag().equalsIgnoreCase("name"))
224
225 _ordering.add(node.toString(false,true));
226 }
227 }
228
229 public void addClassName (String className)
230 {
231 if (!_classNames.contains(className))
232 _classNames.add(className);
233 }
234
235 public ArrayList<String> getClassNames ()
236 {
237 return _classNames;
238 }
239
240 public void setDistributable (boolean distributable)
241 {
242 _distributable = distributable;
243 }
244
245 public boolean isDistributable()
246 {
247 return _distributable;
248 }
249
250 public void setValidating (boolean validating)
251 {
252 _validating = validating;
253 }
254
255
256 public boolean isOrdered()
257 {
258 return _isOrdered;
259 }
260
261 public List<String> getOrdering()
262 {
263 return _ordering;
264 }
265
266
267 }