Lim inn Scala til venstre og klikk på "Konverter" — vi gjør det om til XMLLim inn Scala-kode

Hva dette verktøyet gjør

Hvis du noen gang har trengt en XML-payload som matcher en case class i Scala — til en Akka HTTP-fixture, en Play Framework-config, en legacy SOAP-integrasjon eller en test — har du nok skrevet mer XML for hånd enn du hadde lyst til. Lim inn Scalaen her og få velformet XML med én gang. En enkelt case class, en utfylt val, eller en hel fil med nøstede typer — alt kommer gjennom med hvert felt bevart.

Konverteren skjønner hvordan Scala faktisk ser ut når det treffer XML. BigDecimal-literaler med et suffiks til slutt kommer ut som vanlig numerisk tekst, Option[String]-felt mappes til tomme elementer når de holder None i stedet for å droppes i stillhet, List[T] og Seq[T] blir containerelementer med ett barn per item (navngitt etter elementtypen), og Map[K,V] blir til <Entry><Key/><Value/></Entry>-par. Det matcher det scala-xml eller jackson-module-scala ville sendt ut ved round-trip av en modell.

Nøstede case classes foldes ut i nøstede elementer, companion-object-konstanter ignoreres, og sealed-trait-hierarkier beholder den konkrete subtypens navn som element-tag. Du kan lime inn flere klasser samtidig — konverteren bevarer relasjonene, så hvis Order inneholder en List[OrderItem] og en ShippingAddress, kommer alle tre tilbake sammen. Ta en titt på den offisielle case class-turen for en oppfriskning av hva som behandles som data vs. atferd.

Slik bruker du det

Tre steg. Samme flyt enten du limer inn en case class på fem linjer eller en hel modellfil.

1

Lim inn Scalaen din (eller last inn eksempelet)

Slipp koden inn i venstre editor slik den er. En enkelt case class, en utfylt val-instans, flere klasser eller sealed-trait-hierarkier — parseren takler alt. Trykk på Last inn eksempel hvis du vil se et realistisk eksempel først.

Du trenger ikke å fjerne imports, slette package-deklarasjonen eller rydde opp i Scala-syntaksen. La koden stå slik den ser ut i IntelliJ eller Metals. Bare lim inn.

2

Trykk på Konverter

Klikk på den grønne Konverter-knappen. Verktøyet parser case classes, går gjennom den utfylte instansen og bygger XML-en i ett jafs. En kort lasteindikator kjører mens det jobber.

3

Kopier XML-en

Høyrepanelet fylles med innrykket, velformet XML som enhver standardkompatibel parser aksepterer. Kopier det rett inn i Akka HTTP-testen din, Play XML-body, SBT-ressursfil, eller hvor enn du trenger det.

Når det faktisk er nyttig

Akka HTTP- og Play-fixtures

Du har en case class for en innkommende XML-request i Akka HTTP eller Play og trenger en realistisk body til en test eller en curl-kommando. Lim inn klassen, få XML-en, slipp den inn i spec-en din.

XML-config for legacy-systemer

En config-case-class med 30 felt blir til en redigeringsklar XML-mal for eldre plattformer som fortsatt vil ha XML — Mule, WebLogic, IBM MQ eller egne verktøy.

Dokumentasjon som matcher koden

Generer XML-eksempler for en README, ScalaDoc eller Confluence-side rett fra de faktiske case classene dine, så dokumentasjonen aldri sklir fra modellen.

Testdata for SOAP og scala-xml

Gjør utfylte instanser fra enhetstestene dine om til XML-seed-filer for integrasjonstester, WireMock-stubber eller systemer som fortsatt snakker SOAP.

Vanlige spørsmål

Kan jeg lime inn flere case classes samtidig?

Ja — lim inn en hel fil. Hver top-level case class kommer ut med nøstede typer utfoldet og companion-object-hjelpere ignorert. Hvis Order inneholder en List[OrderItem], dukker begge opp i outputet med riktig nøsting.

Hvordan håndteres Option, None og default-verdier?

En Option[String] som holder Some("x") blir et vanlig element med teksten inni. None blir et tomt element så formen på XML-en holder seg konsistent — ingenting slippes i stillhet. Default-verdier på case class-felt brukes når et felt mangler i instansen.

Hva med BigDecimal, Instant, UUID og de rare numeriske typene?

BigDecimal mister suffikset sitt og kommer ut som vanlig numerisk tekst. java.time.Instant, LocalDate og LocalDateTime blir ISO-8601-strenger. UUID beholder standard 8-4-4-4-12 hex-format. Primitive wrappere (Int, Long, Double, Boolean) blir vanlig tekst — samme form som jackson-module-scala sender ut som standard.

Fungerer List, Seq, Set og Map på samme måte?

Nesten. List[T], Seq[T], Vector[T] og Set[T] blir alle containerelementer med ett barn per item navngitt etter elementtypen — så Items: List[OrderItem] blir <Items><OrderItem/><OrderItem/></Items>. Map[K,V] blir en container av <Entry><Key/><Value/></Entry>.

Blir koden min lagret?

Koden din sendes til backend for konvertering og lagres ikke — vi logger ikke payloaden. Er Scalaen virkelig sensitiv, kast et blikk på den før du limer inn, som med ethvert nettverktøy.

Hva om Scalaen har implicit conversions, type classes eller makroer?

Implicits og makro-generert kode produserer ikke XML-felt av seg selv — vi jobber ut fra case classens deklarerte medlemmer. Så en implicit val format eller en @JsonCodec-annotasjon ignoreres i praksis og den rå feltformen går gjennom. Har koden syntaksfeil, fiks de åpenbare først.

Andre verktøy du kanskje trenger

Scala til XML er bare én bit av puslespillet. Disse verktøyene passer godt sammen med det: