security_java thread: Start tomcat 3.2.4 error for Chapter 11 example.
Hi, All;
I am trying to run the example of chapter 11 (Professional Java
Security) following the readme.txt file tips. But I met an error when I
start Tomcat. Following is the details. Could you please give me a hand?
Thanks a lot.
My test environment are: Tomcat 3.2.2, Jdk1.3, WIN2000 Professional.
The StartRmiRegistry.bat, SecureDriver.bat and BankInit.bat are run
success.
At the bottom of this email, there are some tips I investigated try to
analyze the error.
Your comments are preciated.
Regards,
Luke
Error:
**********************
2002-09-15 18:10:09 - PoolTcpConnector: setAttribute:
socketFactory=org.apache.t
omcat.net.SSLSocketFactory - java.lang.NullPointerException
at java.util.jar.JarVerifier.processEntry(JarVerifier.java:269)
at java.util.jar.JarVerifier.update(JarVerifier.java:197)
at java.util.jar.JarFile.initializeVerifier(JarFile.java:248)
at java.util.jar.JarFile.getInputStream(JarFile.java:310)
at sun.misc.URLClassPath$4.getInputStream(URLClassPath.java:528)
at sun.misc.Resource.getBytes(Resource.java:60)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:245)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:297)
at java.lang.ClassLoader.loadClass(ClassLoader.java:290)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286)
at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at org.apache.tomcat.service.PoolTcpConnector.string2SocketFactory
(PoolTcpConnector.java:417)
at org.apache.tomcat.service.PoolTcpConnector.setAttribute
(PoolTcpConnector.java:289)
at org.apache.tomcat.service.PoolTcpConnector.setProperty
(PoolTcpConnector.java:321)
at java.lang.reflect.Method.invoke(Native Method)
at org.apache.tomcat.util.xml.MethodSetter.end(XmlMapper.java:843)
at org.apache.tomcat.util.xml.XmlMapper.matchEnd
(XmlMapper.java:391)
at org.apache.tomcat.util.xml.XmlMapper.endElement
(XmlMapper.java:109)
at org.apache.xerces.parsers.AbstractSAXParser.endElement
(AbstractSAXParser.java:561)
at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement
(AbstractXMLDocumentParser.java:217)
at org.apache.xerces.impl.XMLNamespaceBinder.emptyElement
(XMLNamespaceBinder.java:594)
at org.apache.xerces.impl.dtd.XMLDTDValidator.emptyElement
(XMLDTDValidator.java:829)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement
(XMLDocumentFragmentScannerImpl.java:748)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispat
cher.dispatch(XMLDocumentFragmentScannerImpl.java:1454)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument
(XMLDocumentFragmentScannerImpl.java:333)
at org.apache.xerces.parsers.StandardParserConfiguration.parse
(StandardParserConfiguration.java:525)
at org.apache.xerces.parsers.StandardParserConfiguration.parse
(StandardParserConfiguration.java:581)
at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:147)
at org.apache.xerces.parsers.AbstractSAXParser.parse
(AbstractSAXParser.java:1157)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.apache.tomcat.util.xml.XmlMapper.readXml(XmlMapper.java:214)
at org.apache.tomcat.startup.Tomcat.execute(Tomcat.java:187)
at org.apache.tomcat.startup.Tomcat.main(Tomcat.java:235)
Note:
**********************
I checks the Tomcat's source codes, and find the function cause above
error is string2SocketFactory in class PoolTcpConnector:
private static ServerSocketFactory string2SocketFactory( String
val) throws ClassNotFoundException, IllegalAccessException,
InstantiationException {
Class chC=Class.forName( val ); <-- exception happened here
return (ServerSocketFactory)chC.newInstance();
}
I did a exmaple file Test.java to test above codes alone and it was run
well and no exception was throwed, this test result confused me much.
----
import org.apache.tomcat.net.*;
public class Test {
public static void main(String args[] ) {
try
{
Class chC=Class.forName
( "org.apache.tomcat.net.SSLSocketFactory" );
ServerSocketFactory ssf = (ServerSocketFactory)chC.newInstance
();
System.out.println("init success...");
} catch(Exception ex )
{
ex.printStackTrace();
}
}
}