consdata.com
Blog techniczny Blog biznesowy Dział HR
EN
jaxb

Czy wiesz jak poprawnie tworzyć kontekst JAXB i instancję Marshallera/Unmarshallera?

author Jakub Wilczewski
7 listopada 2022

W naszych projektach często używamy JAXB w celu mapowania danych przesyłanych kopertach SOAP-owych na obiekty javowe. Aby wykonać takie mapowanie należy:

Utworzyć kontekst JAXB

JAXBContext jaxbContext = JAXBContext.newInstance(User.class);

Utworzyć marshaller/unmarshaller (w zależności do tego czy mapujemy obiekt javy na xml, czy w drugą stronę):

Marshaller marshaller = jaxbContext.createMarshaller();

// lub

Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

Wykonać mapowanie:

Writer writer = new StringWriter();
marshaller.marshal(user, writer);

// lub

JAXBElement<User> userElement = unmarshaller.unmarshal(source(xml), User.class);

Ważne!

Tworzenie kontekstu JAXB jest operacją czasochłonną, a doświadczenie pokazuje, że czas wywołania znacznie wzrasta wraz z liczbą wątków, które próbują wykonać współbieżnie tę operację. Dlatego zgodnie z dokumentacją, nie należy tworzyć nowej instancji kontekstu przy każdym wywołaniu mapowania. Kontekst JAXB jest bezpieczny przy współbieżnym wywołaniu. Należy go tworzyć np. w konstruktorze, metodzie inicjalizującej, jako statyczne pole klasy: To avoid the overhead involved in creating a JAXBContext instance, a JAXB application is encouraged to reuse a JAXBContext instance. An implementation of abstract class JAXBContext is required to be thread-safe, thus, multiple threads in an application can share the same JAXBContext instance.

Bardzo ważne!

W przeciwieństwie do kontekstu JAXB sam marshaller/unmarshaller nie jest bezpieczny przy współbieżnym wywołaniu! Operację tworzenia marshallera i unmarshallera trzeba powtarzać przy każdym wywołaniu. Posługiwanie się tym samym obiektem może prowadzić do nieprzewidzianych rezultatów przy większej niż jeden liczbie wątków. Co więcej, nie wyłapiemy tego błędu w testach jednostkowych i testach funkcjonalnych.

Jeżeli podczas testów wydajnościowych okaże się, że operacje tworzenia marshallera/unmarshallera zabierają zbyt dużo czasu można rozważyć utworzenie puli takich obiektów. Musi być ona zaimplementowana w taki sposób, aby różne wątki nie używały tego samego obiektu w tym samym czasie.

Najnowsze wpisy

  • Czy wiesz, że w Angularze istnieje sygnałowa alternatywa @ViewChild?
  • Czy wiesz, jak wykonać profilowanie aplikacji za pomocą JDK Flight Recorder?
  • Czy wiesz, jak analizować i optymalizować zależności w bundle?
Dołącz do nas

  • SENIOR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 14 900 - 20 590 PLN brutto
    B2B 19 680 - 27 220 PLN netto
  • REGULAR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 11 300 - 15 900 PLN brutto
    B2B 14 950 - 21 000 PLN netto
  • ZOBACZ WSZYSTKIE OGŁOSZENIA

Podobne wpisy

post-image
angular

Czy wiesz, że w Angularze istnieje sygnałowa alternatywa @ViewChild?

Pokażę sygnałową alternatywę dla @ViewChild w Angularze i jej zalety względem klasycznego podejścia z AfterViewInit.

author
Mariusz Bartosik 4 sie 2026
post-image
jdk-flight-recorder

Czy wiesz, jak wykonać profilowanie aplikacji za pomocą JDK Flight Recorder?

Podczas przeprowadzania testów wydajnościowych czasami napotykamy sytuację, w której ich wyniki nie są zadowalające. Pojawia się wtedy pytanie, jak sprawdzić, co dzieje się wewnątrz aplikacji i na co zużywa ona...

author
Jakub Wilczewski 24 lip 2026
post-image
CommonJS

Czy wiesz, jak analizować i optymalizować zależności w bundle?

Pokażę, jak analizować plik stats.json i skutecznie zmniejszać rozmiar bundle'a w Angularze poprzez optymalizację importów CommonJS oraz wykorzystanie ESM (lodash-es).

author
Aleksander Burzec 16 cze 2026
Dołącz do nas

  • SENIOR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 14 900 - 20 590 PLN brutto
    B2B 19 680 - 27 220 PLN netto
  • REGULAR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 11 300 - 15 900 PLN brutto
    B2B 14 950 - 21 000 PLN netto
  • ZOBACZ WSZYSTKIE OGŁOSZENIA
consdata.com
  • Kontakt

    • sales@consdata.com
    • +48 61 41 51 000

  • Biuro

    • K9Office
      Krysiewicza 9/14
      61-825 Poznań
      Polska

  • Rozwiązania

    • Eximee
    • Kouncil
  • Blog Dołącz do nas
Copyright © 2024 Consdata. All rights reserved. Privacy Policy & Cookies
Chcemy używać plików cookie oraz skryptów podmiotów trzecich do polepszania funkcjonowania tej strony Zgadzam się