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]

Reply via email to