Conversor de Java a XML
Pega clases o POJOs de Java. Recuperas XML limpio.
Qué hace esta herramienta
Si alguna vez has tenido que montar a mano un payload XML que case con una clase Java — para un cliente SOAP, una config de Spring, una integración bancaria heredada o una fixture de JUnit — ya sabes lo pesado que es. Pega aquí el Java y recibes XML bien formado de una sola pasada. Un POJO suelto, un archivo con DTOs anotados con Lombok o un modelo profundamente anidado con varias clases — mismo resultado: un documento XML completo con cada campo intacto.
Esto no es templating a ciegas. La herramienta sabe cómo se serializa Java a XML: BigDecimal mantiene su precisión exacta (sin notación científica), LocalDate y LocalDateTime salen como ISO-8601, UUID se convierte en un hex estándar 8-4-4-4-12, Instant es un timestamp con sufijo Z y los primitivos boxeados con valores null se convierten en elementos vacíos. List<T> se convierte en un elemento contenedor — por defecto envuelto, con un hijo por ítem — igual que haría Jakarta XML Binding (JAXB).
Las anotaciones se respetan exactamente como las trata Eclipse JAXB RI. @XmlRootElement(name="...") renombra el root, @XmlElement(name="...") renombra un hijo, @XmlAttribute emite el campo como atributo en el padre, @XmlTransient lo elimina por completo y @XmlElementWrapper añade el contenedor externo alrededor de una colección. Lombok @Data también funciona — los getters y setters generados se tratan como propiedades de bean. Si prefieres el módulo Jackson XML, sus @JacksonXmlProperty y @JacksonXmlElementWrapper también se respetan. Clases anidadas, campos heredados y varias clases de nivel superior salen todas limpias.
Cómo usarla
Tres pasos. Funciona igual si pegas un solo POJO o un archivo con una docena de clases.
Pega tu Java (o prueba el ejemplo)
Suelta tu Java en el editor de la izquierda tal cual. Un POJO plano, una clase Lombok @Data, un DTO con anotaciones JAXB o un archivo con varias clases — todo vale. Dale a Load Sample para ver un ejemplo realista primero.
No hace falta quitar los imports, borrar anotaciones ni sanear el archivo. Pégalo tal como lo tienes en el IDE — comentarios, sentencia package y todo.
Dale a Convert
Pulsa el botón verde Convert. La herramienta lee el Java, conserva cada campo y cada clase, respeta las anotaciones y construye el XML de una pasada. Verás un indicador breve de carga mientras trabaja.
Copia el XML
El panel de la derecha se rellena con XML indentado y bien formado que cualquier parser XML estándar aceptará. Cópialo a tu envelope SOAP, a la config de Spring Boot, a un test de integración o a un ejemplo para un XSD.
Cuándo viene bien de verdad
Montar fixtures SOAP
Tienes un DTO de request JAX-WS o Apache CXF y necesitas un cuerpo XML para SoapUI o Postman. Pegas la clase, te llevas el XML listo para meter en el envelope y sigues a lo tuyo.
Configs XML de Spring Boot
Una clase @ConfigurationProperties con 30 campos se convierte en una plantilla XML lista para editar — sin escribir a mano el boilerplate del applicationContext.xml.
Mantener docs y código en sincronía
Genera ejemplos XML para un README, una wiki interna o docs de XSD directamente desde tus clases de entidad reales, así los ejemplos nunca se desincronizan del código.
Seed de tests de integración legacy
Convierte tus object-mothers de JUnit en archivos XML de seed para mock servers, fixtures de IBM MQ o sistemas enterprise heredados que aún hablan XML.
Preguntas frecuentes
¿Puedo pegar varias clases a la vez?
Sí — pega un archivo entero. Cada clase de nivel raíz sale con los tipos anidados expandidos y los campos heredados de superclases incluidos. Las clases que el root no referencia se emiten como fragmentos XML separados para que no se pierda nada sin avisar.
¿Respeta anotaciones JAXB como @XmlRootElement, @XmlElement, @XmlAttribute y @XmlTransient?
Sí. @XmlRootElement(name="x") renombra el root, @XmlElement(name="x") renombra un hijo, @XmlAttribute(name="x") emite el campo como atributo en el padre, @XmlTransient lo elimina y @XmlElementWrapper añade el contenedor externo alrededor de una colección. Coincide con el comportamiento que explica el tutorial de JAXB.
¿Y con Lombok y Jackson XML?
Lombok @Data, @Getter y @Setter se tratan como si los accesores estuvieran escritos a mano. Las anotaciones de Jackson XML — @JacksonXmlProperty, @JacksonXmlRootElement, @JacksonXmlElementWrapper, @JacksonXmlText — también se respetan, así que las clases hechas para el XmlMapper de Jackson dataformats-text salen correctamente.
¿Cómo maneja BigDecimal, LocalDate, UUID y los campos null?
BigDecimal conserva la precisión completa, sin notación científica. LocalDate, LocalDateTime y ZonedDateTime salen como cadenas ISO-8601. Instant recibe el sufijo Z. UUID es el hex estándar 8-4-4-4-12 en minúsculas. Optional.empty() y los primitivos boxeados con null se convierten en elementos vacíos en vez de desaparecer, así la forma del XML se mantiene consistente entre instancias.
¿Se guarda mi código?
El código se envía al backend para la conversión y no se persiste — no logueamos el payload. Misma advertencia que con cualquier herramienta online: si el código es genuinamente sensible, repásalo antes de pegarlo.
¿Y si la clase tiene algo raro — Streams, CompletableFuture o un campo transient?
Los campos marcados como transient o anotados con @XmlTransient / @JsonIgnore se saltan. Los tipos que no tienen mapeo directo al mundo XML (Streams, CompletableFuture, interfaces funcionales propias) salen como elementos vacíos en lugar de romper toda la conversión. Si el Java en sí tiene un error de compilación, arregla los obvios primero — el parser es tolerante, pero no es un javac completo.
Otras herramientas que podrías necesitar
Java a XML es una pieza del puzzle. Estas herramientas casan bien con ella: