Java 21 Spring Boot 3.2 WSDL & JAXB WS-Security Docker Compose
El backend de Novapay opera bajo el patrón de diseño Facade (Fachada) o "Proxy Inteligente". Actúa como un intermediario o diplomático técnico entre la sencillez requerida por las aplicaciones cliente TPV (tablets o terminales con interfaz en Flutter que envían JSON simplificados) y la estricta complejidad formal exigida por la Agencia Tributaria.
Gracias a este diseño, las aplicaciones de cobro en el punto de venta no necesitan gestionar certificados digitales empresariales, lidiar con bibliotecas de criptografía nativa en Android o Windows, ni interpretar esquemas XML de miles de líneas. El servicio Spring Boot centraliza estas responsabilidades, garantizando el cumplimiento normativo sin afectar la velocidad de venta.
Envía JSON ligero con datos de venta
(Factura DTO)
Recibe SOAP Firmado
Verifica huella y devuelve CSV
Los endpoints REST expuestos al punto de venta se protegen mediante tokens JWT (JSON Web Tokens) con caducidad corta o claves API Key por dispositivo registrado. Esto impide que terminales no autorizadas o actores maliciosos puedan invocar servicios de facturación a nombre de la empresa.
Si la infraestructura de la Agencia Tributaria sufre degradación o caídas de red, la librería Resilience4j abre el circuito para evitar bloquear los hilos del servidor Java. La factura se asienta en la base de datos local y se delega la retransmisión al hilo asíncrono.
Aísla los miles de objetos Java autogenerados desde el WSDL de la AEAT. Al mantenerlos en su propio paquete separado, se evita contaminar las clases del dominio de negocio y se facilita la actualización futura del esquema tributario.
Implementa la comunicación remota utilizando `WebServiceTemplate` de Spring WS. Inyecta el interceptor `Wss4jSecurityInterceptor` encargado de añadir el encabezado WS-Security firmado antes de la transmisión.
Certificado digital en formato PKCS#12 (.p12). Contiene la clave privada RSA legal de la empresa. Por seguridad, este archivo se ignora en .gitignore y se monta dinámicamente mediante volúmenes en producción.
Una de las ventajas fundamentales de utilizar Java en el backend es la existencia de herramientas de compilación como cxf-codegen-plugin o jaxb2-maven-plugin. Estos plugins leen directamente los archivos de definición WSDL oficiales proporcionados por la AEAT y los compilan a clases Java POJO fuertemente tipadas durante la fase ./mvnw compile.
Esto elimina por completo la necesidad de concatenar cadenas XML manualmente, previniendo errores de sintaxis en etiquetas o atributos y permitiendo autocompletado y validación de tipos en tiempo de compilación.
// Uso real de clases autogeneradas en VeriFactuService.java
SuministroLRFacturasEmitidas peticion = new SuministroLRFacturasEmitidas();
CabeceraSuministro cabecera = new CabeceraSuministro();
cabecera.setIDVersionSuministro("1.0");
cabecera.setTitular(new PersonaFisicaJuridicaESType("B12345678", "Novapay S.L."));
peticion.setCabecera(cabecera);
// Spring WS transforma la instancia POJO a XML, inyecta WS-Security X.509 y ejecuta la llamada HTTPS
Object respuesta = webServiceTemplate.marshalSendAndReceive(peticion);
Al empaquetar la aplicación en un contenedor estandarizado, se garantiza que el comportamiento de la pila de librerías criptográficas de Java 21 sea exactamente idéntico en el entorno de desarrollo local, en la Raspberry Pi 5 de pruebas y en el servidor de producción.
.p12 en el host y reiniciar el contenedor.
PENDING se reintentan en segundo plano de forma automática.
pg_dump. La base de datos relacional es la única fuente de verdad inalterable del negocio.