StringIndexOutOfBoundsException/DocletAbortException while running JavaDoc

While running JavaDoc (from Java 6) on some files, I see this exception:

java.lang.StringIndexOutOfBoundsException: String index out of range: -1

resulting in a DocletAbortException. I am unable to figure out what might be causing it (or even which of my files is triggering it). Here's the complete stack trace:

[javadoc] java.lang.StringIndexOutOfBoundsException: String index out of range: -1

[javadoc] at java.lang.String.substring(String.java:1932)

[javadoc] at com.sun.tools.doclets.internal.toolkit.util.VisibleMemberMap.getMemberKey(VisibleMemberMap.java:493)

[javadoc] at com.sun.tools.doclets.internal.toolkit.util.VisibleMemberMap.fillMemberLevelMap(VisibleMemberMap.java:178)

[javadoc] at com.sun.tools.doclets.internal.toolkit.util.VisibleMemberMap.access$700(VisibleMemberMap.java:28)

[javadoc] at com.sun.tools.doclets.internal.toolkit.util.VisibleMemberMap$ClassMembers.addMembers(VisibleMemberMap.java:326)

[javadoc] at com.sun.tools.doclets.internal.toolkit.util.VisibleMemberMap$ClassMembers.mapClass(VisibleMemberMap.java:285)

[javadoc] at com.sun.tools.doclets.internal.toolkit.util.VisibleMemberMap$ClassMembers.mapClass(VisibleMemberMap.java:297)

[javadoc] at com.sun.tools.doclets.internal.toolkit.util.VisibleMemberMap$ClassMembers.mapClass(VisibleMemberMap.java:297)

[javadoc] at com.sun.tools.doclets.internal.toolkit.util.VisibleMemberMap$ClassMembers.mapClass(VisibleMemberMap.java:297)

[javadoc] at com.sun.tools.doclets.internal.toolkit.util.VisibleMemberMap$ClassMembers.build(VisibleMemberMap.java:280)

[javadoc] at com.sun.tools.doclets.internal.toolkit.util.VisibleMemberMap$ClassMembers.access$100(VisibleMemberMap.java:230)

[javadoc] at com.sun.tools.doclets.internal.toolkit.util.VisibleMemberMap.<init>(VisibleMemberMap.java:93)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.MemberSummaryBuilder.init(MemberSummaryBuilder.java:88)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.MemberSummaryBuilder.getInstance(MemberSummaryBuilder.java:64)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.BuilderFactory.getMemberSummaryBuilder(BuilderFactory.java:191)

[javadoc] at com.sun.tools.doclets.formats.html.ClassWriterImpl.navSummaryLinks(ClassWriterImpl.java:474)

[javadoc] at com.sun.tools.doclets.formats.html.ClassWriterImpl.printSummaryDetailLinks(ClassWriterImpl.java:456)

[javadoc] at com.sun.tools.doclets.formats.html.HtmlDocletWriter.navLinks(HtmlDocletWriter.java:462)

[javadoc] at com.sun.tools.doclets.formats.html.ClassWriterImpl.writeHeader(ClassWriterImpl.java:125)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.buildClassHeader(ClassBuilder.java:164)

[javadoc] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

[javadoc] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

[javadoc] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

[javadoc] at java.lang.reflect.Method.invoke(Method.java:597)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.invokeMethod(ClassBuilder.java:101)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.AbstractBuilder.build(AbstractBuilder.java:90)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.buildClassDoc(ClassBuilder.java:124)

[javadoc] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

[javadoc] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

[javadoc] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

[javadoc] at java.lang.reflect.Method.invoke(Method.java:597)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.invokeMethod(ClassBuilder.java:101)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.AbstractBuilder.build(AbstractBuilder.java:90)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.build(ClassBuilder.java:108)

[javadoc] at com.sun.tools.doclets.formats.html.HtmlDoclet.generateClassFiles(HtmlDoclet.java:155)

[javadoc] at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.generateClassFiles(AbstractDoclet.java:164)

[javadoc] at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.startGeneration(AbstractDoclet.java:106)

[javadoc] at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.start(AbstractDoclet.java:64)

[javadoc] at com.sun.tools.doclets.formats.html.HtmlDoclet.start(HtmlDoclet.java:42)

[javadoc] at com.sun.tools.doclets.standard.Standard.start(Standard.java:23)

[javadoc] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

