Füge links Scala ein und klicke auf "Konvertieren" — wir machen XML darausScala-Code einfügen

Was dieses Tool macht

Wenn du jemals ein XML-Payload gebraucht hast, das zu einer Scala case class passt — für eine Akka-HTTP-Fixture, eine Play-Framework-Konfiguration, eine Legacy-SOAP-Integration oder einen Test — hast du wahrscheinlich mehr XML von Hand geschrieben, als dir lieb war. Füge das Scala hier ein und bekomme direkt wohlgeformtes XML zurück. Eine einzelne case class, ein gefülltes val oder eine ganze Datei mit verschachtelten Typen — alles kommt durch, mit jedem Feld erhalten.

Der Konverter versteht, wie Scala tatsächlich aussieht, wenn es auf XML trifft. BigDecimal-Literale mit angehängtem Suffix kommen als reiner Zahlentext heraus, Option[String]-Felder werden zu leeren Elementen, wenn sie None enthalten, statt stillschweigend verworfen zu werden, List[T] und Seq[T] werden zu Container-Elementen mit einem Kind pro Item (benannt nach dem Elementtyp), und Map[K,V] wird zu <Entry><Key/><Value/></Entry>-Paaren. Das entspricht dem, was scala-xml oder jackson-module-scala bei einem Roundtrip eines Modells ausgeben würden.

Verschachtelte case classes werden in verschachtelte Elemente expandiert, Companion-Object-Konstanten werden ignoriert, und sealed-trait-Hierarchien behalten den Namen des konkreten Subtyps als Element-Tag. Du kannst mehrere Klassen auf einmal einfügen — der Konverter bewahrt die Beziehungen, also wenn dein Order ein List[OrderItem] und eine ShippingAddress enthält, kommen alle drei zusammen zurück. Schau in die offizielle case-class-Tour für eine Auffrischung, was als Daten und was als Verhalten behandelt wird.

So benutzt du es

Drei Schritte. Gleicher Ablauf, egal ob du eine fünfzeilige case class oder eine ganze Modelldatei einfügst.

1

Füge dein Scala ein (oder lade das Beispiel)

Wirf den Code einfach in den linken Editor. Eine einzelne case class, eine gefüllte val-Instanz, mehrere Klassen oder sealed-trait-Hierarchien — der Parser kommt mit allem klar. Klick Beispiel laden, wenn du erst ein realistisches Beispiel sehen willst.

Keine Notwendigkeit, Imports zu entfernen, die package-Deklaration zu löschen oder die Scala-Syntax aufzuräumen. Lass den Code so, wie er in IntelliJ oder Metals aussieht. Einfach einfügen.

2

Konvertieren klicken

Klick den grünen Konvertieren-Button. Das Tool parst die case classes, geht durch die gefüllte Instanz und baut das XML in einem Durchgang. Ein kurzer Ladeindikator läuft währenddessen.

3

Kopiere das XML

Das rechte Panel füllt sich mit eingerücktem, wohlgeformtem XML, das jeder standardkonforme Parser akzeptiert. Kopiere es direkt in deinen Akka-HTTP-Test, Play-XML-Body, SBT-Resource-File oder wohin du es sonst brauchst.

Wann das wirklich nützlich ist

Akka-HTTP- und Play-Fixtures

Du hast eine case class für einen eingehenden XML-Request in Akka HTTP oder Play und brauchst einen realistischen Body für einen Test oder einen curl-Befehl. Klasse einfügen, XML holen, in die Spec kippen.

XML-Config für Legacy-Systeme

Eine Config-case-class mit 30 Feldern wird zu einer bearbeitungsfertigen XML-Vorlage für ältere Plattformen, die immer noch XML wollen — Mule, WebLogic, IBM MQ oder Inhouse-Tools.

Dokumentation, die zum Code passt

Generiere XML-Beispiele für ein README, ScalaDoc oder eine Confluence-Seite direkt aus deinen echten case classes, damit die Doku nie vom Modell abdriftet.

Testdaten für SOAP und scala-xml

Verwandle gefüllte Instanzen aus deinen Unit-Tests in XML-Seed-Dateien für Integrationstests, WireMock-Stubs oder Systeme, die immer noch SOAP sprechen.

Häufige Fragen

Kann ich mehrere case classes auf einmal einfügen?

Ja — füge eine ganze Datei ein. Jede top-level case class kommt mit expandierten verschachtelten Typen durch, und Companion-Object-Helfer werden ignoriert. Wenn dein Order ein List[OrderItem] enthält, tauchen beide in der Ausgabe mit der richtigen Verschachtelung auf.

Wie werden Option, None und Defaultwerte behandelt?

Ein Option[String] mit Some("x") wird zu einem normalen Element mit dem Text drin. None wird zu einem leeren Element, damit die Form des XML konsistent bleibt — nichts wird stillschweigend verworfen. Defaultwerte von case-class-Feldern werden verwendet, wenn ein Feld in der Instanz fehlt.

Was ist mit BigDecimal, Instant, UUID und den ausgefallenen numerischen Typen?

BigDecimal verliert sein Suffix und kommt als reiner Zahlentext heraus. java.time.Instant, LocalDate und LocalDateTime werden zu ISO-8601-Strings. UUID behält sein Standard-Hex-Format 8-4-4-4-12. Primitive Wrapper (Int, Long, Double, Boolean) werden zu reinem Text — die gleiche Form, die jackson-module-scala standardmäßig ausgibt.

Funktionieren List, Seq, Set und Map alle gleich?

Fast. List[T], Seq[T], Vector[T] und Set[T] werden alle zu Container-Elementen mit einem Kind pro Item, benannt nach dem Elementtyp — also wird Items: List[OrderItem] zu <Items><OrderItem/><OrderItem/></Items>. Map[K,V] wird zu einem Container aus <Entry><Key/><Value/></Entry>.

Wird mein Code gespeichert?

Dein Code wird zur Konvertierung an das Backend geschickt und nicht persistiert — wir loggen das Payload nicht. Wenn das Scala wirklich sensibel ist, wirf vorher einen kurzen Blick drauf, wie bei jedem Online-Tool.

Was, wenn das Scala implizite Konvertierungen, Type Classes oder Macros hat?

Implicits und macro-generierter Code produzieren selbst keine XML-Felder — wir arbeiten mit den deklarierten case-class-Mitgliedern. Also wird ein implicit val format oder eine @JsonCodec-Annotation effektiv ignoriert und die rohe Feldform kommt durch. Wenn der Code Syntaxfehler hat, fixe zuerst die offensichtlichen.

Andere Tools, die du brauchen könntest

Scala zu XML ist nur ein Puzzleteil. Diese Tools passen gut dazu: