Hi,
I was running into frequent ArrayIndexOutOfBoundsException when using
Batik-1.0. Here are two typical stack traces:
2001-09-10 04:55:37 - Ctx( /annotate ): Exception in: R( /annotate +
/servlet/Submit + null) - java.lang.ArrayIndexOutOfBoundsException: 7 >=
7
at java.util.Vector.elementAt(Vector.java:417)
at
org.apache.batik.svggen.DOMTreeManager.recycleTopLevelGroup(DOMTreeManager.java:181)
at
org.apache.batik.svggen.DOMTreeManager.getTopLevelGroup(DOMTreeManager.java:363)
at
org.apache.batik.svggen.SVGGraphics2D.getTopLevelGroup(SVGGraphics2D.java:387)
at
org.apache.batik.svggen.SVGGraphics2D.getTopLevelGroup(SVGGraphics2D.java:373)
2001-09-10 05:01:31 - Ctx( /annotate ): Exception in: R( /annotate +
/servlet/Submit + null) - java.lang.ArrayIndexOutOfBoundsException: 8 >=
6
at java.util.Vector.elementAt(Vector.java:417)
at
org.apache.batik.svggen.DOMTreeManager.appendGroup(DOMTreeManager.java:160)
at
org.apache.batik.svggen.DOMGroupManager.addElement(DOMGroupManager.java:151)
at
org.apache.batik.svggen.SVGGraphics2D.fill(SVGGraphics2D.java:1019)
It seems to crash roughly half the time with one of the above stack
traces, so I'm guessing it's a threading problem in the Batik library;
my code is single-threaded. I was able to fix it with the following
patch. I'm not on the batik-dev mailing list, so please Cc me with any
replies to this message. (I am on batik-users.)
Thanks.
***
/home/armhold/z/xml-batik/sources/org/apache/batik/svggen/DOMTreeManager.java
Thu Apr 26 07:17:02 2001
--- DOMTreeManager.java Wed Sep 12 11:44:07 2001
***************
*** 155,166 ****
*/
public void appendGroup(Element group, DOMGroupManager
groupManager){
topLevelGroup.appendChild(group);
! int nManagers = groupManagers.size();
! for(int i=0; i<nManagers; i++){
DOMGroupManager gm =
(DOMGroupManager)groupManagers.elementAt(i);
if( gm != groupManager )
! gm.recycleCurrentGroup();
! }
}
/**
--- 155,168 ----
*/
public void appendGroup(Element group, DOMGroupManager
groupManager){
topLevelGroup.appendChild(group);
! synchronized (groupManagers) {
! int nManagers = groupManagers.size();
! for(int i=0; i<nManagers; i++){
DOMGroupManager gm =
(DOMGroupManager)groupManagers.elementAt(i);
if( gm != groupManager )
! gm.recycleCurrentGroup();
! }
! }
}
/**
***************
*** 176,186 ****
*/
private void recycleTopLevelGroup(boolean recycleConverters){
// First, recycle group managers
! int nManagers = groupManagers.size();
! for(int i=0; i<nManagers; i++){
DOMGroupManager gm =
(DOMGroupManager)groupManagers.elementAt(i);
gm.recycleCurrentGroup();
! }
// Create top level group node
topLevelGroup = generatorContext.domFactory.
--- 178,190 ----
*/
private void recycleTopLevelGroup(boolean recycleConverters){
// First, recycle group managers
! synchronized (groupManagers) {
! int nManagers = groupManagers.size();
! for(int i=0; i<nManagers; i++){
DOMGroupManager gm =
(DOMGroupManager)groupManagers.elementAt(i);
gm.recycleCurrentGroup();
! }
! }
// Create top level group node
topLevelGroup = generatorContext.domFactory.
--
George Armhold
Rutgers University
Bioinformatics Initiative
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]