costin 01/09/18 16:24:46 Modified: . build.xml src/share/org/apache/jasper/compiler JspReader.java src/share/org/apache/tomcat/modules/server Ajp13.java src/share/org/apache/tomcat/util/compat Jdk11Compat.java Jdk12Support.java Log: X509Certificate is not available in JDK1.1, moved the code to Jdk11Compat and make sure everything is again working in 1.1. As ussual, the trick is to have a method that does nothing in Jdk11Compat and override it with a real method in Jdk12Support ( the names are pretty bad ). This adds almost no overhead in jdk12 ( just a virtual method call ), and is pretty clean ( as oposed with other solutions using introspection or other tricks ). I also added the catch(Exception) in JspReader - I think it's a bug in gcj, but it's an easy workaround ( gcj is also JDK1.1 AFAIK ) Revision Changes Path 1.153 +1 -0 jakarta-tomcat/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/jakarta-tomcat/build.xml,v retrieving revision 1.152 retrieving revision 1.153 diff -u -r1.152 -r1.153 --- build.xml 2001/09/17 00:44:54 1.152 +++ build.xml 2001/09/18 23:24:46 1.153 @@ -255,6 +255,7 @@ </classpath> <include name="org/apache/tomcat/util/**"/> <exclude name="**/util/net/SSLSocketFactory.java" unless="jsse.present"/> + <exclude name="**/util/net/SSLSocketFactory.java" unless="jdk12.present"/> <exclude name="**/util/compat/Jdk12Support.java" unless="jdk12.present"/> <exclude name="**/util/depend/DependClassLoader12.java" unless="jdk12.present"/> </javac> 1.24 +11 -6 jakarta-tomcat/src/share/org/apache/jasper/compiler/JspReader.java Index: JspReader.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/jasper/compiler/JspReader.java,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- JspReader.java 2001/03/02 04:51:33 1.23 +++ JspReader.java 2001/09/18 23:24:46 1.24 @@ -349,12 +349,17 @@ char[] getChars(Mark start, Mark stop) throws ParseException { Mark oldstart = mark(); reset(start); - CharArrayWriter caw = new CharArrayWriter(); - while (!stop.equals(mark())) - caw.write(nextChar()); - caw.close(); - reset(oldstart); - return caw.toCharArray(); + try { + CharArrayWriter caw = new CharArrayWriter(); + while (!stop.equals(mark())) + caw.write(nextChar()); + caw.close(); + reset(oldstart); + return caw.toCharArray(); + } catch( Exception ex ) { + ex.printStackTrace(); + throw new ParseException( ex.toString() ); + } } public int peekChar() { 1.28 +12 -18 jakarta-tomcat/src/share/org/apache/tomcat/modules/server/Ajp13.java Index: Ajp13.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/server/Ajp13.java,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- Ajp13.java 2001/09/18 12:29:30 1.27 +++ Ajp13.java 2001/09/18 23:24:46 1.28 @@ -67,11 +67,9 @@ import java.util.Enumeration; import java.io.ByteArrayInputStream; -import java.security.cert.X509Certificate; -import java.security.cert.CertificateFactory; - import org.apache.tomcat.core.*; import org.apache.tomcat.util.*; +import org.apache.tomcat.util.compat.*; import org.apache.tomcat.util.http.MimeHeaders; import org.apache.tomcat.util.buf.MessageBytes; import org.apache.tomcat.util.aaa.SimplePrincipal; @@ -195,7 +193,7 @@ // ============ Instance Properties ==================== - + static Jdk11Compat jdk11Compat=Jdk11Compat.getJdkCompat(); OutputStream out; InputStream in; int dL=0; @@ -383,22 +381,18 @@ // Transform the string into certificate. String certString = msg.getString(); byte[] certData = certString.getBytes(); - ByteArrayInputStream bais = new ByteArrayInputStream(certData); - - // Fill the first element. - X509Certificate jsseCerts[] = null; - try { - CertificateFactory cf = - CertificateFactory.getInstance("X.509"); - X509Certificate cert = (X509Certificate) - cf.generateCertificate(bais); - jsseCerts = new X509Certificate[1]; - jsseCerts[0] = cert; - } catch(java.security.cert.CertificateException e) { + + try { + Object jsseCerts=jdk11Compat.getX509Certificates(certData); + req.setAttribute("javax.servlet.request.X509Certificate", + jsseCerts); + } catch( Exception e) { d("Certificate convertion failed" + e ); + // Save it at least as string... JDK1.1 doesn't + // have X509Certificate class + req.setAttribute("javax.servlet.request.X509Certificate", + certString); } - req.setAttribute("javax.servlet.request.X509Certificate", - jsseCerts); break; case SC_A_SSL_CIPHER : 1.13 +5 -0 jakarta-tomcat/src/share/org/apache/tomcat/util/compat/Jdk11Compat.java Index: Jdk11Compat.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/compat/Jdk11Compat.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- Jdk11Compat.java 2001/09/16 00:33:30 1.12 +++ Jdk11Compat.java 2001/09/18 23:24:46 1.13 @@ -149,6 +149,11 @@ public java.util.ResourceBundle getBundle(String name, Locale loc, ClassLoader cl ) { return ResourceBundle.getBundle(name, loc); } + + public Object getX509Certificates( byte x509[] ) throws Exception { + // No x509 certificate in JDK1.1 + return null; + } // -------------------- Factory -------------------- 1.8 +19 -0 jakarta-tomcat/src/share/org/apache/tomcat/util/compat/Jdk12Support.java Index: Jdk12Support.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/compat/Jdk12Support.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- Jdk12Support.java 2001/08/22 04:44:49 1.7 +++ Jdk12Support.java 2001/09/18 23:24:46 1.8 @@ -61,8 +61,11 @@ import java.net.*; import java.util.*; +import java.security.cert.X509Certificate; +import java.security.cert.CertificateFactory; import java.security.*; import org.apache.tomcat.util.depend.*; + /** * */ @@ -149,6 +152,22 @@ else return ResourceBundle.getBundle(name, loc, cl); } + + public Object getX509Certificates( byte x509[] ) throws Exception { + ByteArrayInputStream bais = new ByteArrayInputStream(x509); + + // Fill the first element. + X509Certificate jsseCerts[] = null; + + CertificateFactory cf = + CertificateFactory.getInstance("X.509"); + X509Certificate cert = (X509Certificate) + cf.generateCertificate(bais); + jsseCerts = new X509Certificate[1]; + jsseCerts[0] = cert; + return jsseCerts; + } + // -------------------- Support --------------------