Metadata metadata, ParseContext context)
throws IOException, SAXException, TikaException {
XHTMLContentHandler xhtml = new XHTMLContentHandler(handler, metadata);
xhtml.startDocument();
NPOIFSFileSystem filesystem;
TikaInputStream tstream = TikaInputStream.cast(stream);
if (tstream == null) {
filesystem =
new NPOIFSFileSystem(new CloseShieldInputStream(stream));
} else if (tstream.getOpenContainer() instanceof NPOIFSFileSystem) {
filesystem = (NPOIFSFileSystem) tstream.getOpenContainer();
} else if (tstream.hasFile()) {
filesystem = new NPOIFSFileSystem(tstream.getFileChannel());
} else {
filesystem =
new NPOIFSFileSystem(new CloseShieldInputStream(tstream));
}
// Parse summary entries first, to make metadata available early
new SummaryExtractor(metadata).parseSummaries(filesystem);
// Parse remaining document entries
boolean outlookExtracted = false;
for (Entry entry : filesystem.getRoot()) {
POIFSDocumentType type = POIFSDocumentType.detectType(entry);
if (type!=POIFSDocumentType.UNKNOWN) {
setType(metadata, type.getType());
}