【发布时间】:2011-10-11 14:22:29
【问题描述】:
我有一个服务器-客户端架构,其中客户端将 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 毁了我的一天......
有解决这个问题的想法吗?
【问题讨论】:
标签: java sockets xml-serialization jaxb jaxb2