JAX-WS mit Java 1.5 und Tomcat 5.5

Hallo liebe Experten,

erstmal bitte nicht vom langen Text abschrecken lassen :smile:

ich habe mich ein wenig in Webservices mit Java eingearbeitet und will nun diesen auf einen Server deployen.
Leider musste ich feststellen, dass auf diesem nicht die selben Bedingungen gegeben sind, wie in meiner Entwicklungsumgebung. Entwickelt habe ich mit Tomcat 6 und dem neuesten JDK 1.6.

Auf dem Server selbst läuft Java™ 2 Runtime Environment, Standard Edition (build 1.5.0_17-b04) und Apache Tomcat 5.5.17.

Zu meinem Pech läuft der WS natürlich nicht. Beim Deployen der WAR-Datei wird folgende Exception geschmissen:

2010-02-17 10:26:50,694 [main] ERROR org.apache.catalina.core.StandardContext.listenerStart() [/webservice] - Exception sending context initialized event to listener instance of class com.sun.xml.ws.transport.http.servlet.WSServletContextListener
WSSERVLET11: failed to parse runtime descriptor: java.lang.UnsupportedClassVersionError: Bad version number in .class file
at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.contextInitialized(WSServletContextListener.java:100)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3729)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4187)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at org.apache.catalina.core.ContainerBase.access$000(ContainerBase.java:121)
at org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.java:143)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:737)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:809)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:698)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:472)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at org.apache.catalina.core.StandardService.start(StandardService.java:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
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:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
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:585)
at org.apache.commons.daemon.support.DaemonLoader.start(DaemonLoader.java:218)
Caused by: java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1812)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:866)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1319)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.getImplementorClass(DeploymentDescriptorParser.java:493)
at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parseAdapters(DeploymentDescriptorParser.java:181)
at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parse(DeploymentDescriptorParser.java:131)
at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.contextInitialized(WSServletContextListener.java:90)
… 31 more
2010-02-17 10:26:50,695 [main] ERROR org.apache.catalina.core.StandardContext.start() StandardContext - Error listenerStart
2010-02-17 10:26:50,695 [main] ERROR org.apache.catalina.core.StandardContext.start() StandardContext - Context [/webservice] startup failed due to previous errors

Entscheident ist das: „WSServletContextListener“ und „UnsupportedClassVersionError: Bad version number in .class file“

Heißt für mich, dass die Klasse nicht unterstützt wird.

Weitere Infos: Der Container beinhaltet im WEB-INF/lib alle Jar-Dateien aus jaxws-ri. Vor allem die „jaxws-rt.jar“, welche die Klasse WSServletContextListener beinhaltet.
Beim Googlen konnte ich irgendwas von „endorsed“ aufschnappen und habe den Ordner mal erstellt und auch haufenweise jar-Dateien reingeworfen.
Leider alles vergebens.

Jetzt nochmal die Frage: Kann man JAX-WS überhaut mit den oben genannten Bedingungen verwenden?
Ich mein gelesen zu haben, dass es mit Java 1.5 funktionieren sollte und Java 1.6 dieses WS-Framework schon in der core standardmäßig mitliefert.

Ich hoffe echt, dass mir hier jmd helfen kann. Man findet in Foren nicht gerade viel im Bezug Deployinh mit JAX-WS.

Gruß
straight

Der Hinweis „UnsupportedClassVersionError: Bad version number in .class file“ deutet darauf hin, dass Du eine Klasse laden willst, die mit einem neueren JDK kompiliert wurde. Entweder ist das also Deine eigene Klasse, oder eine aus den Libraries.

Du solltest noch einmal nachgucken, welche JDK-Version die Libraries benötigen. Ausserdem Deine Klassen mit „-target 1.5“ kompilieren. (siehe http://java.sun.com/javase/6/docs/technotes/tools/so…).

Hallo Carsten,

vielen dank erstmal für die Blitzantwort. Bei speziellen Fragen ist das nicht üblich.

Habe inzwischen auch weiter mit verschiedenen jre- und tomcatversions-Kombinationen herumprobiert.
Werde versuchen die JAX-libs als Java 1.5 kompilierte Version zu finden und meine Klassen auch explizit manuell erstellen.

Hoffe das hilft.
Ich melde mich dann :smile:

Gruß
straight

Ok, es funktioniert jetzt. Es lag also definitiv an den eigenen Klassen, wobei die „-target 1.5“ nicht funktioniert hat.
Habe dafür das jdk 1.5 runtergeladen und mit vollem Pfad %JAVA_HOME_1.5.xx%\bin\javac kompiliert.