Ich habe folgendes Problem im Zusammenspiel von Tomcat, AXIS2 und einem verschlüsseltem jar (componio-Verschlüsselungstool). Ich poste das Problem unter AXIS, weil ich vermute das hier die Lösung liegt, aber seht selber.
Kurzbeschreibung des Problems:
WebService mit Tomcat 6.0.26 und Axis2 1.4.. Zusätzlich eine hauseigene Software die bei Nutzung des WebServices aufgerufen/verwendet wird.
Mindestens die hauseigene Software soll verschlüsselt werden. Wir verwenden dazu componio, wobei das nach meinen bisherigen Kenntnissen keinen Unterschied macht.
In verschiedenen Szenarien den Dienst nicht nur zu starten sondern Ihn auch zu benutzen ;-) treten verschiedene Probleme auf.
Also bisher liegen, bis auf unsere hauseigene jar-Datei (als .sjar), alle jar's unverschlüsselt vor.
Nur der Vollständigkeit halber - Wenn alle jar's unverschlüsselt sind (also auch unsere) dann läuft alles wie gewünscht.
Da der Componio-ClassLoader (SjarClassLoader) nicht von uns ist sondern vom Verschlüsselungstool-Hersteller geschrieben wurde
haben wir dort keine Möglichkeit der Erweiterung (SjarClassLoader ist "final" und kein Interface)
Das Grundproblem scheint darin zu liegen das ich irgendwie dem Webservice bzw. der AXIS-Implementierung beibringen muss einen anderen ClassLoader zu verwenden wenn Methoden
unserer Software aufgerufen werden bzw wenn Klassen aus unserem SJAR-Instantiiert werden sollen. Aber "wo", "wie" und "ob" kann ich nicht rausfinden.
Also dann zu meinen bisherigen Ergebnissen
===========================================
Szenario 1: Starten des Tomcat ohne setzen eines speziellen ClassLoaders in der context.xml des Tomcat
Ergebnis: Server startet fehlerfrei und der WebService wird im Browser in der Liste der Services angezeigt. Bis hierher wird noch nicht auf die verschlüsselte sjar-Datei zugegriffen.
Bei Aufruf einer Methode des WebServices erscheint im Browser:
AXIS error
Sorry, something seems to have gone wrong... here are the details:
Exception - java.lang.NoClassDefFoundError: de/<name>/webservice/WebserviceToServerCommClient
Die nicht gefundene Klasse befindet sich in der sjar-Datei.
Das Ergebins hat mich nicht verwundert, weil wie sollte Axis auch wissen wie es in das SJAR reingucken kann.
Dann folgendes ausprobiert, weil ich nicht gefunden habe wie man den ClassLoader für AXIS alleine setzen kann (z.B. in der web.xml der WebAppl /axis
========================================
Szenario 2: Setzen eines ClassLoaders in der context.xml
In context.xml folgendes eingetragen
<Loader loaderClass="com.componio.jarcryp.SjarClassLoader" className="com.componio.jarcryp.SjarClassLoader"></Loader>
Dabei ist es egal ob ich nur "loaderClass" setze oder nur "className". Bei nur "loaderClass" bekomme ich in der Startphase des Tomcat diesen Error-Stacktrace
14.02.2011 09:17:25 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Testsystem_OIPD_SJAR\OIPD_Test_SJAR\lib\external
14.02.2011 09:17:26 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
14.02.2011 09:17:26 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1432 ms
14.02.2011 09:17:26 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
14.02.2011 09:17:26 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.26
14.02.2011 09:17:26 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory axis
14.02.2011 09:17:26 org.apache.catalina.loader.WebappLoader start
SCHWERWIEGEND: LifecycleException
java.lang.ClassCastException: com.componio.jarcryp.SjarClassLoader cannot be cast to org.apache.catalina.loader.WebappClassLoader
at org.apache.catalina.loader.WebappLoader.createClassLoader(WebappLoader.java:782)
at org.apache.catalina.loader.WebappLoader.start(WebappLoader.java:638)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4341)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
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:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
14.02.2011 09:17:26 org.apache.catalina.core.ContainerBase addChildInternal
SCHWERWIEGEND: ContainerBase.addChild: start:
LifecycleException: start: : java.lang.ClassCastException: com.componio.jarcryp.SjarClassLoader cannot be cast to org.apache.catalina.loader.WebappClassLoader
at org.apache.catalina.loader.WebappLoader.start(WebappLoader.java:679)
....
14.02.2011 09:17:27 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1012 ms
Wenn ich nur "className" oder beides (verhält sie gleich) setze dann erhalte ich:
14.02.2011 09:20:05 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Testsystem_OIPD_SJAR\OIPD_Test_SJAR\lib\external
14.02.2011 09:20:05 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
14.02.2011 09:20:05 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1439 ms
14.02.2011 09:20:06 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
14.02.2011 09:20:06 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.26
14.02.2011 09:20:06 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory axis
14.02.2011 09:20:06 org.apache.tomcat.util.digester.Digester startElement
SCHWERWIEGEND: Begin event threw exception
java.lang.InstantiationException: com.componio.jarcryp.SjarClassLoader
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:206)
at org.apache.tomcat.util.digester.Rule.begin(Rule.java:153)
at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1356)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1363)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1642)
at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:789)
at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:728)
at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:1014)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:279)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.StandardContext.init(StandardContext.java:5439)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4215)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
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:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
14.02.2011 09:20:06 org.apache.catalina.startup.ContextConfig processContextConfig
SCHWERWIEGEND: Parse error in context.xml for /axis
java.lang.InstantiationException: com.componio.jarcryp.SjarClassLoader
at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2806)
at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2832)
at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1359)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1363)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1642)
at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:789)
at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:728)
at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:1014)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:279)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.StandardContext.init(StandardContext.java:5439)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4215)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
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:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.InstantiationException: com.componio.jarcryp.SjarClassLoader
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:206)
at org.apache.tomcat.util.digester.Rule.begin(Rule.java:153)
at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1356)
... 40 more
14.02.2011 09:20:06 org.apache.catalina.startup.ContextConfig processContextConfig
....
14.02.2011 09:20:08 org.apache.catalina.startup.Catalina start
INFO: Server startup in 2119 ms
In beiden Varinaten kannman erkenne das er zumindest was mit dem SjarClassLoader versucht aber Ihn entweder
nicht 'casten' oder nich instantiieren kann.
Hier irritiert mich zusätzlich die Zeile: "SCHWERWIEGEND: Parse error in context.xml for /axis"
Gibt es ein TAG für die axis/web.xml mit der ich dort den ClassLoader setzen kann? So was wie:
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
<servlet-classloader>com.componio.jarcryp.SjarClassLoader</servlet-classloader>
</servlet>
Diese Versuche wurden aber vom Tomcat komplett ignoriert. Das heißt - es hatte keine Einfluss auf das Startverhalten oder die Bereitstellung des WebServices.
Habe auch was zu den verscheidenen ClassLoadern eines Tomcat gelesen aber darin scheint keine Lösung des Problems zu liegen, da dort lediglich von den verschiedenen existierenden ClassLoadern gesprochen wird und weniger von Custom-ClassLoadern.
Ein Anfrage beim Verschlüsselungstool-Hersteller (componio) war erfolglos - liegt auch meiner Meinung nach nicht bei Ihm. Wenn es eine andere Verschlüsselung wäre dann würde diese dasselbe Problem liefern.
Also:
Kann man AXIS beibringen für solche Aufrufe einen anderen ClassLoader zu verwenden und wenn ja wo und wie?
Oder gibt es einen anderen Weg das Problem zu lösen, außer auf die Verschlüsselung zu verzichten ;-)
Ggfs ist mein Ansatz auch falsch und der Lösungsweg liegt komplett irgendwo anders?
Bin für alle Anregungen und erst recht für Lösungen dankbar.
Gruß
meguma
Kurzbeschreibung des Problems:
WebService mit Tomcat 6.0.26 und Axis2 1.4.. Zusätzlich eine hauseigene Software die bei Nutzung des WebServices aufgerufen/verwendet wird.
Mindestens die hauseigene Software soll verschlüsselt werden. Wir verwenden dazu componio, wobei das nach meinen bisherigen Kenntnissen keinen Unterschied macht.
In verschiedenen Szenarien den Dienst nicht nur zu starten sondern Ihn auch zu benutzen ;-) treten verschiedene Probleme auf.
Also bisher liegen, bis auf unsere hauseigene jar-Datei (als .sjar), alle jar's unverschlüsselt vor.
Nur der Vollständigkeit halber - Wenn alle jar's unverschlüsselt sind (also auch unsere) dann läuft alles wie gewünscht.
Da der Componio-ClassLoader (SjarClassLoader) nicht von uns ist sondern vom Verschlüsselungstool-Hersteller geschrieben wurde
haben wir dort keine Möglichkeit der Erweiterung (SjarClassLoader ist "final" und kein Interface)
Das Grundproblem scheint darin zu liegen das ich irgendwie dem Webservice bzw. der AXIS-Implementierung beibringen muss einen anderen ClassLoader zu verwenden wenn Methoden
unserer Software aufgerufen werden bzw wenn Klassen aus unserem SJAR-Instantiiert werden sollen. Aber "wo", "wie" und "ob" kann ich nicht rausfinden.
Also dann zu meinen bisherigen Ergebnissen
===========================================
Szenario 1: Starten des Tomcat ohne setzen eines speziellen ClassLoaders in der context.xml des Tomcat
Ergebnis: Server startet fehlerfrei und der WebService wird im Browser in der Liste der Services angezeigt. Bis hierher wird noch nicht auf die verschlüsselte sjar-Datei zugegriffen.
Bei Aufruf einer Methode des WebServices erscheint im Browser:
AXIS error
Sorry, something seems to have gone wrong... here are the details:
Exception - java.lang.NoClassDefFoundError: de/<name>/webservice/WebserviceToServerCommClient
Die nicht gefundene Klasse befindet sich in der sjar-Datei.
Das Ergebins hat mich nicht verwundert, weil wie sollte Axis auch wissen wie es in das SJAR reingucken kann.
Dann folgendes ausprobiert, weil ich nicht gefunden habe wie man den ClassLoader für AXIS alleine setzen kann (z.B. in der web.xml der WebAppl /axis
========================================
Szenario 2: Setzen eines ClassLoaders in der context.xml
In context.xml folgendes eingetragen
<Loader loaderClass="com.componio.jarcryp.SjarClassLoader" className="com.componio.jarcryp.SjarClassLoader"></Loader>
Dabei ist es egal ob ich nur "loaderClass" setze oder nur "className". Bei nur "loaderClass" bekomme ich in der Startphase des Tomcat diesen Error-Stacktrace
14.02.2011 09:17:25 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Testsystem_OIPD_SJAR\OIPD_Test_SJAR\lib\external
14.02.2011 09:17:26 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
14.02.2011 09:17:26 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1432 ms
14.02.2011 09:17:26 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
14.02.2011 09:17:26 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.26
14.02.2011 09:17:26 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory axis
14.02.2011 09:17:26 org.apache.catalina.loader.WebappLoader start
SCHWERWIEGEND: LifecycleException
java.lang.ClassCastException: com.componio.jarcryp.SjarClassLoader cannot be cast to org.apache.catalina.loader.WebappClassLoader
at org.apache.catalina.loader.WebappLoader.createClassLoader(WebappLoader.java:782)
at org.apache.catalina.loader.WebappLoader.start(WebappLoader.java:638)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4341)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
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:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
14.02.2011 09:17:26 org.apache.catalina.core.ContainerBase addChildInternal
SCHWERWIEGEND: ContainerBase.addChild: start:
LifecycleException: start: : java.lang.ClassCastException: com.componio.jarcryp.SjarClassLoader cannot be cast to org.apache.catalina.loader.WebappClassLoader
at org.apache.catalina.loader.WebappLoader.start(WebappLoader.java:679)
....
14.02.2011 09:17:27 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1012 ms
Wenn ich nur "className" oder beides (verhält sie gleich) setze dann erhalte ich:
14.02.2011 09:20:05 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Testsystem_OIPD_SJAR\OIPD_Test_SJAR\lib\external
14.02.2011 09:20:05 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
14.02.2011 09:20:05 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1439 ms
14.02.2011 09:20:06 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
14.02.2011 09:20:06 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.26
14.02.2011 09:20:06 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory axis
14.02.2011 09:20:06 org.apache.tomcat.util.digester.Digester startElement
SCHWERWIEGEND: Begin event threw exception
java.lang.InstantiationException: com.componio.jarcryp.SjarClassLoader
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:206)
at org.apache.tomcat.util.digester.Rule.begin(Rule.java:153)
at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1356)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1363)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1642)
at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:789)
at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:728)
at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:1014)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:279)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.StandardContext.init(StandardContext.java:5439)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4215)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
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:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
14.02.2011 09:20:06 org.apache.catalina.startup.ContextConfig processContextConfig
SCHWERWIEGEND: Parse error in context.xml for /axis
java.lang.InstantiationException: com.componio.jarcryp.SjarClassLoader
at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2806)
at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2832)
at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1359)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1363)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1642)
at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:789)
at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:728)
at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:1014)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:279)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.StandardContext.init(StandardContext.java:5439)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4215)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
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:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.InstantiationException: com.componio.jarcryp.SjarClassLoader
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:206)
at org.apache.tomcat.util.digester.Rule.begin(Rule.java:153)
at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1356)
... 40 more
14.02.2011 09:20:06 org.apache.catalina.startup.ContextConfig processContextConfig
....
14.02.2011 09:20:08 org.apache.catalina.startup.Catalina start
INFO: Server startup in 2119 ms
In beiden Varinaten kannman erkenne das er zumindest was mit dem SjarClassLoader versucht aber Ihn entweder
nicht 'casten' oder nich instantiieren kann.
Hier irritiert mich zusätzlich die Zeile: "SCHWERWIEGEND: Parse error in context.xml for /axis"
Gibt es ein TAG für die axis/web.xml mit der ich dort den ClassLoader setzen kann? So was wie:
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
<servlet-classloader>com.componio.jarcryp.SjarClassLoader</servlet-classloader>
</servlet>
Diese Versuche wurden aber vom Tomcat komplett ignoriert. Das heißt - es hatte keine Einfluss auf das Startverhalten oder die Bereitstellung des WebServices.
Habe auch was zu den verscheidenen ClassLoadern eines Tomcat gelesen aber darin scheint keine Lösung des Problems zu liegen, da dort lediglich von den verschiedenen existierenden ClassLoadern gesprochen wird und weniger von Custom-ClassLoadern.
Ein Anfrage beim Verschlüsselungstool-Hersteller (componio) war erfolglos - liegt auch meiner Meinung nach nicht bei Ihm. Wenn es eine andere Verschlüsselung wäre dann würde diese dasselbe Problem liefern.
Also:
Kann man AXIS beibringen für solche Aufrufe einen anderen ClassLoader zu verwenden und wenn ja wo und wie?
Oder gibt es einen anderen Weg das Problem zu lösen, außer auf die Verschlüsselung zu verzichten ;-)
Ggfs ist mein Ansatz auch falsch und der Lösungsweg liegt komplett irgendwo anders?
Bin für alle Anregungen und erst recht für Lösungen dankbar.
Gruß
meguma