Wklej Scalę po lewej i kliknij "Konwertuj" — zamienimy ją na XMLWklej kod Scala

Co robi to narzędzie

Jeśli kiedykolwiek potrzebowałeś payloadu XML pasującego do case class w Scali — do fixture'a w Akka HTTP, configu Play Framework, starej integracji SOAP albo testu — prawdopodobnie napisałeś ręcznie więcej XML-a, niż chciałbyś. Wklej Scalę tutaj i od razu dostajesz dobrze uformowany XML. Pojedyncza case class, wypełniony val albo cały plik z zagnieżdżonymi typami — wszystko przechodzi z każdym polem zachowanym.

Konwerter rozumie, jak Scala naprawdę wygląda, kiedy trafia na XML. Literały BigDecimal z sufiksem na końcu wychodzą jako zwykły tekst liczbowy, pola Option[String] mapowane są na puste elementy, kiedy mają None, zamiast być po cichu wyrzucane, List[T] i Seq[T] stają się elementami-kontenerami z jednym dzieckiem na element (nazwanym po typie elementu), a Map[K,V] zmienia się w pary <Entry><Key/><Value/></Entry>. To pasuje do tego, co wypluwa scala-xml albo jackson-module-scala przy round-tripie modelu.

Zagnieżdżone case class rozwijają się w zagnieżdżone elementy, stałe companion objectu są ignorowane, a hierarchie sealed trait zachowują nazwę konkretnego podtypu jako tag elementu. Możesz wkleić kilka klas naraz — konwerter zachowuje relacje, więc jeśli twój Order zawiera List[OrderItem] i ShippingAddress, wszystkie trzy wracają razem. Zajrzyj do oficjalnego case class tour dla przypomnienia, co jest traktowane jako dane, a co jako zachowanie.

Jak go używać

Trzy kroki. Ten sam flow, czy wklejasz case class na pięć linii, czy cały plik modelu.

1

Wklej Scalę (lub wczytaj przykład)

Rzuć kod do lewego edytora tak jak jest. Pojedyncza case class, wypełniona instancja val, wiele klas albo hierarchie sealed trait — parserowi to wszystko pasuje. Kliknij Wczytaj przykład, jeśli chcesz najpierw zobaczyć realistyczny case.

Nie musisz usuwać importów, wyrzucać deklaracji package ani czyścić składni Scali. Zostaw kod tak, jak wygląda w IntelliJ albo Metals. Po prostu wklej.

2

Kliknij Konwertuj

Kliknij zielony przycisk Konwertuj. Narzędzie parsuje case class, przechodzi przez wypełnioną instancję i buduje XML w jednym przebiegu. W tle chodzi krótki wskaźnik ładowania.

3

Skopiuj XML

Prawy panel wypełnia się wciętym, dobrze uformowanym XML-em, który zaakceptuje każdy parser zgodny ze standardem. Skopiuj go prosto do testu Akka HTTP, body XML w Play, pliku zasobów SBT albo gdziekolwiek tego potrzebujesz.

Kiedy to naprawdę się przydaje

Fixture'y Akka HTTP i Play

Masz case class na przychodzące żądanie XML w Akka HTTP albo Play i potrzebujesz realistycznego body do testu albo komendy curl. Wklej klasę, weź XML, wrzuć do speca.

Config XML dla systemów legacy

Case class configu z 30 polami zmienia się w gotowy do edycji szablon XML dla starszych platform, które dalej chcą XML-a — Mule, WebLogic, IBM MQ albo wewnętrzne narzędzia.

Dokumentacja zgodna z kodem

Generuj przykłady XML do README, ScalaDoc albo strony na Confluence prosto z prawdziwych case class, żeby doki nigdy nie rozjechały się z modelem.

Dane testowe dla SOAP i scala-xml

Zamień wypełnione instancje z twoich unit testów w pliki XML seed dla testów integracyjnych, stubów WireMock albo systemów, które dalej mówią po SOAP-owemu.

Częste pytania

Czy mogę wkleić kilka case class naraz?

Tak — wklej cały plik. Każda case class top-level wychodzi z rozwiniętymi zagnieżdżonymi typami i zignorowanymi helperami z companion objectu. Jeśli twój Order zawiera List[OrderItem], oba pojawią się w wyjściu z właściwym zagnieżdżeniem.

Jak to obsługuje Option, None i wartości domyślne?

Option[String] trzymający Some("x") zostaje normalnym elementem z tekstem w środku. None staje się pustym elementem, żeby kształt XML-a pozostał spójny — nic nie znika po cichu. Wartości domyślne pól case class są używane, gdy w instancji brakuje danego pola.

A co z BigDecimal, Instant, UUID i tymi dziwnymi typami numerycznymi?

BigDecimal traci sufiks i wychodzi jako zwykły tekst liczbowy. java.time.Instant, LocalDate i LocalDateTime stają się stringami ISO-8601. UUID zachowuje standardowy format hex 8-4-4-4-12. Prymitywne wrappery (Int, Long, Double, Boolean) stają się zwykłym tekstem — taki sam kształt, jaki jackson-module-scala wypluwa domyślnie.

Czy List, Seq, Set i Map działają tak samo?

Prawie. List[T], Seq[T], Vector[T] i Set[T] wszystkie stają się elementami-kontenerami z jednym dzieckiem na element nazwanym po typie elementu — więc Items: List[OrderItem] staje się <Items><OrderItem/><OrderItem/></Items>. Map[K,V] staje się kontenerem <Entry><Key/><Value/></Entry>.

Czy mój kod jest zapisywany?

Twój kod trafia do backendu do konwersji i nie jest utrwalany — nie logujemy payloadu. Jeśli Scala jest naprawdę wrażliwa, rzuć okiem przed wklejeniem, jak przy każdym narzędziu online.

A jeśli Scala ma implicit conversions, type classy albo makra?

Implicity i kod generowany przez makra same z siebie nie produkują pól XML — pracujemy na zadeklarowanych członkach case class. Czyli implicit val format albo anotacja @JsonCodec jest w praktyce ignorowana i przechodzi surowy kształt pola. Jeśli kod ma błędy składniowe, najpierw popraw te oczywiste.

Inne narzędzia, które mogą się przydać

Scala na XML to tylko kawałek układanki. Te narzędzia dobrze się z nim uzupełniają: