Wpis z mikrobloga

#programowanie #java #spring #springboot
Piszę sobie proste api w #springboot z użyciem #kotlin . Używam biblioteki SimpleXml do deserializacji XML. W kontrolerze restowym mam prosty kod który przetwarza XML. Mam test który przechodzi:

@Test

fun wholeXmlTest(){

val xml = ClassPathResource(test.xml").file.readText()

val obj = serializer.read(Marker::class.java, xml)

Assert.assertNotSame(0, obj.country.city.placeList.size)


}


Kontroler wywala java.lang.NoClassDefFoundError: com/{...}/model/Marker

@GetMapping("/test2")

@ResponseBody

fun test2(): String {

val serializer = Persister()

val xml = ClassPathResource("test.xml").file.readText()

val marker = serializer.read(Marker::class.java, xml)

return marker.countryList.size.toString()

}

Jakies pomysly?
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Mam test który przechodzi:

Kontroler wywala java.lang.NoClassDefFoundError: com/{...}/model/Marker


@nocneszczury: Być może klasa Marker zdefiniowana w źródłach testowych? A jeśli Marker jest z biblioteki to biblioteka dodana tylko jako zależność test? Ewentualnie klasa Marker jest obecna w momencie kompilacji ale nie jest dorzucana do classpath'a.
  • Odpowiedz
@Kw4s: @Paczek_w_masle kontroler i test jest w tym samym pakiecie, Marker to zwykły data class:
kontroler rest - {...}/RestController.kt
modele - {...}/model/Marker (klasa publiczna)
test - {...}/Test.kt

@mk321: Kotlin zamiast Javy dlatego że się przyjemniej pisze, poza tym ma fajne featury których nie ma w Javie ;)
  • Odpowiedz
Kotlin zamiast Javy dlatego że się przyjemniej pisze, poza tym ma fajne featury których nie ma w Javie ;)


@nocneszczury: @SuppressWarnings: np. ma funkcję niedziałania? ;) Jakbyś napisał prawilnie w Javie...
To samo z Gradlem. Robi więcej problemów niż Maven.
I dlaczego używasz jakiejś dzikiej biblioteki SimpleXml zamiast normalnego Jacksona?

Java+Maven+Jackson i masz masę tutoriali, które działają. Ale jak chcesz hipstersko... Pewnie jest problem z kolejnością ładowania zależności
  • Odpowiedz
@mk321: na codzien pisze w Kotlinie apki na Androida, nie znam Springa i traktuje to jako naukę. Dziwi mnie po prostu fakt, że testy działają a to samo w kontrolerze restowym nie, tym bardziej że to bardzo prosty przykład.
  • Odpowiedz
@mk321: piszę inżynierkę Kotlin + Springboot. Wszystko działa, z tym, że ja skorzystałem z JSONów i domyślnego Jacksona. Ogólnie widząc ::class.java można strzelać że biblioteka nie ma żadnego wsparcia dla Kotlina, więc mogą pojawić się problemy z domyślnie finalnymi klasami itp. itd.
@nocneszczury jakiś czas temu przepisywałem mój mały projekt monolitowego serwera na Kotlina, https://github.com/gosak/pfc-server/tree/develop jest tam sporo błędów ale może coś ciekawego wyciągniesz. Tylko wejdź na branch develop
  • Odpowiedz