Wpis z mikrobloga

Tworzę webservice z poradnika http://www.samouczekprogramisty.pl/rest-web-service-z-java-ee-czesc-2/#utworzenie-rezerwacji
Tutaj kod: https://github.com/SamouczekProgramisty/KursAplikacjeWebowe/tree/master/07_rest_crud/src/main/java/pl/samouczekprogramisty/kursaplikacjewebowe/rest
Uruchamiam na TomEE 9.0.12

Przy wykonywaniu post na ścieżce http://localhost:8080/rest/reservation i JSONem (odpowiedzialna metoda createReservation )

{
"name": "Marcin",
"tableNumber": 1,
"start": "2018-01-22T20:00",
"end": "2018-01-22T21:20"
}

dostaję kod 500, z błędem

javax.servlet.ServletException: Error processing webservice request
org.apache.tomee.webservices.CXFJAXRSFilter.doFilter(CXFJAXRSFilter.java:98)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:65)

oraz

java.lang.NullPointerException
org.apache.johnzon.mapper.access.Meta.getAnnotation(Meta.java:54)
...
org.apache.tomee.webservices.CXFJAXRSFilter.doFilter(CXFJAXRSFilter.java:94)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:65)

Dodam, że przy próbie zrobienia PUT na http://localhost:8080/rest/reservation/0 (update rezerwacji - metoda updateReservation )
wywala kod 500 a powinno wywalić 404 gdyby nie istniała rezerwacja (czyli bardziej wskazuje, że w ogóle nie jest wstrzyknięta zależność z rezerwacjami niż, że lista rezerwacji jest ale nie zawiera rezerwacji 0)

Podejrzewam adnotację @Valid (która występuje w obu przypadkach błędu POST na ../reservation i PUT na .../reservation/0), chociaż wydawało mi się, że JSON daje wszystkie rzeczy poprawne (próbuje przez narzędzie w firefoxie i curl)

Druga opcja to że klasa ReservationDAO nie jest poprawnie wstrzyknięta

Jaki pomysł jak to naprawić?

#java #programowanie
  • 10
@kebab-case: w przypadku serwera aplikacji to co wkleiłem z loga nie wystarczy? Bo w sumie nie debugowałem nigdy apki instalowanej na serwerze JavaEE, tylko patrzyłem w logi
@Lewo: ło panie XD. Robisz tak, że odpalasz aplikacje w trybie debug. Ten zielony żuczek klikasz. Następnie znajdujesz metodę która chcesz obserwować i klikasz obok danej linijki, między numerem linii a textarea. Pojawi się czerwona kropka. To breakpoint, tam zatrzyma się program i możesz podejrzeć jaka wartość mają zmienne, ewaluować wyrażenia, sprawdzić bieg programu etc. Więc daj parę tych kropek na metodzie która jest odpowiedzialna za intercepcję tego jsona, prześledz bieg
@Przegrywek123: @kebab-case: gdzie w tym kodzie dać breakpointy?
jak ustawiłem w metodzie createReservation (odpowiedzialnej za POST) w paru miejscach to nawet tej metody nie wywołało, tylko wywaliło błąd 500. Natomiast dla zwykłego GETa weszło do metody.
Interpretacji JSONa żadnej nie pisałem, cytat z tutka

Dzięki adnotacji @Produces JAX-RS wymusza format odpowiedzi. W moim przypadku jest to JSON.

Kontener automatycznie przekonwertuje instancję klasy Reservation do formatu JSON. Dzieje się to dzięki
@Przegrywek123: @kebab-case:
dzięki za pomoc. nauczyłem się to debugować :D I udało się rozwiązać problem.

Nie umiałem ustawić breakpointa przy parsowaniu jsona (umiem tylko w kodzie ze swojego projektu, nie biblioteki).
Ale przeczytałem jeszcze raz logi i doszedłem do
https://github.com/apache/johnzon/blob/e427b8e1c8d082651e457829da7d85655247bef4/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/Meta.java#L54
I tutaj wywalało nullpointerexception, docsy johnzona nic nie mówiły, więc stwierdziłem, że wywołuje coś tam na pakiecie a mój program nie był w pakiecie (tzn był z defaultowym), więc jak