package org.atomnuke.atom.io.reader.sax; import com.rackspace.papi.commons.util.pooling.Pool; import com.rackspace.papi.commons.util.pooling.ResourceContext; import com.rackspace.papi.commons.util.pooling.ResourceContextException; import java.io.InputStream; import javax.xml.parsers.SAXParser; import org.atomnuke.atom.io.AtomReadException; import org.atomnuke.atom.io.AtomReader; import org.atomnuke.atom.io.ReaderResult; /** * * @author zinic */ public class SaxAtomParser implements AtomReader { private final Pool<SAXParser> parserPool; public SaxAtomParser(Pool<SAXParser> parserPool) { this.parserPool = parserPool; } @Override public ReaderResult read(final InputStream source) throws AtomReadException { try { return parserPool.use(new ResourceContext<SAXParser, ReaderResult>() { @Override public ReaderResult perform(SAXParser parser) { try { final AtomHandler handler = new AtomHandler(parser.getXMLReader()); parser.parse(source, handler); return handler.getResult(); } catch (Exception ex) { throw new ResourceContextException(ex.getMessage(), ex); } } }); } catch (ResourceContextException e) { throw new AtomReadException(e.getMessage(), e.getCause()); } } }