Convertisseur Scala vers XML
Colle des case classes ou des objets Scala. Récupère du XML propre.
Ce que fait cet outil
Si tu as déjà eu besoin d'un payload XML qui correspond à une case class Scala — pour une fixture Akka HTTP, une config Play Framework, une intégration SOAP legacy ou un test — tu as probablement écrit plus de XML à la main que tu ne le souhaitais. Colle le Scala ici et récupère directement du XML bien formé. Une seule case class, un val peuplé, ou un fichier entier avec des types imbriqués — tout ressort avec chaque champ préservé.
Le convertisseur comprend à quoi ressemble vraiment Scala quand il arrive en XML. Les littéraux BigDecimal avec un suffixe en fin sortent en texte numérique brut, les champs Option[String] sont mappés vers des éléments vides quand ils contiennent None au lieu d'être abandonnés silencieusement, List[T] et Seq[T] deviennent des éléments conteneurs avec un enfant par item (nommé d'après le type de l'élément), et Map[K,V] se transforme en paires <Entry><Key/><Value/></Entry>. Ça correspond à ce que scala-xml ou jackson-module-scala émettraient lors d'un round-trip d'un modèle.
Les case classes imbriquées s'étendent en éléments imbriqués, les constantes de companion object sont ignorées, et les hiérarchies de sealed trait gardent le nom du sous-type concret comme tag de l'élément. Tu peux coller plusieurs classes à la fois — le convertisseur préserve les relations, donc si ton Order contient un List[OrderItem] et une ShippingAddress, les trois reviennent ensemble. Jette un œil au tour officiel des case classes pour un rappel sur ce qui est traité comme données ou comportement.
Comment l'utiliser
Trois étapes. Même flux que tu colles une case class de cinq lignes ou un fichier modèle entier.
Colle ton Scala (ou charge l'exemple)
Dépose le code dans l'éditeur de gauche tel quel. Une seule case class, une instance val peuplée, plusieurs classes ou des hiérarchies de sealed trait — le parser s'en accommode. Clique sur Charger un exemple si tu veux d'abord voir un cas réaliste.
Pas besoin de retirer les imports, de supprimer la déclaration package ou de nettoyer la syntaxe Scala. Laisse le code tel qu'il apparaît dans IntelliJ ou Metals. Colle, c'est tout.
Clique sur Convertir
Clique sur le bouton vert Convertir. L'outil parse les case classes, parcourt l'instance peuplée et construit le XML en une passe. Un bref indicateur de chargement s'affiche pendant le travail.
Copie le XML
Le panneau de droite se remplit de XML bien formé et indenté, accepté par n'importe quel parser conforme. Copie-le directement dans ton test Akka HTTP, ton body XML Play, un fichier de ressources SBT, ou partout où tu en as besoin.
Quand ça sert vraiment
Fixtures Akka HTTP et Play
Tu as une case class pour une requête XML entrante en Akka HTTP ou Play et il te faut un body réaliste pour un test ou une commande curl. Colle la classe, récupère le XML, balance-le dans ta spec.
Config XML pour systèmes legacy
Une case class de config à 30 champs devient un template XML prêt à éditer pour les plateformes plus anciennes qui veulent encore du XML — Mule, WebLogic, IBM MQ ou outils maison.
Documentation alignée sur le code
Génère des exemples XML pour un README, un ScalaDoc ou une page Confluence directement depuis tes vraies case classes, pour que la doc ne dérive jamais du modèle.
Données de test pour SOAP et scala-xml
Transforme des instances peuplées de tes tests unitaires en fichiers XML de seed pour des tests d'intégration, des stubs WireMock ou des systèmes qui parlent encore SOAP.
Questions fréquentes
Je peux coller plusieurs case classes à la fois ?
Oui — colle un fichier entier. Chaque case class de premier niveau ressort avec les types imbriqués étendus et les helpers de companion object ignorés. Si ton Order contient un List[OrderItem], les deux apparaissent dans la sortie avec la bonne imbrication.
Comment ça gère Option, None et les valeurs par défaut ?
Un Option[String] contenant Some("x") devient un élément normal avec le texte à l'intérieur. None devient un élément vide pour que la forme du XML reste cohérente — rien n'est abandonné en silence. Les valeurs par défaut des champs d'une case class sont utilisées quand un champ est absent de l'instance.
Et pour BigDecimal, Instant, UUID et les types numériques un peu spéciaux ?
BigDecimal perd son suffixe et sort en texte numérique brut. java.time.Instant, LocalDate et LocalDateTime deviennent des chaînes ISO-8601. UUID garde son format hexadécimal standard 8-4-4-4-12. Les wrappers primitifs (Int, Long, Double, Boolean) deviennent du texte brut — la même forme que jackson-module-scala émet par défaut.
List, Seq, Set et Map fonctionnent tous pareil ?
À peu près. List[T], Seq[T], Vector[T] et Set[T] deviennent tous des éléments conteneurs avec un enfant par item nommé d'après le type de l'élément — donc Items: List[OrderItem] devient <Items><OrderItem/><OrderItem/></Items>. Map[K,V] devient un conteneur de <Entry><Key/><Value/></Entry>.
Mon code est-il stocké ?
Ton code est envoyé au backend pour la conversion et n'est pas persisté — on ne logge pas le payload. Si le Scala est vraiment sensible, jette-lui un œil rapide avant de le coller, comme avec n'importe quel outil en ligne.
Et si le Scala contient des conversions implicites, des type classes ou des macros ?
Les implicits et le code généré par macros ne produisent pas de champs XML par eux-mêmes — on travaille à partir des membres déclarés de la case class. Donc un implicit val format ou une annotation @JsonCodec est effectivement ignoré et la forme brute du champ ressort. Si le code a des erreurs de syntaxe, corrige d'abord les plus évidentes.
D'autres outils qui peuvent servir
Scala vers XML n'est qu'une pièce du puzzle. Ces outils s'associent bien :