Демонстрация InputStream сокета закрывает сокет?

У меня есть архитектура сервер-клиент, в которой клиент отправляет 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 , разрушая мой день ...

Любой идея решения этой проблемы?

9
задан Kohányi Róbert 23 July 2011 в 10:12
поделиться