You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Mark Woon <mo...@SMI.Stanford.EDU> on 2003/01/12 03:47:51 UTC
Webapp specific endorsed dir?
Hi all,
Is there a way for webapps to declare jars that can override jars in
Tomcat's common/endorsed directory? For example, if I want to my webapp
to use a specific version of Xerces, independent of what gets
distributed with Tomcat, what do I have to do? Right now, with Tomcat
4.1.18, if I have a copy of xercesImpl.jar in /WEB-INF/lib I get:
Exception during startup processing
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203)
Caused by: java.lang.VerifyError: Cannot inherit from final class
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:509)
at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1664)
at
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:953)
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1394)
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1274)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
at
org.apache.xerces.impl.XMLNSDocumentScannerImpl.createContentDispatcher(Unknown
Source)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.<init>(XMLDocumentFragmentScannerImpl.java:249)
at
org.apache.xerces.impl.XMLDocumentScannerImpl.<init>(XMLDocumentScannerImpl.java:245)
at
org.apache.xerces.impl.XMLNSDocumentScannerImpl.<init>(Unknown Source)
at
org.apache.xerces.parsers.IntegratedParserConfiguration.createDocumentScanner(Unknown
Source)
at
org.apache.xerces.parsers.DTDConfiguration.<init>(DTDConfiguration.java:367)
at
org.apache.xerces.parsers.StandardParserConfiguration.<init>(StandardParserConfiguration.java:198)
at
org.apache.xerces.parsers.IntegratedParserConfiguration.<init>(Unknown
Source)
at
org.apache.xerces.parsers.IntegratedParserConfiguration.<init>(Unknown
Source)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
at java.lang.Class.newInstance0(Class.java:296)
at java.lang.Class.newInstance(Class.java:249)
at
org.apache.xerces.util.ObjectFactory.newInstance(ObjectFactory.java:266)
at
org.apache.xerces.util.ObjectFactory.findJarServiceProvider(ObjectFactory.java:360)
at
org.apache.xerces.util.ObjectFactory.createObject(ObjectFactory.java:185)
at
org.apache.xerces.util.ObjectFactory.createObject(ObjectFactory.java:120)
at org.apache.xerces.parsers.SAXParser.<init>(SAXParser.java:140)
at org.apache.xerces.parsers.SAXParser.<init>(SAXParser.java:125)
at
org.apache.xerces.jaxp.SAXParserImpl.<init>(SAXParserImpl.java:102)
at
org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParser(SAXParserFactoryImpl.java:95)
at
org.apache.commons.digester.Digester.getParser(Digester.java:676)
at
org.apache.commons.digester.Digester.getXMLReader(Digester.java:892)
at org.apache.commons.digester.Digester.parse(Digester.java:1495)
at
org.apache.catalina.startup.ContextConfig.defaultConfig(ContextConfig.java:548)
at
org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:638)
at
org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:243)
at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:166)
at
org.apache.catalina.core.StandardContext.start(StandardContext.java:3567)
at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)
at
org.apache.catalina.core.StandardHost.start(StandardHost.java:738)
at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)
at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:347)
at
org.apache.catalina.core.StandardService.start(StandardService.java:497)
at
org.apache.catalina.core.StandardServer.start(StandardServer.java:2189)
at org.apache.catalina.startup.Catalina.start(Catalina.java:512)
at org.apache.catalina.startup.Catalina.execute(Catalina.java:400)
at org.apache.catalina.startup.Catalina.process(Catalina.java:180)
... 5 more
Any help on this would be greatly appreciated. Please cc: me in when
responding since I'm not subscribed to the tomcat-user mailing list.
Thanks,
-Mark
P/S - it would have been a great help if the error message included
which jarfile it was barfing on!
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>
Re: Webapp specific endorsed dir?
Posted by Jacob Kjome <ho...@visi.com>.
It violates the Sun classloading spec to load endorsed classes from
WEB-INF/lib or WEB-INF/classes. There are a number of bugs that have been
filed on this and the conclusion of all of them is that Tomcat simply won't
support any sort of overriding of XML or DOM libraries from the webapp
classloader. If you want to override jdk1.4.x endorsed packages, you must
use common/endorsed. If you just want to use specific xerces classes, you
can remove them from common/endorsed (and make sure they don't exist in
common/lib). Then, create a separate instance of Tomcat using CATALINA_BASE
and create a CATALINA_BASE/shared/lib directory. Put your xerces jar there
and your app will use your custom version of Xerces rather than any default
ones that Tomcat provides.
That is the only way I know to use a specific version of xerces
per/app. Of course you can always just replace Tomcat's version of xerces
with yours and force all apps to your yours by putting it in common/endorsed.
Jake
At 06:47 PM 1/11/2003 -0800, you wrote:
>Hi all,
>
>Is there a way for webapps to declare jars that can override jars in
>Tomcat's common/endorsed directory? For example, if I want to my webapp
>to use a specific version of Xerces, independent of what gets distributed
>with Tomcat, what do I have to do? Right now, with Tomcat 4.1.18, if I
>have a copy of xercesImpl.jar in /WEB-INF/lib I get:
>
>Exception during startup processing
>java.lang.reflect.InvocationTargetException
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:324)
> at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203)
>Caused by: java.lang.VerifyError: Cannot inherit from final class
> at java.lang.ClassLoader.defineClass0(Native Method)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:509)
> at
> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
> at
> org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1664)
> at
> org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:953)
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1394)
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1274)
> at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
> at
> org.apache.xerces.impl.XMLNSDocumentScannerImpl.createContentDispatcher(Unknown
> Source)
> at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.<init>(XMLDocumentFragmentScannerImpl.java:249)
> at
> org.apache.xerces.impl.XMLDocumentScannerImpl.<init>(XMLDocumentScannerImpl.java:245)
> at org.apache.xerces.impl.XMLNSDocumentScannerImpl.<init>(Unknown
> Source)
> at
> org.apache.xerces.parsers.IntegratedParserConfiguration.createDocumentScanner(Unknown
> Source)
> at
> org.apache.xerces.parsers.DTDConfiguration.<init>(DTDConfiguration.java:367)
> at
> org.apache.xerces.parsers.StandardParserConfiguration.<init>(StandardParserConfiguration.java:198)
> at
> org.apache.xerces.parsers.IntegratedParserConfiguration.<init>(Unknown Source)
> at
> org.apache.xerces.parsers.IntegratedParserConfiguration.<init>(Unknown Source)
> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
> Method)
> at
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
> at
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
> at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
> at java.lang.Class.newInstance0(Class.java:296)
> at java.lang.Class.newInstance(Class.java:249)
> at
> org.apache.xerces.util.ObjectFactory.newInstance(ObjectFactory.java:266)
> at
> org.apache.xerces.util.ObjectFactory.findJarServiceProvider(ObjectFactory.java:360)
> at
> org.apache.xerces.util.ObjectFactory.createObject(ObjectFactory.java:185)
> at
> org.apache.xerces.util.ObjectFactory.createObject(ObjectFactory.java:120)
> at org.apache.xerces.parsers.SAXParser.<init>(SAXParser.java:140)
> at org.apache.xerces.parsers.SAXParser.<init>(SAXParser.java:125)
> at
> org.apache.xerces.jaxp.SAXParserImpl.<init>(SAXParserImpl.java:102)
> at
> org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParser(SAXParserFactoryImpl.java:95)
> at org.apache.commons.digester.Digester.getParser(Digester.java:676)
> at
> org.apache.commons.digester.Digester.getXMLReader(Digester.java:892)
> at org.apache.commons.digester.Digester.parse(Digester.java:1495)
> at
> org.apache.catalina.startup.ContextConfig.defaultConfig(ContextConfig.java:548)
> at
> org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:638)
> at
> org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:243)
> at
> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:166)
> at
> org.apache.catalina.core.StandardContext.start(StandardContext.java:3567)
> at
> org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)
> at org.apache.catalina.core.StandardHost.start(StandardHost.java:738)
> at
> org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)
> at
> org.apache.catalina.core.StandardEngine.start(StandardEngine.java:347)
> at
> org.apache.catalina.core.StandardService.start(StandardService.java:497)
> at
> org.apache.catalina.core.StandardServer.start(StandardServer.java:2189)
> at org.apache.catalina.startup.Catalina.start(Catalina.java:512)
> at org.apache.catalina.startup.Catalina.execute(Catalina.java:400)
> at org.apache.catalina.startup.Catalina.process(Catalina.java:180)
> ... 5 more
>
>
>Any help on this would be greatly appreciated. Please cc: me in when
>responding since I'm not subscribed to the tomcat-user mailing list.
>
>Thanks,
>-Mark
>
>P/S - it would have been a great help if the error message included which
>jarfile it was barfing on!
>
>
>--
>To unsubscribe, e-mail: <ma...@jakarta.apache.org>
>For additional commands, e-mail: <ma...@jakarta.apache.org>