Klistra in Scala till vänster och klicka på "Konvertera" — vi gör om det till XMLKlistra in Scala-kod

Vad det här verktyget gör

Om du någonsin behövt en XML-payload som matchar en case class i Scala — för en Akka HTTP-fixture, en Play Framework-config, en legacy SOAP-integration eller ett test — har du förmodligen skrivit mer XML för hand än du ville. Klistra in Scalan här och få tillbaka välformad XML direkt. En enstaka case class, en ifylld val, eller en hel fil med nästlade typer — allt går igenom med varje fält bevarat.

Konverteraren förstår hur Scala faktiskt ser ut när det träffar XML. BigDecimal-literaler med ett efterhängande suffix kommer ut som vanlig numerisk text, Option[String]-fält mappas till tomma element när de innehåller None istället för att tyst slängas, List[T] och Seq[T] blir container-element med ett barn per item (namngivet efter elementtypen), och Map[K,V] blir <Entry><Key/><Value/></Entry>-par. Det matchar vad scala-xml eller jackson-module-scala skulle skicka ut vid round-trip av en modell.

Nästlade case classes expanderar till nästlade element, companion-object-konstanter ignoreras, och sealed-trait-hierarkier behåller den konkreta subtypens namn som elementtag. Du kan klistra in flera klasser på en gång — konverteraren bevarar relationerna, så om din Order innehåller en List[OrderItem] och en ShippingAddress kommer alla tre tillbaka tillsammans. Titta på den officiella case class-turen för en uppfräschning om vad som behandlas som data kontra beteende.

Så använder du det

Tre steg. Samma flöde oavsett om du klistrar in en fem rader lång case class eller en hel modellfil.

1

Klistra in din Scala (eller ladda exemplet)

Släpp koden i den vänstra editorn som den är. En enstaka case class, en ifylld val-instans, flera klasser eller sealed-trait-hierarkier — parsern trivs med alla. Tryck på Ladda exempel om du vill se ett realistiskt fall först.

Du behöver inte ta bort imports, slänga package-deklarationen eller städa Scala-syntaxen. Lämna koden som den ser ut i IntelliJ eller Metals. Bara klistra in.

2

Tryck på Konvertera

Klicka på den gröna Konvertera-knappen. Verktyget parsar case classes, går igenom den ifyllda instansen och bygger XML:en i en enda pass. En kort laddningsindikator snurrar under tiden.

3

Kopiera XML:en

Den högra panelen fylls med indenterad, välformad XML som vilken standardkompatibel parser som helst accepterar. Kopiera den rakt in i ditt Akka HTTP-test, Play XML-body, SBT-resursfil, eller vart du än behöver den.

När det faktiskt är användbart

Akka HTTP- och Play-fixtures

Du har en case class för en inkommande XML-request i Akka HTTP eller Play och behöver en realistisk body för ett test eller ett curl-kommando. Klistra in klassen, få XML:en, släng in i din spec.

XML-config för legacy-system

En config-case-class med 30 fält blir en färdigredigerad XML-mall för äldre plattformar som fortfarande vill ha XML — Mule, WebLogic, IBM MQ eller husbyggen.

Dokumentation som matchar koden

Generera XML-exempel för en README, ScalaDoc eller Confluence-sida direkt från dina riktiga case classes, så att dokumentationen aldrig glider från modellen.

Testdata för SOAP och scala-xml

Förvandla ifyllda instanser från dina enhetstester till XML-seed-filer för integrationstester, WireMock-stubbar eller system som fortfarande pratar SOAP.

Vanliga frågor

Kan jag klistra in flera case classes samtidigt?

Ja — klistra in en hel fil. Varje case class på toppnivå kommer ut med nästlade typer utvikta och companion-object-hjälpare ignorerade. Om din Order innehåller en List[OrderItem] dyker båda upp i utdata med rätt nästlingsstruktur.

Hur hanteras Option, None och defaultvärden?

En Option[String] med Some("x") blir ett vanligt element med texten inuti. None blir ett tomt element så att formen på XML:en förblir konsekvent — inget slängs tyst. Defaultvärden på case class-fält används när ett fält saknas i instansen.

Hur är det med BigDecimal, Instant, UUID och de udda numeriska typerna?

BigDecimal tappar sitt suffix och kommer ut som vanlig numerisk text. java.time.Instant, LocalDate och LocalDateTime blir ISO-8601-strängar. UUID behåller sitt standard 8-4-4-4-12 hex-format. Primitiva wrappers (Int, Long, Double, Boolean) blir vanlig text — samma form som jackson-module-scala skickar ut som standard.

Funkar List, Seq, Set och Map alla på samma sätt?

Nästan. List[T], Seq[T], Vector[T] och Set[T] blir alla container-element med ett barn per item namngivet efter elementtypen — så Items: List[OrderItem] blir <Items><OrderItem/><OrderItem/></Items>. Map[K,V] blir en container av <Entry><Key/><Value/></Entry>.

Lagras min kod?

Din kod skickas till backend för konvertering och sparas inte — vi loggar inte payloaden. Om Scalan är riktigt känslig, ögna igenom den innan du klistrar in, som med vilket onlineverktyg som helst.

Tänk om Scalan har implicita konverteringar, type classes eller makron?

Implicits och makro-genererad kod producerar inga XML-fält på egen hand — vi jobbar utifrån case classens deklarerade medlemmar. Så en implicit val format eller en @JsonCodec-annotering ignoreras i praktiken och den råa fältformen går igenom. Har koden syntaxfel, fixa de uppenbara först.

Andra verktyg du kan behöva

Scala till XML är bara en bit av pusslet. De här verktygen kompletterar det bra: