我正在尝试使用带有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
的引用?我的意思是每次unmarshall行动我都需要一个新的xml阅读器吗?
答案 0 :(得分:0)
将SAX与JAXB一起使用时,您可以使用UnmarshallerHandler
而不是Unmarshaller
。
UnmarshallerHandler unmarshallerHandler = unmarshaller.getUnmarshallerHandler();
reader.setContentHandler(unmarshallerHandler);
reader.parse(xml);
Foo foo = (Foo) unmarshallerHandler.getResult();
UnmarshallerHandler
不是线程安全的,所以请确保没有线程共享它。您可以使用相同的XMLReader