JDK6: Quando usar a implementação JAX-WS empacotada versus metro do projeto
-
09-12-2019 - |
Pergunta
A implementação JAX-WS empacotada com JDK6 pode ser usada para fornecer um servidor Web Services sem qualquer bibliotecas adicionais.A JVM começará com um servidor WS em uma porta especificada.
http://java.sun.com/developer/technicalticles/j2se/jax_ws_2/
http://java.sun.com/developer/technicalticles/j2se/jax_ws_2_pt2/
A pergunta que tenho é como isso difere do metro do projeto?Se o objetivo final é hospedar serviços da Web dentro do Tomcat, então eu ainda posso usar a funcionalidade agrupada e apenas redirecionar para este servidor WS empacotado ou é melhor implantar o servlet do metrô?
Solução
Tanto quanto eu sei que o JAX-WS é apenas um modelo que deve ser implementado pela implementação JDK6 ou da metrô.
Metro apenas é a implementação padrão enviada com o servidor de aplicativos Glassfish. Veja aqui .
Portanto, não deve haver diferenças.
Outras dicas
Bem, A primeira coisa que você deve saber sobre o metrô, é que é um projeto guarda-chuva para vários projetos relacionados à WS viz. JAX-WS, JAXB, WSIT, JAX-WS-COMMONS, etc.
Cada um desses componentes tem duas partes, API (especificações) e a parte de implementação chamada de implementação de referência (RI). As especificações são definidas no 'javax.xml.ws', 'javax.xml.bind' etc. e o RI vá nos pacotes 'com.sun.xxx'.
Agora em algum lugar ao redor de JDK 6, Atualizar 4, Sun / Oracle começou a agravar essas APIs + RIS no eu JDK, e continuou atualizando com atualizações para o JDK.
A partir do último JDK 6 Update31, o JDK contém as seguintes verizações do JAXWS e JAXB API e RI
jdk6 u31 - JAXB API @ 2.1 & ri @ 2.1.10, JAXWS API @ 2.1 e RI @ 2.1.6
Agora, se você for para o http://jaxb.java.net e http://jax-ws.java.net páginas, e veja o último lançamento abaixo de 2.1.x, você verá que Jaxb RI está em 2.1.13 e o JAXWS RI é 2.1 .7, ou seja, as implementações do RI dos 2.1 SPEs que são empacotadas com a última atualização do JDK 6 são algumas versões por trás dos que lançam sob metrô. Portanto, para usar os mais recentes jarros 2.1, basta copiar os frascos da API + RI para o seu caminho, conforme descrito aqui http://jax-ws.java.net/2.1.7/docs/releasenotes.html#running_on_top_of_jdk_6 .
Para tornar as coisas mais confusas, o Metro, o Projeto Grupo de Guarda-chuva, o seu próprio número de versão, que são a partir de hoje, 1,5, 2,0, 2.0.1, 2.1, 2.1.1, 2.2
Metro 1.5 foi a última compilação que empatou os 2.1 SPEs e os mais recentes RIS para essas especificações, ou seja, o Metro 1.5 contém Jaxws e Jaxb Apis @ 2.1 e Jaxws RI @ 2.1.7 e Jaxb Ri @ 2.1.13.
Metro 2.0, Bundles Jaxb e Jaxws Apis v2.2 e o RI mais recente a partir dos dados de liberação. por exemplo. O mais recente lançamento do metrô 2.2 Bundles Jaxb RI 2.2.5 e JAXWS RI 2.2.6.
Mas há uma captura, JDK 6 Bundles v2.1 para JAXWS e JAXB (APIs + RI), e se você simplesmente usar Jaxws, Jaxb v2.2 frascos no seu espaço de classe, não funcionará. Você terá que usar o mecanismo jarro endossado, conforme descrito aqui http:// jax- ws.java.net/2.2.3/docs/releasenotes.html#running_on_top_of_jdk_6 .
Portanto, para qualquer versão do metrô 2.0 e superior, você precisará copiar os arquivos JAX-WS-API.JAR e JAXB-API.JAR abaixo de $ Java_Home / JRE / lib / endossado ou use o -djava.endorsed Propriedade do sistema .Dirs.
e alguns mais divertidos, o Metro não é apenas um projeto de guarda-chuva que contém os projetos JAX-WS, JAXB (entre outros), mas também faz um jarro Uber desses projetos.
para que, por exemplo, o WebServices-API.jar do Metro.jar contém Jaxws-Api.jar, Jaxb-Api.jar (RI) + APIs de outras crianças projetos como WSIT, JAX-WS-Commons etc.
e webservices-rt.jar contém jaxws-rt.jar, jaxb-rt.jar, + rt frascos de outras crianças projetos como WSIT, JAX-WS-Commons etc.
Então resumir -
Se você quiser desenvolver seu WS contra as especificações JAXWS / JAXB V2.1, basta usar o JDK 6 (qualquer atualização após U04). Se você quiser ser absolutamente, certifique-se de usar as versões mais recentes da APIs + RIS de 2.1 especificações, basta usar os últimos jarros de lançamento 2.1.x do JAXWS e JAXB. ou seja, use o JAX-WS 2.1.7 e o JAXB 2.1.13, no seu caminho de classe, [ou você pode usar o Webservices-API.Jar do Metrô 1.5 e WebServices-Rt.jar como eles empacotam o JAXWS / JAXB / WSIT /. .]
Se você quiser desenvolver o WS contra as últimas especificações do JAXWS / JAXB V2.2, você terá que usar jars JAX-WS v2.2.6 e Jaxb Ver 2.2.5 [ou alternativamente usar o WebServices do Metro 2.2 -Api.jar e webservices-rt.jar como eles empacotam o JAXWS / JAXB / WSIT ..] Mas você terá que usar o mecanismo jarro endossado como descrito acima, para substituir o JDK incluído Jaxws / Jaxb v2.1 frascos.
Minha recomendação - se v2.1 estiver OK com você usa os jarros do Metro 1.5 (WebServices-API, WebServices-RT). Se você precisar de v2.2 usar frascos do Metro 2.2 (WebServices-API, WebServices-RT) e certifique-se de colocar WebServices-api.jar no diretório endossado.
Você precisará de frascos de metrô (Webservices- [API, RT] .jar) se você vai usar coisas como fastinfosets, MTOM, etc, como o JDK empacotou frascos ou para esse assunto apenas o Jaxws-Ri.jar e Jaxb-Ri.jar não lhe dará esses recursos.
Espero que este e-mail bastante longo tenha sido útil para esclarecer algumas coisas.