我正在尝试使用带有SAX的JAXB将xml解组为java对象。我在构造函数中编写了这段代码。
logger.debug("Initializing jaxb...");
try {
jaxbContext = JAXBContext.newInstance(ProductInventory.class);
jaxbUnmarshaller = jaxbContext.createUnmarshaller();
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
reader = saxParserFactory.newSAXParser().getXMLReader();
EntityResolver entityResolver = new EntityResolver() {
@Override
public InputSource resolveEntity(String publicId,
String systemId) {
return new InputSource(new StringReader(""));
}
};
reader.setEntityResolver(entityResolver);
logger.debug("Successfully initialized jaxb.");
} catch (JAXBException | SAXException | ParserConfigurationException e) {
logger.error("Exception while initializing JAXB", e);
}
当多个请求到来时,reader
对象会有什么问题吗?我必须总是获得reader
的引用吗?我的意思是,对于每个解组操作,我必须获得一个新的xml阅读器吗?
发布于 2013-12-10 03:57:07
在使用SAX和JAXB时,您利用的是UnmarshallerHandler
而不是Unmarshaller
。
UnmarshallerHandler unmarshallerHandler = unmarshaller.getUnmarshallerHandler();
reader.setContentHandler(unmarshallerHandler);
reader.parse(xml);
Foo foo = (Foo) unmarshallerHandler.getResult();
UnmarshallerHandler
不是线程安全的,所以请确保没有线程共享它。您可以使用相同的XMLReader
解析多个XML文档。
https://stackoverflow.com/questions/20464911
复制相似问题