public static void useCompositeParser() throws Exception { InputStream stream = new ByteArrayInputStream(new byte[0]); ContentHandler handler = new DefaultHandler(); ParseContext context = new ParseContext(); Map<MediaType, Parser> parsersByType = new HashMap<MediaType, Parser>(); parsersByType.put(MediaType.parse("text/html"), new HtmlParser()); parsersByType.put(MediaType.parse("application/xml"), new XMLParser()); CompositeParser parser = new CompositeParser(); parser.setParsers(parsersByType); parser.setFallback(new TXTParser()); Metadata metadata = new Metadata(); metadata.set(Metadata.CONTENT_TYPE, "text/html"); parser.parse(stream, handler, metadata, context); }
/** * Replace Tika's parser with our parse for specific media types. * * @param newParsers the list of parsers to add */ private final void addParsers(final List<Parser> newParsers) { final Map<MediaType, Parser> tikaParsers = parser.getParsers(); for (final Parser newParser : newParsers) { final Set<MediaType> supportedTypes = newParser.getSupportedTypes(context); supportedTypes.forEach(mediaType -> tikaParsers.put(mediaType, newParser)); } parser.setParsers(tikaParsers); } }
mainParser.setParsers(parsers);