You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by la...@apache.org on 2001/12/05 12:26:57 UTC
cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/modules/config LoaderInterceptor11.java
larryi 01/12/05 03:26:57
Modified: src/share/org/apache/tomcat/modules/config
LoaderInterceptor11.java
Log:
Updates so jaxpJars can include absolute paths.
Added a "jarSeparator" attribute to allow changing the separator from
the default ':' so Windows absolute paths can be used.
Implemented "additionalJars" attribute and support for an additionalJars
context property to add a list of jars to the web application classloader.
This avoids trying to use jaxpJars to perform this feature..
Revision Changes Path
1.23 +75 -10 jakarta-tomcat/src/share/org/apache/tomcat/modules/config/LoaderInterceptor11.java
Index: LoaderInterceptor11.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/config/LoaderInterceptor11.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- LoaderInterceptor11.java 2001/10/09 17:42:27 1.22
+++ LoaderInterceptor11.java 2001/12/05 11:26:57 1.23
@@ -89,8 +89,12 @@
private int attributeInfo;
String loader=null;
Vector jaxpJars=new Vector();
- String jaxpJarsS="jaxp.jar:crimson.jar:xalan.jar:xerces.jar";
+ String jaxpJarsSDefault="jaxp.jar:crimson.jar:xalan.jar:xerces.jar";
+ String jaxpJarsS=null;
String jaxpDir=null;
+ Vector additionalJars=new Vector();
+ String additionalJarsS=null;
+ String jarSeparator=":";
public LoaderInterceptor11() {
}
@@ -125,6 +129,31 @@
jaxpJarsS=jars;
}
+ /** List of additional jars to add to each web application.
+ */
+ public void setAdditionalJars(String jars ) {
+ additionalJarsS=jars;
+ }
+
+ /** Character to use to separate jars in the jaxpJars list.
+ It also applies to the additionalJars context property
+ list.
+ */
+ public void setJarSeparator(String sep) {
+ if( sep != null && sep.length() > 0 ) {
+ if( sep.length() > 1 )
+ sep = sep.substring(0,1);
+
+ char oldSep[]=new char[1];
+ char newSep[]=new char[1];
+ jarSeparator.getChars(0,1,oldSep,0 );
+ sep.getChars(0,1,newSep,0);
+ jaxpJarsSDefault=jaxpJarsSDefault.replace(oldSep[0],newSep[0]);
+
+ jarSeparator=sep;
+ }
+ }
+
/** Check if the webapp contains jaxp , and add one if not.
This allow apps to include their own parser if they want,
while using the normal delegation model.
@@ -146,6 +175,7 @@
attributeInfo=cm.getNoteId(ContextManager.REQUEST_NOTE,
"req.attribute");
initJaxpJars();
+ initAdditionalJars();
}
@@ -228,11 +258,30 @@
*
*/
public void prepareClassLoader(Context context) throws TomcatException {
+ String list = context.getProperty("additionalJars");
+ if( list != null ) {
+ Vector urls=new Vector();
+ getUrls( null, list, urls );
+ Enumeration en=urls.elements();
+ while( en.hasMoreElements() ) {
+ URL url=(URL)en.nextElement();
+ if( debug > 0 ) log(context + " adding: " + url);
+ context.addClassPath( url );
+ }
+ }
+
+ Enumeration en=additionalJars.elements();
+ while( en.hasMoreElements() ) {
+ URL url=(URL)en.nextElement();
+ if( debug > 0 ) log(context + " adding: " + url);
+ context.addClassPath( url );
+ }
+
ClassLoader loader=constructLoader( context );
if( addJaxp ) {
boolean hasJaxp=checkJaxp( loader, context );
if( ! hasJaxp ) {
- Enumeration en=jaxpJars.elements();
+ en=jaxpJars.elements();
while( en.hasMoreElements() ) {
URL url=(URL)en.nextElement();
if( debug > 0 ) log(context + " adding jaxp: " + url);
@@ -241,6 +290,7 @@
loader=constructLoader( context );
}
}
+
if( debug>5 ) {
URL classP[]=context.getClassPath();
log(" Context classpath URLs:");
@@ -267,7 +317,7 @@
if( debug > 0 ) log( "Using no parent loader ");
parent=null;
} else if( useAppsL && !context.isTrusted() ) {
- if( debug > 0 ) log( "Using webapp loader " + context.isTrusted());
+ if( debug > 0 ) log( "Using webapp loader ");
parent=cm.getAppsLoader();
} else {
if( debug > 0 ) log( "Using container loader ");
@@ -284,22 +334,37 @@
}
private void initJaxpJars() {
- if( jaxpDir==null ) jaxpDir=cm.getInstallDir() + "/lib/container";
- File base=new File( jaxpDir );
- StringTokenizer st=new StringTokenizer( jaxpJarsS, ":" );
+ if( jaxpJarsS == null )
+ jaxpJarsS=jaxpJarsSDefault;
+ getUrls( jaxpDir, jaxpJarsS, jaxpJars );
+ }
+
+ private void initAdditionalJars() {
+ if( additionalJarsS != null )
+ getUrls( null, additionalJarsS, additionalJars );
+ }
+
+ private void getUrls( String dir, String jarList, Vector jars ) {
+ if( dir == null ) dir=cm.getInstallDir() + "/lib/container";
+ File base=new File( dir );
+ if( debug > 5 ) log( "Scanning \"" + jarList + "\" with base directory " + base);
+ StringTokenizer st=new StringTokenizer( jarList, jarSeparator );
while( st.hasMoreElements() ) {
String s=(String)st.nextElement();
- File f=new File( base,s);
- if( ! f.exists()) continue;
+ File f=new File( s );
+ if( ! f.isAbsolute() )
+ f=new File( base, s);
+ if( ! f.exists() ) continue;
try {
URL url=new URL( "file", null,
f.getAbsolutePath().replace('\\','/'));
- jaxpJars.addElement( url );
- if( debug > 0 ) log( "Adding " + url );
+ jars.addElement( url );
+ if( debug > 5 ) log( "Adding " + url );
} catch( MalformedURLException ex ) {
}
}
}
+
private boolean checkJaxp( ClassLoader loader, Context context ) {
try {
loader.loadClass("javax.xml.parsers.SAXParserFactory");
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>