Wpis z mikrobloga

Cześć. Mam problem z SOAP Web Services w Javie. Mam dwie tabele: Flight i Ticket - relacja jeden do wielu oraz metodę w web serwisie, która zwraca konkretny Flight. Niestety działa to tylko, gdy do Flight nie jest przypisany żaden Ticket. Gdy Flight posiada jakieś Tickety i odwrotnie to generowana jest jakaś nieprawidłowa odpowiedź.

Używam Hibernate i jak wyświetlam sobie pobrane dane w konsoli to jest ok, czyli mapowanie tabel na klasy działa.

Tak wygląda odpowiedź serwera, gdy Flight nie ma żadnych Ticketów: LINK
Tak, gdy Flight posiada chociaż jeden Ticket: LINK
Metoda zwracająca Flight: pastebin

Nie ma żadnych błędów w konsoli po stronie serwera. Macie jakieś pomysły jak to naprawić?

#naukaprogramowania #programowanie #webdev #java
  • 20
@bananowy_szejk Ciekawe, odpowiedz jest niby chunked, ale nie zawiera chunków. Ani też content-length. Podejrzewam, że klient lub serwer tnie połączenie przed wysłaniem całości. Jesteś pewien, że nie połykasz wyjątków po stronie serwera (to by tłumaczyło pustą konsolę)? Podepnij debugger i przejdź się po metodzie, którą tu wysłałeś
@UschiOtze Dobra, teraz widzę, że połykasz wyjątek, wrzucając go na konsolę (słabe to, ale w tak krótkim programie obleci. Protip: użyj loggera Protip2: łap wyjątki w Web method i zrób obsługę błędów w soapie)
@UschiOtze:
Jednak jest różnica, zwracane są obiekty, ale i tak odpowiedź wygląda tak samo:

[models.Ticket@29108192, models.Ticket@54cc432e, models.Ticket@7f3b46df, models.Ticket@7f603606, models.Ticket@5fd13ef6, models.Ticket@7164fe63, models.Ticket@3bdc6e15, models.Ticket@7df762da]
EDIT: Może to ma coś wspólnego z rekursywnym wywyływaniem, Flight ma tickety, Ticket ma flighta i tak w koło. Tylko wtedy powinien być jakiś exception czy coś.
@bananowy_szejk I prawidłowo - tak to jest skonfigurowane w hbm.xml

Gdyby Hibernate rzeczywiście rozwijał to w nieskończoność, to już dawno poleciałby out of memory error. Sądzę, że zarówno metoda z repozytorium jak i entry point websrvice’u kończą się prawidłowo, natomiast problem występuje po zakończeniu entry pointa, kiedy wynik zapytania pakowany jest do xmla
@cyfron_v2: Wzoruję się na tym poradniku: link.
W klasie Flight dodałem @XmlTransient przy liście powiązanych biletów, w klasie Ticket dodałem @XmlElement przy powiązanym Flight. No i cały czas zwraca pusty Flight, mimo iż w konsoli jest normalnie obiekt klasy Flight.
Gdy miałem odwrotnie (@XmlTransient przy powiązanym Flight w klasie Ticket i @XmlElement i wrapper przy liście Ticketów w klasie Flight) to zwracało mi normalnie Flight z listą powiązanych Ticketów.

Klasa
Pobierz bananowyszejk - @cyfronv2: Wzoruję się na tym poradniku: link.
W klasie Flight dodał...
źródło: comment_LvgUnt9M7O3MMeqoct2MXFKGbrYXLL6w.jpg