Este projeto é uma implementação de referência de um Web Service SOAP utilizando Java 25 e Spring Boot.
O objetivo principal foi explorar a abordagem Contract-First (Contrato Primeiro), onde a lógica de negócios e as classes Java são geradas estritamente a partir de definições formais em XML (XSD).
- Java 25: Utilização das features mais recentes da linguagem.
- Spring Web Services: Framework para criação de endpoints SOAP robustos.
- JAXB (Jakarta XML Binding): Para Marshalling (Objeto -> XML) e Unmarshalling (XML -> Objeto).
- Maven & JAXB Plugin: Automação da geração de classes (Source Generation).
- WSDL4J: Geração dinâmica do WSDL.
Embora o REST (com JSON) seja o padrão dominante para desenvolvimento web e mobile, o SOAP continua sendo a espinha dorsal de sistemas críticos (Bancos, Seguradoras, Governo) devido à sua formalidade e segurança.
Abaixo, um comparativo das principais diferenças abordadas neste estudo:
| Característica | SOAP (Simple Object Access Protocol) | REST (Representational State Transfer) |
|---|---|---|
| Formato de Dados | Apenas XML (Rígido e Verborrágico) | JSON, XML, Texto, HTML (Flexível e Leve) |
| Definição de Contrato | WSDL (Obrigatório). O contrato dita o código. | OpenAPI/Swagger (Opcional). Documenta o código. |
| Modelo Mental | Orientado a Operação (Chamada de Procedimento Remoto). | Orientado a Recurso (Entidades manipuladas via verbos HTTP). |
| Tratamento de Erros | Padronizado via SOAP Fault no envelope. | Códigos de status HTTP (404, 500, 201). |
| Principal Vantagem | Segurança e Atomicidade. Garante que a mensagem chegue exatamente como o contrato exige (Type Safety). | Performance e Simplicidade. Fácil de implementar e consumir por navegadores e celulares. |
Nota: A escolha do SOAP neste projeto foi proposital para exercitar a disciplina do desenvolvimento Contract-First, garantindo integridade de dados entre sistemas heterogêneos.
- Java 25 (JDK) instalado.
- Maven instalado.
Como as classes base são geradas dinamicamente, o primeiro passo é rodar o build do Maven para criar os arquivos necessários na pasta target:
mvn clean compileNota: As classes geradas (ex: GetPaisRequest, Pais) ficarão localizadas em target/generated-sources/jaxb. Certifique-se de que sua IDE reconheça esta pasta como "Generated Sources".
Após a compilação, inicie o servidor:
mvn spring-boot:runA aplicação estará rodando em: http://localhost:8080
Você pode testar a aplicação usando Postman, Insomnia ou SoapUI.
- Método: POST
- URL: http://localhost:8080/ws
- Header: Content-Type: text/xml
- WSDL: http://localhost:8080/ws/paises.wsdl
Exemplo de body (XML):
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns="http://httpsdre.com.br/soap">
<soapenv:Header/>
<soapenv:Body>
<ns:getPaisRequest>
<ns:nome>Brazil</ns:nome>
</ns:getPaisRequest>
</soapenv:Body>
</soapenv:Envelope>Resposta esperada:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2:getPaisResponse xmlns:ns2="http://httpsdre.com.br/soap">
<ns2:pais>
<ns2:nome>Brazil</ns2:nome>
<ns2:capital>Brasília</ns2:capital>
<ns2:moeda>BRL</ns2:moeda>
</ns2:pais>
</ns2:getPaisResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>