bloritsch 01/02/08 20:19:27
Modified: src/org/apache/cocoon/components/classloader Tag:
xml-cocoon2 RepositoryClassLoader.java
src/org/apache/cocoon/servlet Tag: xml-cocoon2
CocoonServlet.java
Log:
Try to isolate the Cocoon environment from hostile ClassLoaders. This
hack will go away when Servlet 2.3 becomes the norm.
Revision Changes Path
No revision
No revision
1.1.2.20 +2 -2
xml-cocoon/src/org/apache/cocoon/components/classloader/Attic/RepositoryClassLoader.java
Index: RepositoryClassLoader.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/components/classloader/Attic/RepositoryClassLoader.java,v
retrieving revision 1.1.2.19
retrieving revision 1.1.2.20
diff -u -r1.1.2.19 -r1.1.2.20
--- RepositoryClassLoader.java 2001/02/06 15:23:38 1.1.2.19
+++ RepositoryClassLoader.java 2001/02/09 04:19:26 1.1.2.20
@@ -34,9 +34,9 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
- * @version CVS $Revision: 1.1.2.19 $ $Date: 2001/02/06 15:23:38 $
+ * @version CVS $Revision: 1.1.2.20 $ $Date: 2001/02/09 04:19:26 $
*/
-class RepositoryClassLoader extends URLClassLoader implements Loggable {
+public class RepositoryClassLoader extends URLClassLoader implements
Loggable {
/**
* The logger
No revision
No revision
1.1.4.51 +25 -5
xml-cocoon/src/org/apache/cocoon/servlet/Attic/CocoonServlet.java
Index: CocoonServlet.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/servlet/Attic/CocoonServlet.java,v
retrieving revision 1.1.4.50
retrieving revision 1.1.4.51
diff -u -r1.1.4.50 -r1.1.4.51
--- CocoonServlet.java 2001/02/08 17:51:09 1.1.4.50
+++ CocoonServlet.java 2001/02/09 04:19:27 1.1.4.51
@@ -40,6 +40,7 @@
import org.apache.cocoon.util.ClassUtils;
import org.apache.cocoon.util.NetUtils;
import org.apache.cocoon.util.IOUtils;
+import org.apache.cocoon.components.classloader.RepositoryClassLoader;
import org.apache.log.Logger;
import org.apache.log.LogKit;
@@ -56,7 +57,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Nicola Ken Barozzi</a> Aisa
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
- * @version CVS $Revision: 1.1.4.50 $ $Date: 2001/02/08 17:51:09 $
+ * @version CVS $Revision: 1.1.4.51 $ $Date: 2001/02/09 04:19:27 $
*/
public class CocoonServlet extends HttpServlet {
@@ -75,6 +76,7 @@
private String classpath;
private File workDir;
private String root;
+ private RepositoryClassLoader classloader = new
RepositoryClassLoader(new URL[] {}, this.getClass().getClassLoader());
/**
* Initialize this <code>CocoonServlet</code> instance. You will
@@ -107,7 +109,7 @@
this.root = this.context.getRealPath("/");
- ClassUtils.setClassLoader(this.getClass().getClassLoader());
+ ClassUtils.setClassLoader(this.classloader);
NetUtils.setContext(this.context);
@@ -122,6 +124,10 @@
* It iterates through every file in the lib directory and adds
* it to the classpath.
*
+ * Also, we add the files to the ClassLoader for the Cocoon system.
+ * In order to protect ourselves from skitzofrantic classloaders,
+ * we need to work with a known one.
+ *
* @param context The ServletContext to perform the lookup.
*
* @throws ServletException
@@ -132,6 +138,12 @@
String classDir = context.getRealPath("/WEB-INF/classes");
File root = new File(context.getRealPath("/WEB-INF/lib"));
+ try {
+ this.classloader.addDirectory(new File(classDir));
+ } catch (Exception e) {
+ log.debug("Could not add directory" + classDir, e);
+ }
+
buildClassPath.append(classDir);
if (root.isDirectory()) {
@@ -140,6 +152,12 @@
for (int i = 0; i < libraries.length; i++) {
buildClassPath.append(File.pathSeparatorChar)
.append(IOUtils.getFullFilename(libraries[i]));
+
+ try {
+ this.classloader.addDirectory(libraries[i]);
+ } catch (Exception e) {
+ log.debug("Could not add file" +
IOUtils.getFullFilename(libraries[i]));
+ }
}
}
@@ -179,10 +197,12 @@
"/WEB-INF/logs/cocoon.log";
final Category cocoonCategory = LogKit.createCategory("cocoon",
logPriority);
- log = LogKit.createLogger(cocoonCategory, new LogTarget[] {
- new FileOutputLogTarget(path),
- new ServletLogTarget(context, Priority.ERROR)
+ this.log = LogKit.createLogger(cocoonCategory, new LogTarget[] {
+ new FileOutputLogTarget(path),
+ new ServletLogTarget(context, Priority.ERROR)
});
+
+ this.classloader.setLogger(this.log);
} catch (Exception e) {
LogKit.log("Could not set up Cocoon Logger, will use screen
instead", e);
}