[javadoc] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

[javadoc] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

[javadoc] at java.lang.reflect.Method.invoke(Method.java:597)

[javadoc] at com.sun.tools.javadoc.DocletInvoker.invoke(DocletInvoker.java:215)

[javadoc] at com.sun.tools.javadoc.DocletInvoker.start(DocletInvoker.java:91)

[javadoc] at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:340)

[javadoc] at com.sun.tools.javadoc.Start.begin(Start.java:128)

[javadoc] at com.sun.tools.javadoc.Main.execute(Main.java:41)

[javadoc] at com.sun.tools.javadoc.Main.main(Main.java:31)

[javadoc] com.sun.tools.doclets.internal.toolkit.util.DocletAbortException

[javadoc] at com.sun.tools.doclets.formats.html.ClassWriterImpl.printSummaryDetailLinks(ClassWriterImpl.java:467)

[javadoc] at com.sun.tools.doclets.formats.html.HtmlDocletWriter.navLinks(HtmlDocletWriter.java:462)

[javadoc] at com.sun.tools.doclets.formats.html.ClassWriterImpl.writeHeader(ClassWriterImpl.java:125)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.buildClassHeader(ClassBuilder.java:164)

[javadoc] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

[javadoc] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

[javadoc] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

[javadoc] at java.lang.reflect.Method.invoke(Method.java:597)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.invokeMethod(ClassBuilder.java:101)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.AbstractBuilder.build(AbstractBuilder.java:90)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.buildClassDoc(ClassBuilder.java:124)

[javadoc] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

[javadoc] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

[javadoc] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

[javadoc] at java.lang.reflect.Method.invoke(Method.java:597)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.invokeMethod(ClassBuilder.java:101)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.AbstractBuilder.build(AbstractBuilder.java:90)

[javadoc] at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.build(ClassBuilder.java:108)

[javadoc] at com.sun.tools.doclets.formats.html.HtmlDoclet.generateClassFiles(HtmlDoclet.java:155)

[javadoc] at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.generateClassFiles(AbstractDoclet.java:164)

[javadoc] at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.startGeneration(AbstractDoclet.java:106)

[javadoc] at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.start(AbstractDoclet.java:64)

[javadoc] at com.sun.tools.doclets.formats.html.HtmlDoclet.start(HtmlDoclet.java:42)

[javadoc] at com.sun.tools.doclets.standard.Standard.start(Standard.java:23)

[javadoc] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

[javadoc] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

[javadoc] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

[javadoc] at java.lang.reflect.Method.invoke(Method.java:597)

[javadoc] at com.sun.tools.javadoc.DocletInvoker.invoke(DocletInvoker.java:215)

[javadoc] at com.sun.tools.javadoc.DocletInvoker.start(DocletInvoker.java:91)

[javadoc] at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:340)

[javadoc] at com.sun.tools.javadoc.Start.begin(Start.java:128)

[javadoc] at com.sun.tools.javadoc.Main.execute(Main.java:41)

[javadoc] at com.sun.tools.javadoc.Main.main(Main.java:31)

[9038 byte] By [arunkva] at [2007-11-27 2:31:36]
# 1

This error sounds like a corner case bug in the doclet that we haven't seen before.

It might be similar to the following bug that was fixed years ago.

I can only suggest that you start removing input packages or source files

from your javadoc command until it goes away and you can isolate it

to a particular file, and then a portion of a file.

-Doug

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4638015

Javadoc terminates with StringIndexOutOfBoundsException when it

processes the following Doc comment:

/**

* Here's the <a href="mailto: xxxxx@xxxxx ">first</a>

* and here's the <a href="http://www.pobox.com">second</a>.

*/

While the doclet is processing the href stored in a StringBuffer, it

makes calls to String.indexOf(), where the String represents the

original href. The doclet should be calling StringBuffer.indexOf()

instead because the href length may change as it is being processed.

dhkramera at 2007-7-12 2:46:33 > top of Java-index,Developer Tools,Debugging and Profiling Tool APIs...
# 2

I narrowed it down to a simple test case where one of my classes extends another. Unfortunately that base class is in some third party library. I will follow up with the library developer for further analysis.

The interesting thing is that the JDK 1.5 JavaDoc does not cause this exception on the test case.

arunkva at 2007-7-12 2:46:34 > top of Java-index,Developer Tools,Debugging and Profiling Tool APIs...