private static boolean isEmptyBeansXml(final InputStream is) throws IOException, ParserConfigurationException, SAXException {
return isEmpty(is, "beans");
}
private static boolean isEmpty(final InputStream is, final String rootElement) throws IOException, ParserConfigurationException, SAXException {
final LengthInputStream in = new LengthInputStream(is);
final InputSource inputSource = new InputSource(in);
final SAXParser parser;
final Thread thread = Thread.currentThread();
final ClassLoader original = thread.getContextClassLoader();
thread.setContextClassLoader(Saxs.class.getClassLoader());
try {
parser = Saxs.namespaceAwareFactory().newSAXParser();
} finally {
thread.setContextClassLoader(original);
}
try {
parser.parse(inputSource, new DefaultHandler() {
public void startElement(final String uri, final String localName, final String qName, final Attributes att) throws SAXException {
if (!localName.equals(rootElement)) {
throw new SAXException(localName);
}
}
public InputSource resolveEntity(final String publicId, final String systemId) throws IOException, SAXException {
return new InputSource(new ByteArrayInputStream(new byte[0]));
}
});
return true;
} catch (final SAXException e) {
return in.getLength() == 0;
}
}