私はサーバークライアントアーキテクチャを使用しており、クライアントはXMLをサーバーに送信します。サーバーは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
て私の一日を台無しにします...
これを解決するためのアイデアはありますか?