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.
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? –
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