package gov.pr.celepar.tabeliao.util; /* Este programa � licenciado de acordo com a LPG-AP (LICEN�A P�BLICA GERAL PARA PROGRAMAS DE COMPUTADOR DA ADMINISTRA��O P�BLICA), vers�o 1.1 ou qualquer vers�o posterior. A LPG-AP deve acompanhar todas PUBLICA��ES, DISTRIBUI��ES e REPRODU��ES deste Programa. Caso uma c�pia da LPG-AP n�o esteja dispon�vel junto com este Programa, voc� pode contatar o LICENCIANTE ou ent�o acessar diretamente: http://www.celepar.pr.gov.br/licenca/LPG-AP.pdf Para poder USAR, PUBLICAR, DISTRIBUIR, REPRODUZIR ou ALTERAR este Programa � preciso estar de acordo com os termos da LPG-AP */ import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** * Classe utilitaria com funcoes de tratamento de XML * * @author Emerson Sachio Saito - GIC/CELEPAR * */ public class XmlSigUtil { private XmlSigUtil(){ } /** * Criar um elemento XML * @param doc -> Arquivo xml para assinatura * @param tag -> nome da tag para a qual sera gerado o elemento * @param prefix -> prefixo do elemento * @param nsURI -> Uri da tag * @return Element -> org.w3c.dom.Element * @see org.w3c.dom.Element */ public static Element criarElemento(Document doc, String tag, String prefix, String nsURI) { String qName = prefix == null ? tag : prefix + ":" + tag; return doc.createElementNS(nsURI, qName); } /** * Cria um documento XML vazio * @return Document -> novo documento XML * @throws Exception */ public static Document criarDocumentoXMl() throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db; db = dbf.newDocumentBuilder(); Document doc = db.newDocument(); return doc; } /** * Metodo para carregar o arquivo XML assinado e garantir que o XML esta bem formatado. * * @param xmlFile arquivo XML assinado. * * @return org.w3c.dom.Document * @throws ParserConfigurationException * @throws IOException * @throws SAXException */ public static Document carregarArquivoXML(InputStream xmlFile) throws ParserConfigurationException, SAXException, IOException{ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); Document doc = null; DocumentBuilder db; db = dbf.newDocumentBuilder(); doc = db.parse(xmlFile); return doc; } /** * Metodo para carregar uma string contendo um arquivo xml assinado. * * @param xmlString -> XML assinado. * * @return org.w3c.dom.Document * @throws ParserConfigurationException * @throws IOException * @throws SAXException */ public static Document carregarArquivoXML(String xmlString) throws ParserConfigurationException, SAXException, IOException{ DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); Document doc = null; DocumentBuilder db; db = dbf.newDocumentBuilder(); doc = db.parse(new InputSource(new StringReader(xmlString))); return doc; } /** * Metodo para carregar o arquivo XML assinado e garantir que o XML esta bem formatado. * * @param xmlSource arquivo XML assinado. * * @return org.w3c.dom.Document * @throws ParserConfigurationException * @throws IOException * @throws SAXException */ public static Document carregarArquivoXML(InputSource xmlSource) throws ParserConfigurationException, SAXException, IOException{ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); Document doc = null; DocumentBuilder db; db = dbf.newDocumentBuilder(); doc = db.parse(xmlSource); return doc; } /** * Revalida um objeto Document * @param documento * @return Document * @throws ParserConfigurationException * @throws IOException * @throws SAXException * @throws TransformerFactoryConfigurationError * @throws TransformerException * @throws TransformerConfigurationException */ public static Document revalidaDocument(Document documento) throws ParserConfigurationException, SAXException, IOException, TransformerConfigurationException, TransformerException, TransformerFactoryConfigurationError{ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); Document doc = null; DocumentBuilder db; db = dbf.newDocumentBuilder(); InputSource is = converterDoc(documento); if (is != null){ doc = db.parse(is); } return doc; } /** * Classe utilitaria para converter Document em InputSource * @param documento * @return InputSource * @throws TransformerFactoryConfigurationError * @throws TransformerException * @throws TransformerConfigurationException */ private static InputSource converterDoc (Document documento) throws TransformerConfigurationException, TransformerException, TransformerFactoryConfigurationError{ Document doc = documento; DOMSource source = new DOMSource(doc); StringWriter xmlAsWriter = new StringWriter(); StreamResult result = new StreamResult(xmlAsWriter); TransformerFactory.newInstance().newTransformer().transform(source, result); StringReader xmlReader = new StringReader(xmlAsWriter.toString()); InputSource iS = new InputSource(xmlReader); return iS; } }