Cola Kotlin à esquerda e clica em "Converter" — transformamos em XMLCola código Kotlin

O que esta ferramenta faz

Se alguma vez tiveste de escrever à mão um payload XML para uma data class de Kotlin — para um ficheiro de recursos Android, um endpoint SOAP que ainda não foi substituído, ou uma fixture de um teste de integração — sabes o quão chato é escrever aquilo. Cola o Kotlin aqui e recebes XML bem formado de uma só vez. Uma data class sozinha, um ficheiro com várias data classes e sealed classes, ou uma instância com valores val order = Order(...) — o resultado é o mesmo: um documento XML completo com todas as propriedades preservadas.

Não é substituição de strings burra. O conversor sabe como o Kotlin realmente serializa para XML — mais ou menos à maneira como kotlinx.serialization trata as coisas. Valores BigDecimal saem como texto numérico simples, Instant e LocalDateTime viram strings ISO-8601, nullables com valor null ficam como elementos vazios, e List<T> e Map<K,V> seguem uma forma de contentor consistente — cada lista vira um elemento wrapper com um filho por item, nomeado segundo o tipo de elemento.

As anotações de serialização também são respeitadas. @SerialName("x") numa propriedade renomeia o elemento na saída, @Transient remove a propriedade, e um @SerialName("x") a nível de classe renomeia o elemento raiz. Hierarquias de sealed class são achatadas com um discriminador de tipo para poderes fazer round-trip depois. Se colares várias data classes, cada uma aparece na saída com tipos aninhados expandidos e valores por omissão preenchidos. A documentação de serialização do Kotlin vale a leitura se quiseres a versão completa.

Como usar

Três passos. Funciona igual quer coles cinco linhas quer um ficheiro de modelo inteiro.

1

Cola o teu Kotlin (ou experimenta o exemplo)

Atira o Kotlin para o editor da esquerda tal como está. Uma data class, uma hierarquia de sealed class, uma val instância preenchida, ou um ficheiro com várias classes — tudo serve. Clica em Carregar exemplo se quiseres ver um caso realista primeiro.

Não precisas de retirar imports, remover anotações, nem arrumar a sintaxe Kotlin. Deixa o código como aparece no IDE. Só cola.

2

Carrega em Converter

Carrega no botão verde Converter. A ferramenta lê o Kotlin, preserva cada classe e propriedade, e constrói o XML de uma só vez. Aparece um pequeno indicador de loading enquanto corre.

3

Copia o XML

O painel da direita enche-se com XML indentado e bem formado que qualquer parser XML que cumpra o standard aceita. Copia-o directamente para o teu recurso Android, pedido SOAP, ficheiro de configuração ou fixture de teste.

Quando isto realmente dá jeito

XML de layouts e recursos Android

Tens um modelo Kotlin que mapeia para um <a href="https://developer.android.com/guide/topics/resources/providing-resources" target="_blank" rel="noopener">recurso XML Android</a> — um ecrã de preferências, um string-array, um conjunto de atributos personalizados. Cola a classe, tira o XML, cola em res/xml ou res/values.

Clientes SOAP na JVM

Um tipo de pedido Kotlin tem de sair da app como SOAP. Cola a data class, atira o corpo XML para o SoapUI ou Postman, verifica o contrato sem escrever o envelope à mão.

Seed de fixtures de teste

Transforma uma instância preenchida <code>val order = Order(...)</code> do teu teste unitário num ficheiro XML de seed para testes de integração, servidores mock, ou sistemas legacy que ainda falam XML.

Docs sempre sincronizadas

Gera exemplos XML para um README, uma referência de API, ou documentação de esquema com XSD directamente a partir dos teus modelos Kotlin reais, para que a documentação siga o código em vez de se desfasar.

Perguntas habituais

Posso colar várias data classes ao mesmo tempo?

Sim — cola um ficheiro inteiro. Cada data class ou sealed class de topo sai com os tipos aninhados expandidos e os valores por omissão preenchidos. Nada é silenciosamente ignorado.

Respeita @SerialName e @Transient?

Sim. @SerialName("x") numa propriedade renomeia o elemento na saída, @SerialName("x") numa classe renomeia o elemento raiz wrapper, e @Transient remove a propriedade por completo. É o comportamento que obténs com kotlinx.serialization.

Como trata BigDecimal, Instant e nullables?

BigDecimal sai como texto numérico simples (sem wrapper BigDecimal("...")). Instant e LocalDateTime viram strings ISO-8601. Nullables com valor null ficam como elementos vazios em vez de serem removidos, para que a forma seja consistente para consumidores que validam contra um XSD.

E com sealed classes, listas e maps?

Hierarquias de sealed class são achatadas com um atributo discriminador de tipo para poderes fazer round-trip. List<T> torna-se um elemento contentor com um filho por item, nomeado segundo o tipo de elemento — um List<OrderItem> items passa a <items><OrderItem/><OrderItem/></items>. Map<K,V> passa a contentor de <Entry><Key/><Value/></Entry>.

O meu código fica guardado?

O teu código é enviado para o backend para conversão e não é persistido — não fazemos log do payload. Como sempre com ferramentas online, se o código for mesmo sensível, dá-lhe uma olhada antes de colar.

E se o Kotlin tiver algo invulgar — companion objects, extension functions, coroutines?

Companion objects são ignorados para a saída XML porque não fazem parte do estado da instância. Extension functions e funções top-level são saltadas. Se o código em si tem erros de sintaxe, corrige os óbvios primeiro — o parser é tolerante mas não adivinha.

Outras ferramentas que te podem dar jeito

Kotlin para XML é uma peça do puzzle. Estas combinam bem com ela: