package org.atomnuke.atom.io.reader.sax; import com.rackspace.papi.commons.util.pooling.ConstructionStrategy; import com.rackspace.papi.commons.util.pooling.GenericBlockingResourcePool; import com.rackspace.papi.commons.util.pooling.Pool; import com.rackspace.papi.commons.util.pooling.ResourceConstructionException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.atomnuke.atom.io.AtomReader; import org.atomnuke.atom.io.AtomReaderFactory; /** * * @author zinic */ public final class SaxAtomReaderFactory implements AtomReaderFactory { private final SAXParserFactory parserFactory; private final Pool<SAXParser> parserPool; public SaxAtomReaderFactory() { this(SAXParserFactory.newInstance()); } public SaxAtomReaderFactory(SAXParserFactory parserFactoryInst) { this.parserFactory = parserFactoryInst; parserFactory.setNamespaceAware(true); this.parserPool = new GenericBlockingResourcePool<SAXParser>(new ConstructionStrategy<SAXParser>() { @Override public SAXParser construct() { try { return parserFactory.newSAXParser(); } catch (Exception ex) { throw new ResourceConstructionException(ex.getMessage(), ex); } } }, 2, 32); } @Override public final AtomReader getInstance() { return new SaxAtomParser(parserPool); } }