我正在尝试使用JAXB取消一些我首先使用xjc创建的XML.我不想做就解组任何验证,但即使我已经停用根据与JAXB文档验证u.setSchema(null);,但这并没有阻止了FileNotFoundException,当它试图运行,并不能找到的模式被抛出.
JAXBContext jc = JAXBContext.newInstance("blast");
Unmarshaller u = jc.createUnmarshaller();
u.setSchema(null);
return u.unmarshal(blast)
Run Code Online (Sandbox Code Playgroud)
我已经看到类似的问题,通过设置apache属性http://apache.org/xml/features/validation/schema来禁用SAX解析验证false,但是我无法让Unmarshaller使用我自己的sax解析器.
我有一个8兆的文件.使用JAXB进行编组需要1082ms,使用DOM需要862ms,使用SAX需要438ms.这是使用JDK 1.6的所有默认值,没有使用诸如使用woodstox之类的额外配置.
为了从JAXB获得更好的性能,我试着让它使用SAX解析...
FileReader fr = new FileReader("myfile.xml");
JAXBContext jc = JAXBContext.newInstance(MyObjectList.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
XMLInputFactory xmlif = XMLInputFactory.newInstance();
XMLEventReader xmler = xmlif.createXMLEventReader(fr);
long beginTime = System.currentTimeMillis();
MyObjectList obj = (MyObjectList)unmarshaller.unmarshal(xmler);
long endTime = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)
这使它变得更慢 - 3207ms.
我的问题是:1.如何让JAXB更快?2.我怎样才能100%确定它使用的底层解析机制?