You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by cr...@locus.apache.org on 2000/11/24 23:36:26 UTC
cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/xml SaxContext.java XmlMapper.java
craigmcc 00/11/24 14:36:26
Modified: catalina/src/share/org/apache/catalina Context.java
catalina/src/share/org/apache/catalina/core
StandardContext.java
catalina/src/share/org/apache/catalina/startup
ContextConfig.java
catalina/src/share/org/apache/catalina/util/xml
SaxContext.java XmlMapper.java
Log:
Provide a mechanism where the public identifier of the web application
deployment descriptor DTD is communicated to the Context implementation
object. This will be necessary in order to apply the looser (in 2.2)
versus tighter (in 2.3) validation on web.xml values (such as the 2.3
requirement that a <jsp-file> entry begin with a "/").
This mechanism is not yet used -- that will be the next patch, separated
so that we can clearly see what rules are being relaxed (in the name of
backwards compatibility) when parsing a 2.2 web.xml file.
Revision Changes Path
1.14 +20 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Context.java
Index: Context.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Context.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- Context.java 2000/10/29 00:37:55 1.13
+++ Context.java 2000/11/24 22:36:22 1.14
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Context.java,v 1.13 2000/10/29 00:37:55 craigmcc Exp $
- * $Revision: 1.13 $
- * $Date: 2000/10/29 00:37:55 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Context.java,v 1.14 2000/11/24 22:36:22 craigmcc Exp $
+ * $Revision: 1.14 $
+ * $Date: 2000/11/24 22:36:22 $
*
* ====================================================================
*
@@ -95,7 +95,7 @@
* <p>
*
* @author Craig R. McClanahan
- * @version $Revision: 1.13 $ $Date: 2000/10/29 00:37:55 $
+ * @version $Revision: 1.14 $ $Date: 2000/11/24 22:36:22 $
*/
public interface Context extends Container {
@@ -251,6 +251,22 @@
* @param path The new context path
*/
public void setPath(String path);
+
+
+ /**
+ * Return the public identifier of the deployment descriptor DTD that is
+ * currently being parsed.
+ */
+ public String getPublicId();
+
+
+ /**
+ * Set the public identifier of the deployment descriptor DTD that is
+ * currently being parsed.
+ *
+ * @param publicId The public identifier
+ */
+ public void setPublicId(String publicId);
/**
1.29 +38 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContext.java
Index: StandardContext.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContext.java,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- StandardContext.java 2000/11/04 06:46:07 1.28
+++ StandardContext.java 2000/11/24 22:36:23 1.29
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContext.java,v 1.28 2000/11/04 06:46:07 remm Exp $
- * $Revision: 1.28 $
- * $Date: 2000/11/04 06:46:07 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContext.java,v 1.29 2000/11/24 22:36:23 craigmcc Exp $
+ * $Revision: 1.29 $
+ * $Date: 2000/11/24 22:36:23 $
*
* ====================================================================
*
@@ -131,7 +131,7 @@
*
* @author Craig R. McClanahan
* @author Remy Maucherat
- * @version $Revision: 1.28 $ $Date: 2000/11/04 06:46:07 $
+ * @version $Revision: 1.29 $ $Date: 2000/11/24 22:36:23 $
*/
public final class StandardContext
@@ -326,6 +326,14 @@
/**
+ * The public identifier of the DTD for the web application deployment
+ * descriptor version we are currently parsing. This is used to support
+ * relaxed validation rules when processing version 2.2 web.xml files.
+ */
+ private String publicId = null;
+
+
+ /**
* The reloadable flag for this web application.
*/
private boolean reloadable = false;
@@ -730,6 +738,32 @@
public void setPath(String path) {
setName(RequestUtil.URLDecode(path));
+
+ }
+
+
+ /**
+ * Return the public identifier of the deployment descriptor DTD that is
+ * currently being parsed.
+ */
+ public String getPublicId() {
+
+ return (this.publicId);
+
+ }
+
+
+ /**
+ * Set the public identifier of the deployment descriptor DTD that is
+ * currently being parsed.
+ *
+ * @param publicId The public identifier
+ */
+ public void setPublicId(String publicId) {
+
+ String oldPublicId = this.publicId;
+ this.publicId = publicId;
+ support.firePropertyChange("publicId", oldPublicId, publicId);
}
1.33 +51 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/startup/ContextConfig.java
Index: ContextConfig.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/startup/ContextConfig.java,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- ContextConfig.java 2000/10/31 23:49:02 1.32
+++ ContextConfig.java 2000/11/24 22:36:24 1.33
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/startup/ContextConfig.java,v 1.32 2000/10/31 23:49:02 pierred Exp $
- * $Revision: 1.32 $
- * $Date: 2000/10/31 23:49:02 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/startup/ContextConfig.java,v 1.33 2000/11/24 22:36:24 craigmcc Exp $
+ * $Revision: 1.33 $
+ * $Date: 2000/11/24 22:36:24 $
*
* ====================================================================
*
@@ -72,6 +72,7 @@
import java.io.InputStream;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.net.JarURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
@@ -117,7 +118,7 @@
* of that Context, and the associated defined servlets.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.32 $ $Date: 2000/10/31 23:49:02 $
+ * @version $Revision: 1.33 $ $Date: 2000/11/24 22:36:24 $
*/
public final class ContextConfig
@@ -432,6 +433,9 @@
mapper.registerDTDFile(Constants.WebDtdPublicId_23,
resourceFile.toString());
+ mapper.addRule("web-app",
+ new SetPublicIdAction("setPublicId"));
+
mapper.addRule("web-app/context-param",
mapper.methodSetter("addParameter", 2));
mapper.addRule("web-app/context-param/param-name",
@@ -1108,6 +1112,49 @@
securityConstraint.setAuthConstraint(true);
if (ctx.getDebug() > 0)
ctx.log("Calling SecurityConstraint.setAuthConstraint(true)");
+ }
+
+}
+
+
+/**
+ * Class that calls a property setter for the top object on the stack,
+ * passing the public ID of the entity we are currently processing.
+ */
+
+final class SetPublicIdAction extends XmlAction {
+
+ public SetPublicIdAction(String method) {
+ super();
+ this.method = method;
+ }
+
+
+ private String method = null;
+
+ public void start(SaxContext context) throws Exception {
+
+ Stack stack = context.getObjectStack();
+ Object top = stack.peek();
+ Class paramClasses[] = new Class[1];
+ paramClasses[0] = "String".getClass();
+ String paramValues[] = new String[1];
+ paramValues[0] = context.getPublicId();
+
+ Method m = null;
+ try {
+ m = top.getClass().getMethod(method, paramClasses);
+ } catch (NoSuchMethodException e) {
+ context.log("Can't find method " + method + " in " + top +
+ " CLASS " + top.getClass());
+ return;
+ }
+
+ m.invoke(top, paramValues);
+ if (context.getDebug() >= 1)
+ context.log("" + top.getClass().getName() + "." + method +
+ "(" + paramValues[0] + ")");
+
}
}
1.2 +4 -0 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/xml/SaxContext.java
Index: SaxContext.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/xml/SaxContext.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SaxContext.java 2000/08/11 22:46:26 1.1
+++ SaxContext.java 2000/11/24 22:36:25 1.2
@@ -62,4 +62,8 @@
public int getDebug();
public void log( String s );
+
+ public String getPublicId();
+
}
+
1.5 +11 -0 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/xml/XmlMapper.java
Index: XmlMapper.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/xml/XmlMapper.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- XmlMapper.java 2000/11/01 23:20:39 1.4
+++ XmlMapper.java 2000/11/24 22:36:25 1.5
@@ -46,6 +46,8 @@
int debug=0;
boolean validating=false;
+ String publicId = null;
+
public XmlMapper() {
attributeStack = new Object[256]; // depth of the xml doc
tagStack = new String[256];
@@ -68,6 +70,7 @@
if (sp != 0) {
System.out.println("The XML document is probably broken. " + sp);
}
+ publicId = null;
}
@@ -167,6 +170,10 @@
return oStack;
}
+ public String getPublicId() {
+ return publicId;
+ }
+
public Object getRoot() {
return root;
}
@@ -427,6 +434,10 @@
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException
{
+ if (debug >= 1)
+ System.out.println("Resolve: " + publicId + " " + systemId);
+ this.publicId = publicId;
+
String dtd = (String) fileDTDs.get(publicId);
if( dtd != null ) {
File dtdF=new File( dtd );