我以这种方式通过套接字发送一些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的格式,我将InputStream
和OutputStream
更改为FileInputStream
和FileOutputStream
,并将生成的文件从客户端手动复制到服务器端。解组是好的,所以格式是正确的。
为什么我会收到错误以及如何解决?
更新:
我发现异常抛出因为Unmarshaling无法在服务器端停止。在客户端我通过调度程序发送数据,所以在第二次服务器获取第二个标签和格式出错之后。我读了这个解决方案: https://community.oracle.com/blogs/kohsuke/2005/07/15/socket-xml-pitfall 我使用socket.shutdownOutput();发送EOS,但我希望多次发送数据,这样我就可以了。