--- parsing.api/src/org/netbeans/modules/parsing/api/ParserManager.java +++ parsing.api/src/org/netbeans/modules/parsing/api/ParserManager.java @@ -388,11 +388,25 @@ p = ref.get(); } if (p == null) { - final Lookup lookup = MimeLookup.getLookup (mimeType); - final ParserFactory parserFactory = lookup.lookup (ParserFactory.class); - if (parserFactory == null) { + Lookup lookup = MimeLookup.getLookup (mimeType); + ParserFactory parserFactory = lookup.lookup (ParserFactory.class); + int numberOfAttempts = 0; + while (parserFactory == null) { + // We live in a nice dynamic system, correct? + // Let's try again and keep our fingers crossed! + // http://netbeans.org/bugzilla/show_bug.cgi?id=210236 + if (numberOfAttempts++ > 5) { + // Enough is enough! throw new IllegalArgumentException("No parser for mime type: " + mimeType); } + try { + Thread.sleep(3000); + } catch (InterruptedException ex) { + // Who cares? + } + lookup = MimeLookup.getLookup (mimeType); + parserFactory = lookup.lookup (ParserFactory.class); + } p = parserFactory.createParser(Collections.emptyList()); cachedParsers.put(mimeType, new TimedWeakReference(p)); }