Mam architekturę serwer-klient, w której klient wysyła XML do serwera, który odczytuje go i generuje z niego plik PDF i odsyła go do klienta.Odsłonięcie gniazda wejściowego w gniazdku zamyka gniazdko?
Po stronie klienta:
JAXBElement<Xml> xml = ...
Socket sock = ...
Marshaller marshaller = ...
marshaller.marshal(xml, sock.getOutputStream());
sock.shutdownOuput();
Tymczasem po stronie serwera:
ServerSocket server = ...
Socket client = server.accept();
Unmarshaller unmarshaller = ...
// client.isClosed() -> false
JAXBElement<Xml> xml =
(JAXBElement<Xml>)) unmarshaller.unmarshall(client.getInputStream());
// client.isClosed() -> true
Pdf pdf = new Pdf(xml);
client.getOutputStream().write(pdf.toBytes());
// "socket is closed" IOException is thrown
Jeśli nie wycofać klienta InputStream
(po stronie serwera) i po prostu odesłać manekina PDF to wszystko idzie gładko. Tak więc, muszę założyć, że Unmarshaller
zamyka podany InputStream
, tym samym niejawnie zamykając klienta Socket
rujnując mój dzień ...
Czy masz pomysł na rozwiązanie tego problemu?
Dziękujemy, Twój rozwiązanie działa jak urok! :) –