通过套接字恢复XML数据(尝试通过套接字inputStream中的jaxb解组)

时间:2018-01-26 17:43:34

标签: java xml sockets jaxb

我以这种方式通过套接字发送一些XML数据:

Marshaller marshaller = JAXBContext.newInstance(Test.class).createMarshaller();
OutputStream outputStream = socket.getOutputStream();
marshaller.marshal(testObject, outputStream);

另一方面,我试图解散:

JAXBContext jaxbContext = JAXBContext.newInstance(Test.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
InputStream inputStream = socket.getInputStream();
Test testObject = (Test) unmarshaller.unmarshal(inputStream);

我得到了这个例外:

  

[org.xml.sax.SAXParseException; lineNumber:1; columnNumber:204;处理指令目标匹配" [xX] [mM] [lL]"是不允许的。]

要检查生成的XML的格式,我将InputStreamOutputStream更改为FileInputStreamFileOutputStream,并将生成的文件从客户端手动复制到服务器端。解组是好的,所以格式是正确的。

为什么我会收到错误以及如何解决?

更新:

我发现异常抛出因为Unmarshaling无法在服务器端停止。在客户端我通过调度程序发送数据,所以在第二次服务器获取第二个标签和格式出错之后。我读了这个解决方案: https://community.oracle.com/blogs/kohsuke/2005/07/15/socket-xml-pitfall 我使用socket.shutdownOutput();发送EOS,但我希望多次发送数据,这样我就可以了。

0 个答案:

没有答案