Conversor de Scala a XML
Pega case classes u objetos de Scala. Recibe XML limpio.
Qué hace esta herramienta
Si alguna vez has necesitado una carga XML que coincida con una case class de Scala — para una fixture de Akka HTTP, una configuración de Play Framework, una integración SOAP heredada o un test — probablemente hayas escrito a mano más XML del que querías. Pega el Scala aquí y obtén XML bien formado al instante. Una sola case class, un val poblado o un archivo entero con tipos anidados — todo sale con cada campo preservado.
El conversor entiende cómo se ve Scala realmente cuando llega a XML. Los literales BigDecimal con sufijo al final salen como texto numérico plano, los campos Option[String] se mapean a elementos vacíos cuando contienen None en lugar de descartarse silenciosamente, List[T] y Seq[T] se convierten en elementos contenedores con un hijo por ítem (con el nombre del tipo del elemento), y Map[K,V] se transforma en pares <Entry><Key/><Value/></Entry>. Esto coincide con lo que scala-xml o jackson-module-scala emitirían al hacer round-trip de un modelo.
Las case classes anidadas se expanden en elementos anidados, las constantes de companion object se ignoran, y las jerarquías de sealed trait mantienen el nombre del subtipo concreto como etiqueta del elemento. Puedes pegar varias clases a la vez — el conversor preserva las relaciones, así que si tu Order contiene un List[OrderItem] y un ShippingAddress, los tres vuelven juntos. Mira el tour oficial de case classes para repasar qué se trata como datos frente a comportamiento.
Cómo usarla
Tres pasos. El mismo flujo tanto si pegas una case class de cinco líneas como un archivo de modelo entero.
Pega tu Scala (o carga el ejemplo)
Suelta el código en el editor de la izquierda tal cual. Una sola case class, una instancia val poblada, varias clases o jerarquías de sealed trait — el parser se lleva bien con todas. Pulsa Cargar ejemplo si quieres ver un caso realista primero.
No hace falta quitar los imports, eliminar la declaración package ni limpiar la sintaxis de Scala. Deja el código como se ve en IntelliJ o Metals. Solo pégalo.
Pulsa Convertir
Haz clic en el botón verde Convertir. La herramienta parsea las case classes, recorre la instancia poblada y construye el XML en una sola pasada. Se muestra un breve indicador de carga mientras trabaja.
Copia el XML
El panel de la derecha se llena con XML bien formado e indentado que cualquier parser conforme al estándar aceptará. Cópialo directamente a tu test de Akka HTTP, al body XML de Play, a un archivo de recursos de SBT o a donde lo necesites.
Cuándo resulta realmente útil
Fixtures de Akka HTTP y Play
Tienes una case class para una petición XML entrante en Akka HTTP o Play y necesitas un body realista para un test o un comando curl. Pega la clase, obtén el XML y mételo en tu spec.
Configuración XML para sistemas heredados
Una case class de configuración con 30 campos se convierte en una plantilla XML lista para editar para plataformas antiguas que aún quieren XML — Mule, WebLogic, IBM MQ o herramientas internas.
Documentación que coincide con el código
Genera ejemplos XML para un README, ScalaDoc o página de Confluence directamente desde tus case classes reales, así la documentación nunca se desincroniza del modelo.
Datos de prueba para SOAP y scala-xml
Convierte instancias pobladas de tus tests unitarios en archivos XML semilla para tests de integración, stubs de WireMock o sistemas que todavía hablan SOAP.
Preguntas habituales
¿Puedo pegar varias case classes a la vez?
Sí — pega un archivo entero. Cada case class de nivel superior sale con los tipos anidados expandidos y los helpers de companion object ignorados. Si tu Order contiene un List[OrderItem], ambos aparecen en la salida con la anidación correcta.
¿Cómo maneja Option, None y los valores por defecto?
Un Option[String] con Some("x") se convierte en un elemento normal con el texto dentro. None se convierte en un elemento vacío para que la forma del XML se mantenga consistente — nada se descarta en silencio. Los valores por defecto de los campos de una case class se usan cuando un campo falta en la instancia.
¿Y qué pasa con BigDecimal, Instant, UUID y los tipos numéricos raros?
BigDecimal pierde su sufijo y sale como texto numérico plano. java.time.Instant, LocalDate y LocalDateTime se convierten en strings ISO-8601. UUID mantiene su formato hexadecimal estándar 8-4-4-4-12. Los wrappers primitivos (Int, Long, Double, Boolean) se convierten en texto plano — la misma forma que jackson-module-scala emite por defecto.
¿List, Seq, Set y Map funcionan todos igual?
Casi. List[T], Seq[T], Vector[T] y Set[T] se convierten en elementos contenedores con un hijo por ítem nombrado según el tipo del elemento — así que Items: List[OrderItem] se convierte en <Items><OrderItem/><OrderItem/></Items>. Map[K,V] se convierte en un contenedor de <Entry><Key/><Value/></Entry>.
¿Se guarda mi código?
Tu código se envía al backend para la conversión y no se persiste — no registramos el payload. Si el Scala es realmente sensible, dale un vistazo rápido antes de pegarlo, como con cualquier herramienta online.
¿Qué pasa si el Scala tiene conversiones implícitas, type classes o macros?
Los implícitos y el código generado por macros no producen campos XML por sí solos — trabajamos a partir de los miembros declarados de la case class. Así que un implicit val format o una anotación @JsonCodec se ignora efectivamente y sale la forma cruda del campo. Si el código tiene errores de sintaxis, arregla primero los obvios.
Otras herramientas que te pueden venir bien
Scala a XML es solo una pieza del puzzle. Estas herramientas combinan bien: