У меня есть сервер-клиентская архитектура, где клиент отправляет XML на сервер, который читает его, генерирует из него PDF-файл и отправляет его обратно клиенту.
На стороне клиента:
JAXBElement<Xml> xml = ...
Socket sock = ...
Marshaller marshaller = ...
marshaller.marshal(xml, sock.getOutputStream());
sock.shutdownOuput();
Между тем на стороне сервера:
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
Если я не отменю маршализацию InputStream
(на стороне сервера) клиента и просто отправляю фиктивный PDF, тогда все идет гладко,Итак, я должен предположить, что Unmarshaller
закрывает InputStream
, который он дал, таким образом, неявно закрывая клиента Socket
, разрушая мой день ...
Есть идеи по решению этого вопроса?