当我将Java对象编组为XML时,在关闭根标记后会添加一些额外的字符。
以下是在从XML解组到文件后保存生成的java对象的方法:
public void saveStifBinConv(ConversionSet cs, String xmlfilename) {
FileOutputStream os = null;
try {
os = new FileOutputStream(xmlfilename);
this.marshaller.marshal(cs, new StreamResult(os));
}
catch (IOException e) {
log.fatal("IOException when marshalling STIF Bin Conversion XML file");
throw new WmrFatalException(e);
}
finally {
if (os != null) {
try {
os.close();
}
catch (IOException e) {
log.fatal("IOException when closing FileOutputStream");
throw new WmrFatalException(e);
}
}
}
}
在关闭根标记的标记后填充额外字符。
添加的字符是XML中的一些字符。示例:tractor-to-type><bin-code>239</bin-code><allowed>YES</allowed></extractor-to></extractor-mapping><extractor-mapping><e
我使用Spring OXM的Jaxb2Marshaller
和JAXB 2.
谢谢;)
答案 0 :(得分:1)
这是因为我在保存XML
时执行了两个步骤:
XML
封送到FileOutputStream
,从而生成XML
个文件FileInputStream
文件上打开XML
并将FileInputStream
写入ServletOutputStream
必定会发生buffer underflow
。
<强>解决方案强>
将XML
直接编组为ServletOutputStream
(供网络用户下载XML
文件)。
JAXBContext jc = JAXBContext.newInstance(pkg);
Marshaller m = jc.createMarshaller();
m.marshal(cs, os);
其中os
是ServletOutputStream
。
//return an application file instead of html page
response.setContentType("text/xml");//"application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename="
+ xmlFilename);
OutputStream out = null;
out = response.getOutputStream();