/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.gses.webui.utils; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.util.jar.Attributes; import java.util.jar.JarInputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.apache.commons.lang.StringUtils; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; public class JarParseUtils { public static boolean isOsgiComponent(JarInputStream jarStream){ Attributes mainAttributes = jarStream.getManifest().getMainAttributes(); String serviceComponent = mainAttributes.getValue("Service-Component"); String exportPackage = mainAttributes.getValue("Export-Package"); String importPackage = mainAttributes.getValue("Import-Package"); return StringUtils.isNotEmpty(serviceComponent) && StringUtils.isNotEmpty(exportPackage) && StringUtils.isNotEmpty(importPackage); } public static Node getChildForNlByNames(NodeList nl, String... names) { Node result = null; NodeList childNodes = nl; for(String name : names){ result = getChildForNlByName(childNodes, name); childNodes = result.getChildNodes(); if(childNodes == null){ return null; } } return result; } private static Node getChildForNlByName(NodeList nl, String name) { for(int i = 0 ; i <= nl.getLength(); i++){ if(name.equals(nl.item(i).getLocalName())){ return nl.item(i); } } return null; } public static Document readXml(InputStream is) throws SAXException, IOException, ParserConfigurationException { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(false); dbf.setIgnoringComments(false); dbf.setIgnoringElementContentWhitespace(true); dbf.setNamespaceAware(true); // dbf.setCoalescing(true); // dbf.setExpandEntityReferences(true); DocumentBuilder db = dbf.newDocumentBuilder(); db.setEntityResolver(new NullResolver()); // db.setErrorHandler( new MyErrorHandler()); return db.parse(is); } } class NullResolver implements EntityResolver { public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { return new InputSource(new StringReader("")); } }