2011-05-18 21 views
7

Estoy intentando crear un servicio web simple utilizando Tomcat 7.0.11 en Windows Server 2008 R2 usando Metro 2.1. Vengo de un fondo C#/WCF tratando de obtener una mejor comprensión sobre la interoperabilidad del servicio web. De hecho, estoy siguiendo un ejemplo del libro de Martin Kalin "Java Web Services Up and Running". Tengo el siguiente:WSServlet Error ClassNotFoundException en Tomcat 7.0.11 utilizando Metro 2.1

CATALINA_HOME=c:\tomcat-7.0.11 

en los catalina.properties archivo que tengo:

server.loader=c:/metro-2.1/bin/*.jar 

(nota, también intentado añadir este camino a common.loader también).

he copiado a los siguientes archivos jar metro para CALALINA_HOME \ lib:

webservices-api.jar, webservices-extra.jar, webservices-extra-api.jar, webservices- rt.jar, webservices-tools.jar

y a CALALINA_HOME \ respaldaron:

webservices-api.jar

(nota, que originalmente intentado utilizar el archivo de hormigas metro-en-tomcat.xml pero no parece haber sido reformado para Tomcat 7. *)

I' También he copiado webservices-api.jar en JAVA_HOME \ jre \ lib \ endorsed

He intentado poner también las otras jarras de METRO en las ubicaciones anteriores pero sin ninguna ayuda.

Ahora, Tomcat arranca bien y inicializa METRO bien, aquí está la sección correspondiente del archivo de registro catalina:

INFORMACIÓN: La implementación de aplicaciones web directorio RAÍZ 18-May-2011 08:00:55 com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized INFORMACIÓN: WSSERVLET12: JAX-WS contexto oyente inicializar 18-May-2011 08:01:07 com.sun.xml.ws.server. MonitorBase createRoot INFO: control de Metro nombre de raíz establecido con éxito en: com.sun.metro: pp = /, tipo = WSendpoint, name = -TempConvertImplService-TempConvertImplPort 18-May-2011 08:01:08 com.sun.xml.ws.transport.http.servlet.WSServletDelegate INFORMACIÓN : WSSERVLET14: JAX-WS servlet inicializar

Así que desde que se podría pensar que Tomcat había cargado todas las clases de METRO. Según lo que he reunido, WSServlet es parte de JAX-WS 2.1 que se envía como parte de METRO, por lo que debería haberse cargado. Pero cuando realmente intenta explorar el WSDL de mi servicio me sale el siguiente en el registro de localhost:

GRAVES: Asignar excepción para servlet TempConvertWS java.lang.ClassNotFoundException: com.sun.xml. ws.transport.http.WSServlet en org.apache.catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.java:1676) en org.apache.catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.java:1521) en org.apache. catalina.core.DefaultInstanceManager.loadClass (DefaultInstanceManager.java:415) .... (resto del seguimiento de la pila)

mi sol jaxws.xml se ve así:

<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0"> 
    <endpoint 
     name="TempConvertWS" 
     implementation="TimeServer.TempConvertImpl" 
     url-pattern="/tc" 
    /> 
</endpoints> 

y la sección relevante de mi web. archivo XML es:

<listener> 
    <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class> 
    </listener> 
    <servlet> 
    <servlet-name>TempConvertWS</servlet-name> 
    <servlet-class>com.sun.xml.ws.transport.http.WSServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>TempConvertWS</servlet-name> 
    <url-pattern>/tc</url-pattern> 
    </servlet-mapping> 

Puede alguien ver a partir de ese Tomcat por qué no puede encontrar/cargar la clase WSServlet cuando se navega con el servicio?

+1

lo que se requiere son las librerías jaxws-ri creo que son 'jaxws-api.jar, jaxws-rt.jar, jaxws-tools.jar, streambuffer.jar' por mencionar algunas. asegúrese de que están en 'CATALINA_HOME/lib' –

Respuesta

2

Con Tomcat 6, puse compartían .loader en catalina.properties y ha añadido webservices-api.jar a <catalina-home>\endorsed

que funcionó a las mil maravillas.

Para los propósitos de desarrollo y pruebas que sólo podría poner el webservices-extra.jar, webservices-extra-api.jar, webservices-rt.jar, webservices-tools.jar en <catalina-home>/liben lugar de utilizar el shared.loader directiva. Encuentro que esto también es más compatible con Eclipse.

Voy a probar con Tomcat 7 para ver si difiere de alguna manera.

* Actualización: El mismo truco funciona para Tomcat 7.0.14

* Update2: Lo siento, no lo vi una vez, pero me di cuenta de que en su web.xml, el <servlet-class> especificado es incorrecto. Debe ser com.sun.xml.ws.transport.http.servlet.WSServlet

+0

¿logró hacerlo funcionar? si es así, ¿puedes dar la solución para futuras referencias? – Paaske

Cuestiones relacionadas