Entradas

Mostrando entradas de junio, 2026

API y el SII: una confusión que nunca termina

El SII no proporciona APIs de facturación electrónica: proporciona especificaciones técnicas. Una API (Application Programming Interface) es una interfaz que expone operaciones o funciones para que un cliente las consuma. El proveedor de la API implementa la lógica; el consumidor solo la utiliza siguiendo las reglas establecidas. En cambio, con el SII ocurre algo diferente: El SII publica especificaciones técnicas : formatos XML,especificaciones de firma, esquemas XSD, servicios SOAP, autenticación y envio por http. El desarrollador debe implementar gran parte de la lógica necesaria para generar los documentos, firmarlos, validarlos y comunicarse con el SII. Es decir, el SII no entrega una biblioteca o un SDK que resuelva todo el proceso; entrega la documentación para que tú construyas la integración. Por eso muchas empresas crean su propia capa de servicios o API. Por ejemplo, una empresa puede exponer un endpoint como: POST /api/envioFactura y ese endpoint puede internamente: ...

Try-with-resources: una solución para manejar recursos en Java

  Cuando trabajamos con bases de datos en Java, es común abrir múltiples recursos como Connection , PreparedStatement y ResultSet . El problema es que, si no se cierran correctamente, pueden producirse fugas de memoria o saturación de conexiones. Para resolver esto, Java incorporó desde la versión 7 la estructura try-with-resources , una forma más segura y limpia de manejar recursos que deben cerrarse automáticamente. ¿Qué es try-with-resources? Es una extensión del bloque try que permite declarar recursos dentro de paréntesis. Estos recursos se cierran automáticamente al finalizar el bloque, incluso si ocurre una excepción. Ejemplo sin try-with-resources Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = ConexionBD.getConnection(); ps = conn.prepareStatement("SELECT * FROM mascotas"); rs = ps.executeQuery(); while (rs.next()) { System.out.println(rs.getString("nombre")); } } catch (SQLException e)...

Creando una clase de conexión a MySQL en Java

  Cuando comencé a aprender Java, una de las primeras tareas fue conectarme a una base de datos MySQL. Para ello, normalmente se crea una clase encargada de centralizar la configuración de la conexión y entregar objetos Connection al resto de la aplicación. Un ejemplo simple es el siguiente: package com.egga.appvet.includes; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Connection; public class ConexionBD { private static final String URL = "jdbc:mysql://localhost:3306/AppVet"; private static final String USER = "tuusuario"; private static final String PASS = "tupassword@"; public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASS); } } En este ejemplo se definen tres constantes: URL: dirección de la base de datos MySQL. USER: usuario utilizado para conectarse al servidor. PASS: contraseña del usuario. El método getConnection() devuel...