Hallo allerseits
Ich habe meine WebService-Anwendung implementiert, einen einfachen Client erstellt und die Anwendung direkt aus eclipse getestet, ohne sie auf einen Server zu deployen:
Da alles korrekt lief, wollte ich die Anwendung auf Tomcat 7 deployen:
- Tomcat 7.0.23
- JDK / JRE 1.7
- metro 2.1.1 (— Java.net)
Tomcat wurde neu installiert und die Installation der JAX WS RI nach Anweisungen, die auf der metro-Seite zu finden sind, durchgeführt:
Das Verzeichnis endorsed wurde erstellt und die webservices-api.jar kopiert, das Verzeichnis shared/lib wurde auch angelegt und die entsprechenden jar-Dateien (4 an der Zahl) kopiert, die catalina.properties (shared.loader) ergänzt. Alles wie erwartet. Als ich aber aus eclipse den Server starten wollte, ging es nicht. Er hat diverse Fehler gemeldet.
Ich habe danach meine Umgebung kontrolliert / bereinigt, um sicher zu sein, dass ich nur JDK 1.7 habe und auch keine alte PATH-Einträge irgendwo versteckt sind. Leider hat das nicht geholfen. Teilweise hat Tomcat unverständliche Meldungen gebracht, biespielsweise, dass er die Klasse ServletContextAttributeListener.class nicht findet (ClassNotFoundException), obwohl die Klasse in der servlet-api.jar im lib-Verzeichnis enthalten war. Eine weitere Meldung war die folgende:
Um sicher zu sein, dass es nicht an meinem Projekt lag, habe ich ein einfaches "HelloWorld" Projekt erstellt (an sich übernommen von Creating a Simple Web Service and Client with JAX-WS) und auf Tomcat deployed. Aber, auch das ging nicht.
Die gleiche Meldung kam wieder, das Projekt konte nicht deployed werden.
Hat jemand sonst ähnliche Probleme mit Tomcat 7 und JDK 1.7? Oder, gibt es evtl. Inkompatibilitäten zwischen JAX WS RI und Tomcat 7 oder was auch immer?
Bin für jeden Tipp dankbar.
Ich habe meine WebService-Anwendung implementiert, einen einfachen Client erstellt und die Anwendung direkt aus eclipse getestet, ohne sie auf einen Server zu deployen:
Java:
// WebService publizieren
Endpoint ePoint = Endpoint.publish(uri, service);
Da alles korrekt lief, wollte ich die Anwendung auf Tomcat 7 deployen:
- Tomcat 7.0.23
- JDK / JRE 1.7
- metro 2.1.1 (— Java.net)
Tomcat wurde neu installiert und die Installation der JAX WS RI nach Anweisungen, die auf der metro-Seite zu finden sind, durchgeführt:
ant -Dtomcat.home=<TOMCAT_INSTALL_DIR> -f <METRO_INSTALL_DIR>/metro-on-tomcat.xml install
Das Verzeichnis endorsed wurde erstellt und die webservices-api.jar kopiert, das Verzeichnis shared/lib wurde auch angelegt und die entsprechenden jar-Dateien (4 an der Zahl) kopiert, die catalina.properties (shared.loader) ergänzt. Alles wie erwartet. Als ich aber aus eclipse den Server starten wollte, ging es nicht. Er hat diverse Fehler gemeldet.
Ich habe danach meine Umgebung kontrolliert / bereinigt, um sicher zu sein, dass ich nur JDK 1.7 habe und auch keine alte PATH-Einträge irgendwo versteckt sind. Leider hat das nicht geholfen. Teilweise hat Tomcat unverständliche Meldungen gebracht, biespielsweise, dass er die Klasse ServletContextAttributeListener.class nicht findet (ClassNotFoundException), obwohl die Klasse in der servlet-api.jar im lib-Verzeichnis enthalten war. Eine weitere Meldung war die folgende:
...
Information: Initialization processed in 1793 ms
Jan 03, 2012 12:26:31 AM org.apache.catalina.core.StandardService startInternal
Information: Starting service Catalina
Jan 03, 2012 12:26:31 AM org.apache.catalina.core.StandardEngine startInternal
Information: Starting Servlet Engine: Apache Tomcat/7.0.12
Jan 03, 2012 12:26:34 AM com.sun.xml.ws.transport.http.servlet.WSServletContextListener parseAdaptersAndCreateDelegate
Schwerwiegend: WSSERVLET11: failed to parse runtime descriptor: java.lang.NoClassDefFoundError: com/sun/xml/bind/api/JAXBRIContext
java.lang.NoClassDefFoundError: com/sun/xml/bind/api/JAXBRIContext
at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:203)
at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:343)
at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:205)
at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:513)
at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parseAdapters(DeploymentDescriptorParser.java:257)
at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parse(DeploymentDescriptorParser.java:151)
at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.parseAdaptersAndCreateDelegate(WSServletContextListener.java:131)
at com.sun.xml.ws.transport.http.servlet.WSServletContainerInitializer.onStartup(WSServletContainerInitializer.java:65)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5184)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.startup.Catalina.start(Catalina.java:620)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:303)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:431)
Caused by: java.lang.ClassNotFoundException: com.sun.xml.bind.api.JAXBRIContext
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 27 more
Um sicher zu sein, dass es nicht an meinem Projekt lag, habe ich ein einfaches "HelloWorld" Projekt erstellt (an sich übernommen von Creating a Simple Web Service and Client with JAX-WS) und auf Tomcat deployed. Aber, auch das ging nicht.
Java:
package soap.ws.demo;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService()
public class HelloWorld {
private String message = new String("Hello, ");
public HelloWorld() {
}
@WebMethod()
public String sayHello(String name) {
return message + name + ".";
}
}
Die gleiche Meldung kam wieder, das Projekt konte nicht deployed werden.
...
java.lang.NoClassDefFoundError: com/sun/xml/bind/api/JAXBRIContext
at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:203)
at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:343)
at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:205)
at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:513)
...
Hat jemand sonst ähnliche Probleme mit Tomcat 7 und JDK 1.7? Oder, gibt es evtl. Inkompatibilitäten zwischen JAX WS RI und Tomcat 7 oder was auch immer?
Bin für jeden Tipp dankbar.