billbarker 01/11/20 19:02:27 Modified: src/share/org/apache/tomcat/util/depend DependClassLoader12.java Log: Teaches the DependClassLoader how to define packages for Java2 Fix for bug #4948 Reported By: Joel Bartley [EMAIL PROTECTED] Submitted By: Joel Bartley [EMAIL PROTECTED] Revision Changes Path 1.5 +52 -1 jakarta-tomcat/src/share/org/apache/tomcat/util/depend/DependClassLoader12.java Index: DependClassLoader12.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/depend/DependClassLoader12.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- DependClassLoader12.java 2001/09/29 04:37:42 1.4 +++ DependClassLoader12.java 2001/11/21 03:02:27 1.5 @@ -60,6 +60,7 @@ import java.net.*; import java.text.*; import java.util.*; +import java.util.jar.*; import java.util.zip.*; import java.security.*; @@ -107,6 +108,56 @@ // PermissionCollection perms=Policy.getPolicy().getPermissions(cs); // ProtectionDomain pd=new ProtectionDomain( cs,perms); // System.out.println("XXX " + name + ": " + cs + "\n" + perms ); - return defineClass(name, data, s, end, (ProtectionDomain)pd); + int idx = name.lastIndexOf("."); + String pkgname = idx != -1 ? name.substring(0, idx) : null; + if ( pkgname != null ) { + Package p = getPackage(pkgname); + if ( p == null ) { + if ( "jar".equals(res.getProtocol()) ) { + try { + JarURLConnection juconn = + (JarURLConnection)res.openConnection(); + Manifest mf = juconn.getManifest(); + if(mf == null) // Jar may not be Java2 + throw new IOException("No Manifest"); + Attributes main = mf.getMainAttributes(); + Attributes pkg = mf.getAttributes( + pkgname.replace('.', '/').concat("/") + ); + boolean sealed = Boolean.getBoolean( + getAttribute(Attributes.Name.SEALED, main, pkg) + ); + definePackage( + pkgname, + getAttribute(Attributes.Name.SPECIFICATION_TITLE, main, pkg), + getAttribute(Attributes.Name.SPECIFICATION_VERSION, main, pkg), + getAttribute(Attributes.Name.SPECIFICATION_VENDOR, main, pkg), + getAttribute(Attributes.Name.IMPLEMENTATION_TITLE, main, pkg), + getAttribute(Attributes.Name.IMPLEMENTATION_VERSION, main, pkg), + getAttribute(Attributes.Name.IMPLEMENTATION_VENDOR, main, pkg), + sealed ? res : null + ); + } catch ( IOException e ) { + definePackage(pkgname, null, null, null, null, null, null, null); + } + } else { + definePackage(pkgname, null, null, null, null, null, null, null); + } + } + } + return defineClass(name, data, s, end, (ProtectionDomain)pd); } + + private String getAttribute(Attributes.Name key, Attributes main, Attributes pkg) + { + String value = null; + if ( pkg != null ) { + value = (String)pkg.get(key); + } + if ( value == null ) { + value = (String)main.get(key); + } + return value; + } + }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>