@Override
    public Map<MediaType, Parser> getParsers(ParseContext context) {
        Map<MediaType, Parser> map = super.getParsers(context);

        if (loader != null) {
            // Add dynamic parser service (they always override static ones)
            MediaTypeRegistry registry = getMediaTypeRegistry();
            List<Parser> parsers = loader.loadDynamicServiceProviders(Parser.class);
            Collections.reverse(parsers); // best parser last
            for (Parser parser : parsers) {
                for (MediaType type : parser.getSupportedTypes(context)) {
                    map.put(registry.normalize(type), parser);
                }
            }
        }

        return map;
    }
Finds all statically loadable parsers and sort the list by name,
rather than discovery order. CompositeParser takes the last
parser for any given media type, so put the Tika parsers first
so that non-Tika (user supplied) parsers can take precedence.

@param loader service loader
@return ordered list of statically loadable parsers
tika-core/src/main/java/org/apache/tika/parser/DefaultParser.java