2012-03-08 7 views
5

La implementación de JAX-WS incluida con JDK6 se puede utilizar para proporcionar un servidor de servicios web sin bibliotecas adicionales. JVM comenzará con un servidor WS en un puerto específico.JDK6: cuándo utilizar la implementación de la implementación de JAX-WS contra Project Metro

http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/

http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2_pt2/

La pregunta que tengo es cómo difiere esto de metro de proyecto? Si el objetivo final es alojar servicios web dentro de tomcat, ¿puedo seguir utilizando la funcionalidad incluida y luego simplemente redirigir a este servidor ws incluido o es mejor implementar el servlet de metro?

Respuesta

1

Por lo que sé JAX-WS es solo una plantilla que tiene que ser implementada por el JDK6 o la implementación de Metro.

Metro es la implementación estándar incluida con Glassfish Application Server. See here.

Por lo tanto, no debería haber ninguna diferencia.

+0

Eso significa que la única diferencia es cómo se implementan los servicios web: servidor incorporado independiente en JDK6 y luego redirigido desde tomcat frente a un servlet enviado con project metro. No veo ninguna limitación con el uso del servidor independiente, ¿verdad? –

+0

No, no implementado pero invocado. Ya sea desde la implementación de JDK o Metro. Ambas son implementaciones estándar y schould funcionan bien. Una búsqueda rápida en Google mostró que Metro usa una API "más nueva y mejorada" en la parte superior de los JDK. Ver [aquí] (http://metro.java.net/nonav/1.2/docs/ReleaseNotes.html#Running_on_top_of_JDK_6). Cheers – SimonSez

16

Bueno, Lo primero que debes saber sobre Metro es que es un proyecto general para varios proyectos relacionados con WS. JAX-WS, JAXB, WSIT, JAX-WS-Commons, etc.

Cada uno de estos componentes tiene dos partes, API (especificaciones) y la parte de implementación denominada implementación de referencia (RI). Las especificaciones se definen en 'javax.xml.ws', 'javax.xml.bind', etc. y el RI va en los paquetes 'com.sun.xxx'.

Ahora, en algún lugar alrededor de JDK 6, actualización 4, sun/oracle comenzó a agrupar estas APIs + RIs en el JDK, y las actualizó con actualizaciones para el JDK.

A partir de la última JDK 6 update31, el JDK contiene los siguientes verisions de JAXWS y API JAXB, y RI

JDK6 U31 - JAXB API @ 2,1 & RI @ 2.1.10, API JAXWS @ 2,1 y RI @ 2.1.6

Ahora bien, si usted va a las páginas http://jaxb.java.net y http://jax-ws.java.net, y ver el último lanzamiento bajo 2.1.x, se verá que JAXB RI está en 2.1.13 y 2.1.7 es JAXWS RI, es decir, el Las implementaciones de RI de las 2.1 spces que se incluyen con la última actualización de JDK 6 son un par de versiones detrás de las publicadas bajo Metro. Para usar los últimos 2.1 jar, simplemente copie los jar de API + RI en su classpath, como se describe aquí http://jax-ws.java.net/2.1.7/docs/ReleaseNotes.html#Running_on_top_of_JDK_6.

Para confundir más las cosas, el proyecto de metro paraguas tiene su propio número de versión, que son a partir de hoy, 1.5, 2.0, 2.0.1, 2.1, 2.1.1, 2.2

Metro 1.5 fue la última compilación que incluye 2.1 spces y los últimos RI para esas especificaciones, es decir, Metro 1.5 contiene JAXWS y JAXB APIs @ 2.1 y JAXWS RI @ 2.1.7 y JAXB RI @ 2.1.13.

Metro 2.0 en adelante, agrupa las API JAXB y JAXWS v2.2 y la última versión de RI a partir de los datos de versión. p. la última versión de METRO 2.2 paquetes JAXB RI 2.2.5 y JAXWS RI 2.2.6.

Pero hay una trampa, JDK 6 paquetes v2.1 para JAXWS y JAXB (APIs + RI), y si simplemente usa JAXWS, JAXB v2.2 jar en su classpath no funcionará.Deberá usar el mecanismo jar aprobado, como se describe aquí http://jax-ws.java.net/2.2.3/docs/ReleaseNotes.html#Running_on_top_of_JDK_6.

Por lo tanto, para cualquier versión de Metro 2.0 y superior, deberá copiar los archivos jax-ws-api.jar y jaxb-api.jar en $ JAVA_HOME/jre/lib/endorsed, o use -Djava. propiedad del sistema endorsed.dirs.

Y algo más divertido, Metro simplemente no es un proyecto paraguas que contiene los proyectos jax-ws, jaxb (entre otros), sino que también hace un jarro súper de estos proyectos.

Así por ejemplo, servicios web-api.jar de metro contiene jaxws-api.jar, jaxb-api.jar (RI) + API de otros proyectos infantiles como WSIT, JAXWS-commons etc.

Y webservices -rt.jar contiene jaxws-rt.jar, jaxb-rt.jar, + RT frascos de otros proyectos infantiles como WSIT, JAXWS-commons etc.

para resumir -

Si desea para desarrollar su WS contra las especificaciones JAXWS/JAXB v2.1, simplemente use el JDK 6 (cualquier actualización pasada u04). Si quiere estar absolutamente seguro de usar las últimas versiones de APIs + RI de las especificaciones 2.1, simplemente use las últimas versiones 2.1.x de jaxws y jaxb. es decir, use jax-ws 2.1.7 y jaxb 2.1.13, en su classpath, [O puede usar los servicios web de Metro 1.5 -api.jar y webservices-rt.jar ya que agrupan los jaxws/jaxb/wsit /. .]

Si desea desarrollar su WS con las últimas especificaciones de JAXWS/JAXB v2.2, entonces tendrá que usar jax-ws v2.2.6 y jaxb ver 2.2.5 jar [O bien utilizar Metro 2.2 's webservices-api.jar y webservices-rt.jar ya que agrupan jaxws/jaxb/wsit ..] Pero tendrás que usar el mecanismo endorsed jar como se describe arriba, para anular el jdk incluido jaxws/jaxb v2.1 jarras.

Mi recomendación - Si v2.1 está bien con usted, use las jarras Metro 1.5 (webservices-api, webservices-rt). Si necesita v2.2, use las jarras Metro 2.2 (webservices-api, webservices-rt) y asegúrese de poner webservices-api.jar en el directorio endorsed.

Necesitarás tarros de metro (webservices- [api, rt] .jar) si vas a usar cosas como fastinfosets, Mtom, etc., como los frascos empaquetados JDK o solo el jaxws-ri. jar y jaxb-ri.jar no le proporcionarán esas características.

Espero que este correo bastante largo fue útil para aclarar algunas cosas.

+0

¿dónde se puede encontrar qué versión de JAXB se incluye con un JDK determinado? – Edmondo1984

Cuestiones relacionadas