Conversor de Java para XML
Cola classes ou POJOs Java. Recebes XML limpinho.
O que esta ferramenta faz
Se já alguma vez tiveste de escrever à mão um payload XML que bata certo com uma classe Java — para um cliente SOAP, uma config de Spring, uma integração bancária legacy ou uma fixture de JUnit — já sabes o quão chato é. Cola aqui o Java e recebes XML bem formado de uma só vez. Um POJO isolado, um ficheiro cheio de DTOs anotados com Lombok ou um modelo com várias classes encadeadas — mesmo resultado: um documento XML completo com cada campo preservado.
Não é templating à cega. A ferramenta sabe como o Java se serializa para XML: BigDecimal mantém a precisão exata (sem notação científica), LocalDate e LocalDateTime saem como ISO-8601, UUID vira uma string hex padrão 8-4-4-4-12, Instant é um timestamp com sufixo Z, e primitivos boxed com valores null viram elementos vazios. List<T> vira um elemento contentor — por defeito wrappado, com um filho por item — tal como o Jakarta XML Binding (JAXB) produziria.
As anotações são respeitadas exatamente como o Eclipse JAXB RI as trata. @XmlRootElement(name="...") renomeia a raiz, @XmlElement(name="...") renomeia um filho, @XmlAttribute emite o campo como atributo do pai, @XmlTransient tira-o por completo e @XmlElementWrapper adiciona o contentor externo à volta de uma coleção. Lombok @Data também funciona — os getters e setters gerados são tratados como bean properties. Se preferires o módulo Jackson XML, os @JacksonXmlProperty e @JacksonXmlElementWrapper também são respeitados. Classes aninhadas, campos herdados e várias classes top-level — tudo sai limpinho.
Como usar
Três passos. Funciona igual, quer coles um POJO só, quer um ficheiro com uma dúzia de classes.
Cola o teu Java (ou experimenta o exemplo)
Larga o teu Java no editor da esquerda tal como está. Um POJO básico, uma classe @Data do Lombok, um DTO anotado com JAXB ou um ficheiro com várias classes — tudo funciona. Carrega em Load Sample para veres primeiro um exemplo realista.
Não precisas de tirar imports, remover anotações nem limpar o ficheiro. Cola-o como está no IDE — comentários, declaração de package e tudo.
Carrega em Convert
Clica no botão verde Convert. A ferramenta lê o Java, preserva cada campo e classe, respeita as anotações e monta o XML numa passagem. Vê-se um pequeno indicador de loading enquanto corre.
Copia o XML
O painel da direita enche-se com XML indentado e bem formado que qualquer parser XML compatível aceita. Copia para dentro do teu envelope SOAP, da config Spring Boot, de um teste de integração ou de um exemplo de schema XSD.
Quando dá mesmo jeito
Montar fixtures de SOAP
Tens um DTO de request JAX-WS ou Apache CXF e precisas de um body XML para o SoapUI ou o Postman. Colas a classe, obténs o XML pronto para o envelope, e segues com o teu dia.
Configs XML de Spring Boot
Uma classe @ConfigurationProperties do Spring com 30 campos vira um template XML pronto a editar — sem ter de escrever o boilerplate do applicationContext.xml à mão.
Manter docs e código alinhados
Gera exemplos XML para um README, um wiki interno ou docs baseadas em XSD diretamente a partir das tuas classes de entidade reais, para que os exemplos nunca se afastem do código.
Seed de testes de integração legacy
Transforma os teus object-mothers de JUnit em ficheiros XML de seed para mock servers, fixtures de IBM MQ ou sistemas enterprise antigos que ainda falam XML.
Perguntas frequentes
Posso colar várias classes de uma vez?
Sim — cola um ficheiro inteiro. Cada classe top-level sai com os tipos aninhados expandidos e os campos herdados de superclasses incluídos. As classes que a raiz não referencia saem como fragmentos XML separados, portanto nada é silenciosamente omitido.
Respeita anotações JAXB como @XmlRootElement, @XmlElement, @XmlAttribute e @XmlTransient?
Sim. @XmlRootElement(name="x") renomeia a raiz, @XmlElement(name="x") renomeia um filho, @XmlAttribute(name="x") emite o campo como atributo do pai, @XmlTransient tira-o, e @XmlElementWrapper adiciona o contentor externo à volta de uma coleção. Bate certo com o comportamento descrito no tutorial do JAXB.
E com Lombok e Jackson XML?
Lombok @Data, @Getter e @Setter são tratados como se os acessores estivessem escritos à mão. As anotações de Jackson XML — @JacksonXmlProperty, @JacksonXmlRootElement, @JacksonXmlElementWrapper, @JacksonXmlText — também são respeitadas, por isso classes feitas para o XmlMapper do Jackson dataformats-text saem corretas.
Como trata BigDecimal, LocalDate, UUID e campos null?
BigDecimal mantém a precisão completa, sem notação científica. LocalDate, LocalDateTime e ZonedDateTime saem como strings ISO-8601. Instant recebe sufixo Z. UUID é a string hex padrão 8-4-4-4-12 em minúsculas. Optional.empty() e primitivos boxed com null viram elementos vazios em vez de desaparecerem, para que a forma do XML se mantenha consistente entre instâncias.
O meu código fica guardado?
O código é enviado ao backend para ser convertido e não é persistido — não fazemos log do payload. A ressalva é a mesma de qualquer ferramenta online: se o código for mesmo sensível, revê antes de colar.
E se a classe tiver algo fora do vulgar — Streams, CompletableFuture ou um campo transient?
Campos marcados como transient ou anotados com @XmlTransient / @JsonIgnore são saltados. Tipos que não têm mapeamento direto no mundo XML (Streams, CompletableFuture, interfaces funcionais próprias) saem como elementos vazios em vez de fazerem falhar a conversão toda. Se o próprio Java tiver um erro de compilação, arranja primeiro os mais óbvios — o parser é tolerante mas não é um javac completo.
Outras ferramentas que podes precisar
Java para XML é só uma peça do puzzle. Estas ferramentas combinam bem com ela: