Scala til XML-konverter
Indsæt Scala case classes eller objekter. Få ren XML tilbage.
Hvad dette værktøj gør
Hvis du nogensinde har haft brug for en XML-payload, der matcher en case class i Scala — til en Akka HTTP-fixture, en Play Framework-config, en legacy SOAP-integration eller en test — har du sikkert skrevet mere XML i hånden, end du havde lyst til. Indsæt Scalaen her og få velformet XML med det samme. En enkelt case class, en udfyldt val, eller en hel fil med indlejrede typer — det hele kommer igennem med hvert felt bevaret.
Konverteren forstår, hvordan Scala faktisk ser ud, når det rammer XML. BigDecimal-literaler med et suffiks til sidst kommer ud som almindelig numerisk tekst, Option[String]-felter mapper til tomme elementer, når de indeholder None, i stedet for at blive smidt ud i stilhed, List[T] og Seq[T] bliver container-elementer med ét barn pr. item (opkaldt efter elementtypen), og Map[K,V] bliver til <Entry><Key/><Value/></Entry>-par. Det matcher, hvad scala-xml eller jackson-module-scala ville udsende ved round-trip af en model.
Indlejrede case classes foldes ud i indlejrede elementer, companion-object-konstanter ignoreres, og sealed-trait-hierarkier beholder den konkrete subtypes navn som element-tag. Du kan indsætte flere klasser ad gangen — konverteren bevarer relationerne, så hvis din Order indeholder en List[OrderItem] og en ShippingAddress, kommer alle tre tilbage sammen. Kig i den officielle case class-tour for en genopfriskning af, hvad der behandles som data vs. adfærd.
Sådan bruger du det
Tre trin. Samme flow, uanset om du indsætter en fem liniers case class eller en hel modelfil.
Indsæt din Scala (eller hent eksemplet)
Smid koden ind i den venstre editor, som den er. En enkelt case class, en udfyldt val-instans, flere klasser eller sealed-trait-hierarkier — parseren tager det hele. Tryk på Hent eksempel, hvis du først vil se et realistisk eksempel.
Du behøver ikke fjerne imports, slette package-deklarationen eller rydde op i Scala-syntaksen. Lad koden stå, som den ser ud i IntelliJ eller Metals. Bare indsæt.
Tryk på Konverter
Klik på den grønne Konverter-knap. Værktøjet parser case classes, gennemgår den udfyldte instans og bygger XML'en i én omgang. En kort loader kører imens.
Kopier XML'en
Højre panel fyldes med indrykket, velformet XML, som enhver standardkompatibel parser accepterer. Kopier det direkte ind i din Akka HTTP-test, Play XML-body, SBT-ressourcefil, eller hvor du nu har brug for det.
Hvornår det faktisk er nyttigt
Akka HTTP- og Play-fixtures
Du har en case class til en indgående XML-request i Akka HTTP eller Play og mangler en realistisk body til en test eller en curl-kommando. Indsæt klassen, få XML'en, smid den i din spec.
XML-config til legacy-systemer
En config-case-class med 30 felter bliver til en redigeringsklar XML-skabelon til ældre platforme, der stadig vil have XML — Mule, WebLogic, IBM MQ eller hjemmebyggede værktøjer.
Dokumentation, der matcher koden
Generer XML-eksempler til en README, ScalaDoc eller Confluence-side direkte fra dine rigtige case classes, så dokumentationen aldrig driver væk fra modellen.
Testdata til SOAP og scala-xml
Lav udfyldte instanser fra dine unit tests om til XML-seed-filer til integrationstests, WireMock-stubs eller systemer, der stadig taler SOAP.
Typiske spørgsmål
Kan jeg indsætte flere case classes ad gangen?
Ja — indsæt en hel fil. Hver top-level case class kommer ud med indlejrede typer foldet ud og companion-object-helpers ignoreret. Hvis din Order indeholder en List[OrderItem], dukker begge op i outputtet med den rigtige indlejring.
Hvordan håndterer den Option, None og defaultværdier?
En Option[String] med Some("x") bliver til et almindeligt element med teksten indeni. None bliver til et tomt element, så formen på XML'en forbliver konsistent — intet smides ud i stilhed. Defaultværdier på case class-felter bruges, når et felt mangler i instansen.
Hvad med BigDecimal, Instant, UUID og de sære numeriske typer?
BigDecimal taber sit suffiks og kommer ud som almindelig numerisk tekst. java.time.Instant, LocalDate og LocalDateTime bliver ISO-8601-strenge. UUID beholder sit standard 8-4-4-4-12-hexformat. Primitive wrappers (Int, Long, Double, Boolean) bliver til almindelig tekst — samme form, som jackson-module-scala udsender som standard.
Virker List, Seq, Set og Map alle på samme måde?
Næsten. List[T], Seq[T], Vector[T] og Set[T] bliver alle til container-elementer med ét barn pr. item navngivet efter elementtypen — så Items: List[OrderItem] bliver <Items><OrderItem/><OrderItem/></Items>. Map[K,V] bliver en container af <Entry><Key/><Value/></Entry>.
Bliver min kode gemt?
Din kode sendes til backenden til konvertering og gemmes ikke — vi logger ikke payloaden. Er Scalaen virkelig følsom, så kig den lige igennem, før du indsætter, som med ethvert online-værktøj.
Hvad hvis Scalaen har implicit conversions, type classes eller makroer?
Implicits og makro-genereret kode producerer ikke XML-felter af sig selv — vi arbejder ud fra case classens deklarerede medlemmer. Så en implicit val format eller en @JsonCodec-annotation bliver reelt ignoreret, og den rå feltform kommer igennem. Har koden syntaksfejl, så ret de åbenlyse først.
Andre værktøjer, du måske kan bruge
Scala til XML er kun ét stykke af puslespillet. Disse værktøjer passer godt sammen med det: