/******************************************************************************* * Copyright (c) 2012-2016 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.everrest.core.impl.provider; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; import javax.xml.transform.Source; import javax.xml.transform.Templates; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.sax.TemplatesHandler; import java.io.IOException; import static javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING; public class TemplatesParser { private EntityResolver resolver; public void setResolver(EntityResolver resolver) { this.resolver = resolver; } public Templates parseTemplates(Source source) throws TransformerConfigurationException, SAXException, IOException { InputSource inputSource = SAXSource.sourceToInputSource(source); if (inputSource == null) { throw new RuntimeException("Unable convert to Input Source"); } SAXTransformerFactory saxTransformerFactory = createFeaturedSaxTransformerFactory(); TemplatesHandler templateHandler = saxTransformerFactory.newTemplatesHandler(); XMLReader xmlReader = XMLReaderFactory.createXMLReader(); if (resolver != null) { xmlReader.setEntityResolver(resolver); } xmlReader.setContentHandler(templateHandler); xmlReader.parse(inputSource); Templates templates = templateHandler.getTemplates(); if (templates == null) { throw new RuntimeException("Unable create templates from given source"); } return templates; } private SAXTransformerFactory createFeaturedSaxTransformerFactory() throws TransformerConfigurationException { SAXTransformerFactory saxTransformerFactory = (SAXTransformerFactory)SAXTransformerFactory.newInstance(); saxTransformerFactory.setFeature(FEATURE_SECURE_PROCESSING, true); return saxTransformerFactory; } }