2010-01-18 23 views
11

estoy creando un servicio web SOAP simple. me aseguraré de que se ejecute en un servicio web tomcat.Java: uso de punto final para publicar servicios web en el servidor tomcat

im tratando de implementar esto con JAX-WS (ver código)

mi pregunta es: Cómo utiliza el Endpoint.publish el servidor Tomcat para acoger este o se trata de un mini tipo glassfish del servidor?

¿Debería ampliar UnicastRemoveObject o algo similar en su lugar?

idealmente se podría empaquetar en .WAR y soltar en el directorio y simplemente funcionar.

Parece que no funciona con mi servidor Tomcat instalado porque dice que el puerto ya está en uso. Estoy usando Ubuntu kármica con el paquete tomcat6 instalado, sino que también podría ser mi usuario tampoco tienen permisos para publicar en el gato que se ejecuta en 8080

espero que esta pregunta es bastante clara

código

muestra:

@WebService 
public class UserAttributes { 
    public static void main(String[] args) { 
     UserAttributes instance = new UserAttributes(); 
     Endpoint.publish("http://localhost:8082/WebServices/userattributes", 
      instance); 
    } 

    public string Hello() { 
     return "Hello World"; 
    } 
} 
+0

La implementación * default * JAX-WS en el JDK usa un servidor web mínimo basado en NIO. –

+0

¡Gracias! ¿Hay alguna forma de dirigirlo a un servidor Tomcat ya en ejecución? – Will

Respuesta

19

¿Endpoint.publish utiliza el servidor de tomcat para alojar este o es un servidor de tipo mini glassfish?

JAX-WS RI Endpoint.publish API utiliza por defecto un ligero HTTP server implementation que se incluye en Sun Java SE 6. Así que no, no no utilizar un GlassFish incrustado ni un Tomcat incluido y mucho menos su actual Instalación de Tomcat: utiliza un contenedor incrustado, es decir, algo que se ejecuta dentro de la misma JVM. Solo para su información, es posible conectar otras implementaciones siempre que proporcionen una implementación del proveedor de servicios (SPI). Por ejemplo, Jetty 6 lo hace, vea J2se6HttpServerSPI. Pero no voy a cubrir todos los detalles aquí :)

Parece que no funciona con mi servidor Tomcat instalado porque es porque dice que el puerto ya está en uso.

Como dije anteriormente, la API Enpoint.publish no usa su instalación actual de Tomcat. Utiliza su propio servidor y le permite implementar su servicio web sin tener que empaquetar e implementar su aplicación. Es especialmente útil durante el desarrollo (ya que acelera las cosas). En realidad, es extremadamente útil.

Ahora, si tiene un servidor Tomcat ejecutándose en el puerto 8082 y si intenta publicar su Endpoint usando el mismo puerto, las cosas no funcionarán como lo ha notado. Use un puerto diferente (y sin usar) durante el desarrollo.

Y si desea implementar sus servicios web en su instalación de Tomcat existente, tendrá que empaquetarlos en una guerra y desplegar esta guerra en Tomcat. Pero esto es totalmente diferente y no tiene nada que ver con el uso de la API Endpoint.publish.

+0

bien explicación. – atiqkhaled

1

Muy interesante. Me parece que el servidor incorporado también contiene un motor de jabón para procesar los mensajes de jabón enviados a ese puerto.¿Es esto también un motor de jabón incrustado o está utilizando uno de los populares motores de jabón (axis2, cxf, metro)

Cuestiones relacionadas