ADD - XMLHelper
This commit is contained in:
parent
c1a419f3dc
commit
a968d9ebba
14
pom.xml
14
pom.xml
@ -15,6 +15,8 @@
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
<java.version>17</java.version>
|
||||
<jakarta.jaxb.api.version>4.0.0</jakarta.jaxb.api.version>
|
||||
<jakarta.jaxb.impl.version>4.0.5</jakarta.jaxb.impl.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
@ -37,6 +39,18 @@
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- Dependencias de JAXB para JDK 17 (Jakarta EE) -->
|
||||
<dependency>
|
||||
<groupId>jakarta.xml.bind</groupId>
|
||||
<artifactId>jakarta.xml.bind-api</artifactId>
|
||||
<version>${jakarta.jaxb.api.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jaxb</groupId>
|
||||
<artifactId>jaxb-runtime</artifactId>
|
||||
<version>${jakarta.jaxb.impl.version}</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@ -1,10 +1,5 @@
|
||||
package com.banesco.common.infraestructure.helpers;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
@ -12,6 +7,11 @@ import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
|
||||
public class JsonHelper {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(JsonHelper.class.getName());
|
||||
|
||||
@ -0,0 +1,71 @@
|
||||
package com.banesco.common.infraestructure.helpers;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Objects;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import jakarta.xml.bind.JAXBContext;
|
||||
import jakarta.xml.bind.JAXBElement;
|
||||
import jakarta.xml.bind.JAXBException;
|
||||
import jakarta.xml.bind.Marshaller;
|
||||
|
||||
public class XmlHelper {
|
||||
private static final Logger logger = Logger.getLogger(XmlHelper.class.getName());
|
||||
|
||||
/**
|
||||
* Imprime el contenido XML de un objeto JAXBElement en el log.
|
||||
* Utiliza JAXB para serializar el objeto a XML y lo formatea para una mejor legibilidad.
|
||||
*
|
||||
* @param element El JAXBElement que contiene el objeto a serializar a XML.
|
||||
* @param traceId requestID.
|
||||
* @throws JAXBException Si ocurre un error durante la serialización JAXB.
|
||||
*/
|
||||
public static void printXml(JAXBElement<?> element, String traceId) throws JAXBException {
|
||||
// Verifica si el elemento es nulo para evitar NullPointerException
|
||||
Objects.requireNonNull(element, "El JAXBElement no puede ser nulo.");
|
||||
|
||||
// Obtiene el tipo declarado del elemento para crear el contexto JAXB.
|
||||
// Esto asegura que JAXB conozca la clase raíz del objeto que se va a serializar.
|
||||
Class<?> declaredType = element.getDeclaredType();
|
||||
|
||||
// Crea una instancia de JAXBContext para el tipo declarado.
|
||||
// JAXBContext es costoso de crear, en aplicaciones de alto rendimiento
|
||||
// se suele cachear o reutilizar. Para este caso de log, es aceptable crearlo aquí.
|
||||
JAXBContext ctx = JAXBContext.newInstance(declaredType);
|
||||
|
||||
// Crea un Marshaller, que es responsable de convertir objetos Java a XML.
|
||||
Marshaller marshaller = ctx.createMarshaller();
|
||||
|
||||
// Configura la propiedad para que el XML de salida esté formateado (indentado).
|
||||
// Esto hace que el XML sea mucho más legible en los logs.
|
||||
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
|
||||
|
||||
// Configura la propiedad para que el XML no incluya la declaración XML (<?xml version="1.0" encoding="UTF-8" standalone="yes"?>).
|
||||
// Esto puede ser útil si solo quieres el contenido XML puro en el log,
|
||||
// pero a menudo es mejor dejarlo si quieres un XML completo y válido.
|
||||
// marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
|
||||
|
||||
// Usa ByteArrayOutputStream para capturar la salida XML en memoria.
|
||||
// Esto es necesario porque Marshaller escribe en un OutputStream,
|
||||
// y necesitamos obtener el String resultante para el log.
|
||||
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
|
||||
// Realiza la serialización del JAXBElement al OutputStream.
|
||||
marshaller.marshal(element, outputStream);
|
||||
|
||||
// Convierte el contenido del ByteArrayOutputStream a un String.
|
||||
// Es crucial especificar la codificación (UTF-8 es lo más común)
|
||||
// para asegurar que los caracteres se interpreten correctamente.
|
||||
String xmlString = outputStream.toString(StandardCharsets.UTF_8.name());
|
||||
|
||||
// Loggea el XML generado.
|
||||
logger.log(Level.INFO, traceId + " - XML del servicio SOAP:\n{0}", xmlString);
|
||||
} catch (IOException e) {
|
||||
// Manejo de excepción si hay un problema con el ByteArrayOutputStream (poco probable en este caso).
|
||||
logger.log(Level.SEVERE, "Error al procesar el OutputStream para el XML", e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user