O Spring liberou simultaneamente duas versões do projeto Web Services. A versão 3.0.4.RELEASE como a branch principal de desenvolvimento, e a versão 2.4.3.RELEASE como branch de manutenção, ambas versões foram atualizadas para executar no Spring Framework 5.1.0 e suportar o Java 11.
O Spring Web Services (Spring-WS) é um produto da comunidade Spring focado em criar web services orientado à documentos. Tendo como objetivo facilitar o desenvolvimento de serviços contract-first SOAP, permitindo a criação de web services flexíveis usando uma das várias formas de manipular contéudo XML.
A melhoria mais notável nas novas versões do Spring Web Services é o suporte ao Java 11. Desde o Java 9, uma série de packages principais do Java EE como packages XML e SOAP, tiveram a visibilidade reduzida, e no Java 11, esses packages foram totalmente removidos. Assim para usar o Spring Web Services no Java 9 ou versões posteriores, os desenvolvedores não podem depender do JDK fornecendo as bibliotecas principais XML e SOAP.
Um novo Java 11 profile contendo as dependências adicionais que os desenvolvedores devem adicionar em seus próprios arquivos de build foi adicionado ao arquivo de build do Spring Web Services. Os desenvolvedores que estiverem usando o Java 11 devem adicionar as dependências aos seus próprios arquivos de build. A seguir um trecho do arquivo build.xml com as dependências necessárias para o Java 11 na versão 3.0.4.RELEASE:
<dependencies>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-ri</artifactId>
<version>2.3.0</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.jvnet.staxex</groupId>
<artifactId>stax-ex</artifactId>
<version>1.7.8</version>
</dependency>
<dependency>
<groupId>com.sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>1.3.28</version>
</dependency>
<dependency>
<groupId>javax.xml.soap</groupId>
<artifactId>javax.xml.soap-api</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.0</version>
</dependency>
Os desenvolvedores que continuarem usando o Spring Web Services 2.4.3.RELEASE não terão problemas usando o Java 11. Essa versão usa uma versão mais antiga da API SOAP (1.3.8). A seguir um trecho do build.xml com as dependências necessárias para o Java 11 na versão 2.4.3.RELEASE:
<dependencies>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-ri</artifactId>
<version>2.3.0</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.jvnet.staxex</groupId>
<artifactId>stax-ex</artifactId>
<version>1.7.8</version>
</dependency>
<dependency>
<groupId>com.sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>1.3.28</version>
</dependency>
<dependency>
<groupId>javax.xml.soap</groupId>
<artifactId>javax.xml.soap-api</artifactId>
<version>1.3.8</version>
</dependency>
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.0</version>
</dependency>
Ambas as versões do Spring Web Services trazem uma série de correções de bugs e melhorias em comum além do suporte ao Java 11, tais como:
- SaajSoapMessage criado com um default (empty) SoapEnvelope
(SWS-1018); - SimpleXsdSchema com propriedades não inicializadas produzem NullPointerException (SWS-1036);
- Resolução de conflitos de versões em bibliotecas de terceiros (SWS-1030);
- Ehcache - OWASP Dependency Check issues (SWS-1033).
As funcionalidades específicas do Spring Web Services 3.0.4.RELEASE são:
- Fazer com que o SimpleXsdSchema forneça uma mensagem de erro mais produtiva (SWS-1037);
- Melhora na documentação, uma série de pequenas correções na documentação, tais como referência errada ao Gradle Wrapper ao invés do Maven Wrapper, links quebrados, etc. (SWS-1038);
- Atualização para a última versão do Spring (SWS-1039).
Os artefatos do Spring Web Services estão disponíveis no maven central e http://repo.spring.io/. Um exemplo demonstrando como usar o Spring Web Services com o Spring Boot também está disponível no repositório do Spring no GitHub.